DBA Scraper - Denmark’s Largest Marketplace
Pricing
from $2.00 / 1,000 results
DBA Scraper - Denmark’s Largest Marketplace
Scrape dba.dk — Denmark's largest classifieds platform. Covers both marketplace and vehicle listings in one actor with mode-specific output schemas and incremental change tracking.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Black Falcon Data
Maintained by CommunityActor stats
0
Bookmarked
13
Total users
2
Monthly active users
5 days ago
Last modified
Categories
Share
What does DBA Scraper do?
DBA Scraper extracts structured listings from dba.dk — Denmark's largest classifieds platform. One actor covers both general marketplace (electronics, furniture, fashion, sport, home & garden) and the vehicle marketplace (cars, motorcycles, boats), with mode-specific output schemas so your dataset stays clean — vehicle runs don't ship empty marketplace columns, and marketplace runs don't ship empty vehicle columns.
Search by keyword, region, condition, price, or seller type for marketplace runs. Switch to vehicle mode to filter by make, year, mileage, fuel type, transmission, registration class, or dealer segment — and get year, mileage, registration number, VIN, and EV driving range as structured fields, not buried in description text.
New to Apify? Sign up free and use the included $5 monthly platform credit to test this actor.
Key features
- 🔀 Dual-mode output — one actor covers both general marketplace and vehicle listings from a single portal. Switch modes with a single input flag — output schemas are mode-specific so vehicle runs don't ship empty marketplace columns and marketplace runs don't ship empty vehicle columns. Dataset stays clean per mode.
- 🚗 Vehicle data depth — cars, motorcycles, and boats return year, mileage, make, model, variant, fuel type, transmission, registration number, VIN, dealer segment, and EV driving range as first-class structured fields. Detail enrichment adds body type, engine power, CO₂ emissions, drive type, and inspection dates.
- 🔗 Paste-mode — paste any dba.dk URL — single-listing pages, search-results, or category SEO URLs. Build the filter you want in the browser, copy, paste; the actor parses every query param.
- 🎯 Batch searches — run multiple search variants in one job — shared dedup, single dataset for compare/diff downstream.
- ♻️ Incremental mode — daily runs emit only listings that are new or whose price/condition changed since last run. Perfect for inventory-diff dashboards and competitive pricing alerts. Saves 80–95% on recurring monitoring.
- 🔔 Notifications — telegram / Slack / Discord / WhatsApp / webhook alerts on each run. Combine with incremental to ping only when prices or inventory actually move.
- 📋 Detail enrichment — two-stage scraping — list first, then enrich each listing with the full detail-page payload. One input toggle controls the depth.
- 💵 Structured pricing — listing price parsed into a numeric
pricefield plus filter inputs (priceFrom/priceTo) so you can target a budget band. UsepriceType(where supported) to exclude leasing or wholesale listings. - 📦 Compact mode — light payload with core fields only — comparable rows across listings without HTML or metadata overhead. Perfect for pricing dashboards.
- ✂️ Description truncation — cap description length with
descriptionMaxLengthto control LLM prompt cost and dataset size — set 0 for full descriptions, or any char-limit to trim.
What data can you extract from dba.dk?
Each result follows a mode-specific schema with no cross-pollution.
Marketplace runs return: listingId, title, description, price, currency, condition, conditionDetails, brand, model, size, color, subType, material, gender, theme, designer, age, season, platform, depth, height, width, length, category, categoryPath, tradeType, attributes, shippingAvailable, freeShipping, buyNowAvailable, disposed, isWebstore, mapImageUrl, plus shared core fields. Generic suffix matching surfaces brand/size/subType/material/gender/theme from any category (lego_brand, women_clothing_size, shoes_brand, …) so you don't need per-category logic.
Vehicle runs return the full spec table parsed from each listing's detail page: make, model, modelSpecification, year, mileage, mileageUnit, fuel, transmission, registrationClass, regno (registration number), chassisNumber (VIN), dealerSegment, drivingRange (for electric vehicles), serviceDocuments, bodyType, color, interiorColor, seats, doors, previousOwners, power (HP), engineSize (L), co2Emission (g/km), fuelConsumption (km/L), maxTowingWeight (kg), drivetrain, weight (kg), country, vehicleCategory, vehicleCondition, vehicleType, firstRegistrationDate, lastInspectionDate, nextInspectionDate, inspectionReportUrl (esyn.dk synsrapport), vehicleSpecs (raw label→value map), sellerKnowledge (raw Q&A from "Sælgers kendskab"), streetAddress, updatedAt, plus shared core fields.
Boats add boatLength, boatWidth, boatDraft (cm), boatBerths, boatSeats, hullMaterial, topSpeed, motorType, motorFuel, motorSize, motorManufacturer, motorIncluded. Motorcycles add volume (engine displacement). Dealer listings add dealerCvr, dealerPageUrl, dealerYearsOnDba, dealerTotalAds.
Shared core fields (both modes): listingId, title, price, currency, location, zipCode, latitude, longitude, coordinateAccuracy, imageUrl, imageUrls, imageCount, sellerName, sellerType, postedAt, url, portalUrl, isPromoted, scrapedAt, source, changeType.
Default behaviour (since v0.3.0): null and empty values are dropped from each row so output stays compact for LLM pipelines (omitNulls: true). Flip to false if you need a stable schema where every row carries every documented field.
Input
The main inputs are a search keyword and a result limit. Additional filters and options are available in the input schema.
Key parameters:
query— Single search keyword (e.g. 'iPhone', 'sofa', 'cykel'). For multiple keywords in one run, use thequeriesarray below.queries— Run multiple keyword searches in one actor invocation — e.g.["bamse", "nike sko", "iPhone 15"]. Each entry produces a separate search; results are merged and deduplicated by listing ID. Filters below (category, condition, region, price, etc.) apply to ALL queries. Takes precedence over the singlequeryfield. (default:[])searchUrls— Paste one or more dba.dk URLs — search-result URLs or category SEO URLs (item detail URLs not yet supported). Build the filters you want in the browser, copy the URL, paste here. Each URL is paginated and merged with the others. Works for both marketplace (/recommerce/forsale/search?...) and vehicle (/mobility/search/car|mc|boat?...) URLs. Takes precedence overquery,queries, and other filter inputs. (default:[])category— Filter by DBA category. (default:"all")mobilityType— If set, uses the DBA Mobility endpoint for vehicle-specific structured data (cars, motorcycles, boats). Leave empty to use the standard recommerce search. (default:"")yearFrom— Minimum vehicle year (e.g. 2015). (default:0)mileageTo— Maximum mileage in kilometres. (default:0)fuel— Filter by fuel type. Danish label or numeric ID both work. (default:"")transmission— Filter by transmission type. Danish label or numeric ID both work. (default:"")dealerSegment— Filter by seller type. (default:"")fiksFerdig— Marketplace only. When on, return only listings that support DBA's Fiks færdig (transactable shipping via DBA Pay). ~62% of recommerce listings qualify. Maps toshipping_exists=trueon the SERP URL. (default:false)priceMin— Minimum price filter. (default:0)priceMax— Maximum price filter. 0 = no limit. (default:0)condition— Filter by item condition. (default:"all")region— Filter by geographic region in Denmark. (default:"all")maxResults— Maximum total results to return. 0 = unlimited. (default:25)maxResultsPerQuery— Cap per individual query when running multiple searches viaqueriesorsearchUrls. 0 = use the globalmaxResultsfor every query. Useful when batching diverse searches that you want sampled equally (e.g. 50 results from each of 5 categories rather than 250 from one). (default:0)includeDetails— Fetch full listing details (description, images, category, attributes). Slower but more complete. (default:true)incremental— Only return new listings since last run. State is scoped per query+category and saved to a named key-value store between runs. (default:false)compact— Core fields only (for AI-agent/MCP workflows). (default:false)omitNulls— Drop fields with null, empty string, empty array, or empty object values from each output row. Reduces dataset size and removes noise for LLM pipelines. Keepsfalseand0as valid values. Default on — flip off if you need a stable schema where every row has every documented field. (default:true)- ...and 18 more parameters
Input examples
Marketplace search — Keyword-driven search across general classifieds.
→ Marketplace records with category, condition, attributes, and shipping flags. No vehicle columns.
{"query": "iPhone","category": "elektronik","condition": "good","maxResults": 50}
Multiple keywords in one run — Run several searches in one actor invocation — results are merged and deduplicated by listing ID. Filters apply to all queries.
→ Merged records across all keywords, cross-query deduped. Use maxResultsPerQuery to sample each search equally.
{"queries": ["bamse","nike sko","iPhone 15"],"category": "all","maxResults": 300,"maxResultsPerQuery": 100}
Paste DBA URLs (paste-mode) — Build the filters you want in the browser on dba.dk, copy the search-result URL, paste here. Mix marketplace and mobility URLs freely.
→ Each pasted URL is paginated and merged into the same dataset. Mixed-mode runs (marketplace + vehicle in one input) keep both field sets.
{"searchUrls": ["https://www.dba.dk/recommerce/forsale/search?q=iphone&category=elektronik&condition=good","https://www.dba.dk/mobility/search/car?year=2020-&fuel=El&price=-300000"],"maxResults": 200,"maxResultsPerQuery": 100}
Used-car search — Vehicle marketplace with year, mileage, fuel, and price filters.
→ Vehicle records with year, mileage, make, model, fuel, transmission, registration number, and VIN. No marketplace columns.
{"mobilityType": "car","yearFrom": 2018,"mileageTo": 100000,"priceMax": 250000,"fuel": "Diesel","transmission": "Automatisk","maxResults": 100}
EV market scan — Filter electric vehicles by year and price range — drivingRange is returned as a structured field.
→ Electric-vehicle records with driving-range data — handy for EV market sizing or resale-value research.
{"mobilityType": "car","fuel": "El","yearFrom": 2020,"priceMax": 400000,"maxResults": 200}
Dealer-inventory monitor (incremental) — Track new dealer-listed cars on a daily schedule — only new or changed listings are emitted (and billed) after the first run.
→ Only new or changed dealer listings since the previous run with this stateKey. First run builds baseline; subsequent runs emit deltas.
{"mobilityType": "car","dealerSegment": "Forhandler","incremental": true,"stateKey": "dba-dealer-cars","maxResults": 500}
Fiks-færdig only (transactable shipping) — Restrict marketplace SERP to listings that support DBA's Fiks-færdig (transactable shipping via DBA Pay). About 62% of recommerce listings qualify — handy for resale/dropship operations that need shipping-ready inventory.
→ Only marketplace listings where shippingAvailable: true. Skips listings the seller never opted into Fiks-færdig.
{"query": "sneakers","fiksFerdig": true,"maxResults": 100}
Compact for AI agents — Core fields only with description truncation — for LLM-driven pipelines and MCP tools.
→ Token-light payloads with the most relevant fields, ideal for piping into LLMs.
{"query": "MacBook","maxResults": 50,"compact": true,"descriptionMaxLength": 200}
Dense output (drop null/empty) — Keep the full schema but drop fields with null, empty string, empty array, or empty object values from each row. Saves bandwidth and reduces LLM-context noise.
→ Rows that vary in field count — only the fields with actual values appear. Stable types: false and 0 are preserved.
{"query": "iPhone","maxResults": 100,"omitNulls": true}
Output
Each run produces a dataset of structured listing records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.
Example listing record
{"listingId": "dc82461422eb6937e0d5d4a43445542ca004166fc675ad1eea2c7fefd83c9acf","title": "Apple iPhone X Smartphone 256 GB Space Grey","description": "Apple iPhone X smartphone med 256 GB lagerplads i Space Grey farve. Telefonen leveres i original emballage. Velegnet til daglig brug og opbevaring af større mængder data. Oplader og høretelefoner medf...","price": 950,"currency": "DKK","condition": "good","conditionDetails": "Brugt - men i god stand","brand": "Apple","model": "iPhone 2G-11","category": "Mobiltelefoner","categoryPath": "Elektronik og hvidevarer > Telefoner og telefontilbehør > Mobiltelefoner","location": "8600 Silkeborg","zipCode": "8600","latitude": 56.17147071,"longitude": 9.4900253,"imageUrl": "https://images.dbastatic.dk/dynamic/default/item/15744048/d2578d4a-3ce1-4447-9be7-0a5edf0967d9","imageUrls": ["https://images.dbastatic.dk/dynamic/default/item/15744048/d2578d4a-3ce1-4447-9be7-0a5edf0967d9","https://images.dbastatic.dk/dynamic/default/item/15744048/8f92417d-afcf-4f5b-b1f1-caf2512cc2f9","https://images.dbastatic.dk/dynamic/default/item/15744048/d375f010-d3ff-4357-b881-56b0031136bb","https://images.dbastatic.dk/dynamic/default/item/15744048/9b30a40f-9f4f-409e-9121-237ed56cbba9"],"imageCount": 4,"sellerName": null,"sellerType": "private","tradeType": "Til salg","postedAt": "2026-03-28T08:29:59.000Z","editedAt": "2026-03-13T16:25:12.967408+01:00","url": "https://www.dba.dk/recommerce/forsale/item/15744048","portalUrl": "https://www.dba.dk/recommerce/forsale/item/15744048","sellerId": 1312168178,"isPromoted": false,"shippingAvailable": true,"freeShipping": false,"buyNowAvailable": true,"disposed": false,"isWebstore": false,"attributes": {"phone_brand": "Apple","mobile_memory_size": "256 GB","mobile_model": "iPhone 2G-11"},"scrapedAt": "2026-03-28T08:56:13.793Z","source": "dba.dk","changeType": null}
Example vehicle record
{"listingId": "250629646d864efa482a49dc8ee7e781f10dbd8940db28e58349ee28f9ac35dc","title": "BMW 118d","description": "Velkørende BMW 118d, helt nysynet og klar til levering. Service udført løbende hos autoriseret værksted. Tager gerne bil i bytte.","price": 89900,"currency": "DKK","brand": "BMW","model": "118d","make": "BMW","modelSpecification": "118d 2,0 Sport Line aut.","year": 2016,"mileage": 279000,"mileageUnit": "KILOMETER","fuel": "Diesel","transmission": "Manuelt","registrationClass": "Personbil","registrationClassId": 1,"regno": "CT70454","chassisNumber": "WBA1S510XGV833650","dealerSegment": null,"serviceDocuments": [],"location": "Aalborg","latitude": 57.00929,"longitude": 9.86221,"imageUrl": "https://images.dbastatic.dk/dynamic/default/item/21274307/da40e7dc-c9b3-4a3f-b6c6-ce2c5952152e","imageUrls": ["https://images.dbastatic.dk/dynamic/default/item/21274307/da40e7dc-c9b3-4a3f-b6c6-ce2c5952152e","https://images.dbastatic.dk/dynamic/default/item/21274307/192a55f1-b3df-4d72-9c3a-1f0c4d9c8b22","https://images.dbastatic.dk/dynamic/default/item/21274307/c8e4b2d3-7f5a-4e1b-9d8c-3a5e7f2b1c4d"],"imageCount": 3,"sellerType": "private","postedAt": "2026-05-08T14:22:11.000Z","url": "https://www.dba.dk/mobility/item/21274307","portalUrl": "https://www.dba.dk/mobility/item/21274307","isPromoted": false,"scrapedAt": "2026-05-11T11:55:27.000Z","source": "dba.dk"}
Incremental fields
When incremental: true, each record also carries:
changeType— one ofNEW,UPDATED,UNCHANGED,REAPPEARED,EXPIRED.firstSeenAt,lastSeenAt— ISO-8601 timestamps tracking the listing across runs.
How to scrape dba.dk
- Go to DBA Scraper in Apify Console.
- Enter a search keyword.
- Set
maxResultsto control how many results you need. - Enable
includeDetailsif you need full descriptions. - Click Start and wait for the run to finish.
- Export the dataset as JSON, CSV, or Excel.
Use cases
- Track used-car pricing trends by make, model, year, and fuel type across Denmark — measure how diesel, petrol, hybrid, and EV resale values shift over time.
- Monitor dealer inventory by filtering
dealerSegment: "Forhandler"with incremental mode — catch new dealer listings the moment they go live without re-scraping the whole feed. - EV market research — filter by
fuel: "El"and track driving-range claims, dealer prices, and second-hand supply over time for resale-value modelling. - Marketplace deal hunting — combine category filters with incremental mode to alert on new electronics, furniture, or sport-gear listings under your budget.
- Regional supply analysis — use structured
zipCodeandlatitude/longitudeto map where supply concentrates by category or vehicle type. - Feed AI agents, MCP tools, and automated pipelines using compact mode with description truncation to keep payloads light for LLM context windows.
How much does it cost to scrape dba.dk?
DBA Scraper uses pay-per-event pricing. You pay a small fee when the run starts and then for each result that is actually produced.
- Run start: $0.01 per run
- Per result: $0.002 per listing record
Example costs:
- 10 results: $0.03
- 100 results: $0.21
- 500 results: $1.01
Example: recurring monitoring savings
These examples compare full re-scrapes with incremental runs at different churn rates. Churn is the share of listings that are new or whose tracked content changed since the previous run. Actual churn depends on your query breadth, source activity, and polling frequency — the scenarios below are examples, not predictions.
Example setup: 100 results per run, daily polling (30 runs/month). Event-pricing examples scale linearly with result count.
| Churn rate | Full re-scrape run cost | Incremental run cost | Savings vs full re-scrape | Monthly cost after baseline |
|---|---|---|---|---|
| 5% — stable niche query | $0.21 | $0.02 | $0.19 (90%) | $0.60 |
| 15% — moderate broad query | $0.21 | $0.04 | $0.17 (81%) | $1.20 |
| 30% — high-volume aggregator | $0.21 | $0.07 | $0.14 (67%) | $2.10 |
Full re-scrape monthly cost at daily polling: $6.30. First month with incremental costs $0.79 / $1.37 / $2.24 for the 5% / 15% / 30% scenarios because the first run builds baseline state at full cost before incremental savings apply.
FAQ
How many results can I get from dba.dk?
The number of results depends on the search query and available listings on dba.dk. Use the maxResults parameter to control how many results are returned per run.
Does DBA Scraper support recurring monitoring?
Yes. Enable incremental mode to only receive new or changed listings on subsequent runs. This is ideal for scheduled monitoring where you want to track changes over time without re-processing the full dataset.
Can I integrate DBA Scraper with other apps?
Yes. DBA Scraper works with Apify's integrations to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.
Can I use DBA Scraper with the Apify API?
Yes. You can start runs, manage inputs, and retrieve results programmatically through the Apify API. Client libraries are available for JavaScript, Python, and other languages.
Can I use DBA Scraper through an MCP Server?
Yes. Apify provides an MCP Server that lets AI assistants and agents call this actor directly. Use compact mode and descriptionMaxLength to keep payloads manageable for LLM context windows.
Is it legal to scrape dba.dk?
This actor extracts publicly available data from dba.dk. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.
Your feedback
If you have questions, need a feature, or found a bug, please open an issue on the actor's page in Apify Console. Your feedback helps us improve.
You might also like
- Actiris Brussels Job Scraper — Scrape all active job listings from actiris.brussels — official Brussels public employment service..
- Adzuna Job Scraper — Global Jobs with Salary & Coordinates — Scrape adzuna.com job listings across 19 country markets with structured salary data.
- APEC.fr Scraper - French Executive Jobs — Scrape apec.fr - French executive job listings with salary ranges, company, location, skills,.
- Arbeitsagentur Jobs Feed — German Federal Employment Agency — Extract job listings from arbeitsagentur.de — Germany's official public employment portal with 1M+.
- Arbeitsagentur Scraper - German Jobs — Scrape arbeitsagentur.de - Germany’s official employment portal with 1M+ listings. Contact data,.
- Arbetsformedlingen Job Scraper — Scrape arbetsformedlingen.se (Platsbanken) — Sweden's official employment portal. Returns 84.
- AutoScout24 Scraper — European Car Listings with Dealer Data — Scrape autoscout24.com - Europe's largest used car marketplace with 770K+ listings. Structured.
- Bayt.com Scraper — MENA Jobs with Salary & Skills Filter — Scrape bayt.com — the leading Middle East job board covering UAE, Saudi Arabia, Qatar, Egypt.
- Bilbasen Scraper - Denmark's Car Marketplace — Complement DBA Scraper with dealer-deep coverage of bilbasen.dk, Denmark's leading car-only marketplace.
Getting started with Apify
New to Apify? Create a free account with $5 credit — no credit card required.
- Sign up — $5 platform credit included
- Open this actor and configure your input
- Click Start — export results as JSON, CSV, or Excel
Need more later? See Apify pricing.