# DBA.dk Scraper API - Denmark Classifieds & Cars (`vonsensey/dba-dk-scraper-api`) Actor

Every DBA.dk ad in a clean schema: price in DKK, location with coordinates, publication time, images, and private-vs-dealer. Paste a saved DBA search and its filters are honoured exactly. Car searches add make, model, year and real kilometres. Failures are free, no run-start fee.

- **URL**: https://apify.com/vonsensey/dba-dk-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## DBA.dk Scraper API - Denmark Classifieds & Cars

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [LinkedIn Public Data Suite](https://apify.com/vonsensey/linkedin-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [Google Maps Suite](https://apify.com/vonsensey/google-maps-reviews-scraper-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

**Every DBA.dk ad in a clean schema: price in DKK, location with coordinates, publication time, images, and private-vs-dealer. Paste a saved DBA search and its filters are honoured exactly. Car searches add make, model, year and real kilometres. Failures are free, no run-start fee.**

**No run-start fee, and failures are free.** Error and coverage rows cost nothing, and on a schedule an ad is billed in full only when it has actually changed. An ad that was fetched and compared but had not moved is billed once as an ad checked ($0.0002) — a tenth of the ad's own price.

### ⭐ Why this one

Denmark's DBA, classifieds and cars.

Prices come back as a **number plus an ISO currency code**, never as a formatted string, and nothing is converted — so no invented exchange rate ever enters your data. Location carries **latitude and longitude**, not just a place name. Whether the seller is **private or a dealer** is one normalised field rather than localised text you have to parse.

No account, no API key and no proxy is needed for any of it.

### 🚀 Run it

Click **Start** — the defaults below are already filled in.

```json
{
  "sources": [
    "dba"
  ],
  "vertical": "marketplace",
  "query": "cykel",
  "maxItems": 100,
  "maxPages": 5
}
```

#### Use your own saved search

Build the search on the site — region, category, price band, condition — then copy the address bar into `startUrls`. The URL is used exactly as you gave it, so every filter the site applies, you get.

This Actor is a preset of **[Nordic Marketplace Scraper API - Blocket, FINN, DBA, Tori](https://apify.com/vonsensey/blocket-finn-nordic-marketplace-scraper-api)**, which runs all four Nordic countries at once and exposes every option in one place.

### 💵 Pricing

| Event | GOLD per 1,000 |
|---|---|
| **listing** | **$2.50** |
| vehicle | $6.00 |
| company | $3.00 |
| job | $3.00 |
| listing-check | $0.20 |

**Never billed:** a run that returns nothing, a row that could not be read, coverage rows, the run summary, and — with `monitorChangesOnly` on — every ad that has not moved since the last run. There is no run-start fee. Cap a single run with `maxCostUsd`.

### ❓ FAQ

#### Do I need a proxy or an account?

No. Everything is handled for you and there is nothing to buy on top.

#### Can I paste my saved search from the site?

Yes — put it in `startUrls`. Its filters are honoured exactly as the site applies them.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly` to true. Only ads that are new or that actually moved are billed in full; the rest come back as free `unchanged` rows, billed a tenth of the ad price as an ad checked.

#### Why did I get fewer rows than the site says exist?

`maxItems` or `maxPages` stopped the walk, and the free **coverage** row says which — it carries the site's own total, the pages available, the pages read, and whether the end was genuinely reached.

#### What currency are prices in?

The ad's own, as a number plus its ISO code. Nothing is converted.

#### Can I run this on a schedule?

Yes, and it is built for it. Turn on `monitorChangesOnly` first and a daily cron costs a fraction of the first run.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/dba-dk-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/dba-dk-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/dba-dk-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/dba-dk-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~dba-dk-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/dba-dk-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/dba-dk-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/dba-dk-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Scrape DBA.dk classified ads from Denmark](https://apify.com/vonsensey/dba-dk-scraper-api/examples/dba-dk-denmark-classified-ads), a ready-made example you can start as-is or copy.

### Use cases

- **Watch competitor stock across borders.** Put a saved search from Blocket, FINN, DBA or Tori on a cron and pay only for the ads whose price or title actually moved — everything unchanged comes back as a free row.
- **Price one product in four markets at once.** The same search runs in Sweden, Norway, Denmark and Finland and returns rows with real SEK, NOK, DKK and EUR amounts, so a price comparison needs no currency guesswork.
- **Build a Nordic used-car dataset.** Make, model, year, mileage in real kilometres, fuel, transmission, and the registration plate and VIN where the marketplace publishes them, across three countries in one schema.
- **Generate B2B leads from official registers.** Norwegian and Finnish company records with organisation number, industry code, registered address and the bankrupt / in-liquidation flags, so a lead list excludes companies that are winding up.
- **Track Nordic hiring.** Swedish Platsbanken and Norwegian FINN job adverts in one schema with employer, organisation number, deadline and vacancy count — billed only for adverts that are new or changed.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per listing delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

### FAQ

#### Do I need a proxy or an account?

No. Everything is handled for you and there is nothing to buy on top.

#### Can I use the saved search I already built on the site?

Yes — paste it into `startUrls`. The URL is used exactly as given, so every filter the site applies, you get.

#### What currency are prices in?

Each ad's own — SEK, NOK, DKK or EUR — as a number plus its ISO code. Nothing is converted, so no invented exchange rate enters your data.

#### Is car mileage in kilometres?

Yes, always. Blocket and FINN publish Scandinavian mil, where one mil is ten kilometres; `mileageKm` is converted and the raw value is kept beside it.

#### Why did I get an even split across countries instead of all my rows from one?

Deliberate: the row limit is shared between the sources you selected, so a small budget still gives you a Nordic dataset rather than one country.

#### Does this cover Hemnet, Booli or Bilbasen?

No, and it never claims to — those sites block automated access, and a listing that promised them would be lying.

#### How do I stop a schedule charging me for data I already have?

Set `monitorChangesOnly`. Only ads that are new or that actually moved are billed; the rest are free rows.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `query` (type: `string`):

What to search for, in any language the site accepts. Runs against every selected source, so one word gives you the same search in all four countries. Defaults to a sample term so an empty run does something cheap and sensible rather than sweeping every category.

## `startUrls` (type: `array`):

Paste search URLs straight from blocket.se, finn.no, dba.dk or tori.fi. Build the filters you want on the site — region, category, price band, condition, mileage — copy the address bar, and they are honoured exactly. This is the fastest way to get precisely the ads you want.

## `sources` (type: `array`):

Which sites to search. Leave empty and the right sources for your chosen vertical are picked for you: all four marketplaces for classifieds, Blocket/FINN/DBA for cars, Platsbanken and FINN for jobs, the Norwegian and Finnish registers for companies.

## `vertical` (type: `string`):

Classifieds, cars, jobs or companies. Not every site carries every vertical - Tori has no car section and neither Blocket nor DBA has a jobs section, and any source that cannot serve your choice is skipped with a free row telling you so.

## `maxItems` (type: `integer`):

Stop after this many billable rows across all sources together. The budget is split evenly between sources, so a small number still gives you every country rather than only the first one.

## `maxPages` (type: `integer`):

How deep to walk each source. The sites cap their own result sets at 50 pages of roughly 50 ads, so 50 is the deepest any tool can go - narrow the search instead of raising this.

## `sellerType` (type: `string`):

Keep only private sellers, only professional dealers, or both. Normalised across all four countries, so you do not have to know the local wording.

## `minPrice` (type: `integer`):

In the ad's own currency - SEK on Blocket, NOK on FINN, DKK on DBA, EUR on Tori. Ads with no price at all are excluded when this is set.

## `maxPrice` (type: `integer`):

In the ad's own currency. Ads with no price at all are excluded when this is set.

## `publishedWithinDays` (type: `integer`):

Keep only ads published or bumped in the last N days. Ideal for a daily run that should see only what is new.

## `companyName` (type: `string`):

Only for the company vertical: search the Norwegian and Finnish registers by name.

## `municipality` (type: `string`):

Norwegian kommunenummer (0301 is Oslo) or a Finnish city name. Narrows a register search to one area.

## `industryCode` (type: `string`):

Norwegian næringskode or Finnish business-line code, e.g. 62.010 for computer programming.

## `onlyActiveCompanies` (type: `boolean`):

On by default, because a lead list should not contain companies that are winding up. Turn it off to study distress instead - both registers publish the flags.

## `monitorChangesOnly` (type: `boolean`):

For scheduled runs. The Actor remembers what it saw last time and bills only the ads that are new or that actually moved; everything unchanged comes back as a free row. This is what makes an hourly cron affordable.

## `watchFields` (type: `array`):

Which fields make an ad 'changed' when monitoring. Price and title by default.

## `maxCostUsd` (type: `number`):

A hard ceiling on what one run may spend, in USD. The run stops cleanly at the limit and says so in the free summary row. Accepts cents (0.25 is valid). Leave empty for no ceiling.

## Actor input object example

```json
{
  "query": "cykel",
  "startUrls": [],
  "sources": [
    "dba"
  ],
  "vertical": "marketplace",
  "maxItems": 100,
  "maxPages": 5,
  "sellerType": "any",
  "onlyActiveCompanies": true,
  "monitorChangesOnly": false,
  "watchFields": [
    "price",
    "title"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "cykel",
    "sources": [
        "dba"
    ],
    "vertical": "marketplace",
    "maxItems": 100,
    "maxPages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/dba-dk-scraper-api").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "cykel",
    "sources": ["dba"],
    "vertical": "marketplace",
    "maxItems": 100,
    "maxPages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/dba-dk-scraper-api").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "cykel",
  "sources": [
    "dba"
  ],
  "vertical": "marketplace",
  "maxItems": 100,
  "maxPages": 5
}' |
apify call vonsensey/dba-dk-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/dba-dk-scraper-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qZTyrWtaeylvIfj3C/builds/9enxBNADHo8jQfqyY/openapi.json
