# Dba Product Search Scraper (`soft_alexist/dba-product-search-scraper`) Actor

Scrape product listings from DBA.dk's marketplace with precision. Extract names, prices, brand info, images, condition, and offers from search results — perfect for price monitoring, inventory research, and market analysis.

- **URL**: https://apify.com/soft\_alexist/dba-product-search-scraper.md
- **Developed by:** [Soft Alexist](https://apify.com/soft_alexist) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Product Search Scraper: Collect Marketplace Listings Fast

***

### What Is DBA.dk?

DBA.dk is Denmark's largest online marketplace and classified ads platform, hosting thousands of product listings across categories like electronics, furniture, clothing, and collectibles. With millions of monthly users buying and selling both new and second-hand items, DBA.dk represents a rich source of market data. Manually collecting product information is labor-intensive — the **DBA.dk Product Search Scraper** automates extraction, transforming search results into structured, analyzable data.

***

### Overview

The **DBA Product Search Scraper** extracts individual product listings from DBA.dk search results pages, capturing essential marketplace data for each item. It is ideal for:

- **Price researchers** tracking product pricing trends and competitor rates
- **Market analysts** studying consumer goods availability and condition distribution
- **Data scientists** building product datasets for machine learning models
- **E-commerce professionals** monitoring inventory and competitive positioning
- **Resellers** identifying market opportunities and pricing strategies

Key capabilities include batch processing multiple search queries, configurable item limits, and resilient error handling to maximize data collection success.

***

### Input Format

The scraper accepts a JSON configuration specifying which DBA.dk search results to scrape:

```json
{
    "urls": [
        "https://www.dba.dk/recommerce/forsale/search?page=2&q=iphone"
    ],
    "max_items_per_url": 200,
    "ignore_url_failures": true
}
```

#### Configuration Parameters

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | DBA.dk search result URLs. Use search queries with filters (e.g., product name, price range, category). Paste URLs one by one or use bulk edit for prepared lists. |
| `max_items_per_url` | Integer | Maximum products to extract per URL (range: 1–200+). Higher values collect more items but increase run time. Default: `100`. |
| `ignore_url_failures` | Boolean | If `true`, skips failed URLs and continues scraping; if `false`, stops on error. Recommended: `true` for large batch operations. |

#### URL Format Tips

- **Search by keyword:** `https://www.dba.dk/recommerce/forsale/search?q=iphone`
- **Paginated results:** Add `page=2`, `page=3`, etc. for multiple pages
- **Category filters:** Use DBA.dk's UI to apply filters, then copy the resulting URL
- **Examples:**
  - Specific product: `...search?q=samsung+galaxy+s21`
  - Price range: Use DBA's advanced filters and copy the generated URL
  - Condition: DBA filters apply to the URL string

***

### Output Format

#### Example Output Record

```json
{
  "description": "Iphone 11",
  "offers": {
    "@type": "Offer",
    "price": "999",
    "price_currency": "DKK",
    "availability": "https://schema.org/InStock",
    "item_condition": "https://schema.org/UsedCondition"
  },
  "brand": {
    "@type": "Brand",
    "name": "Apple"
  },
  "name": "Iphone 11",
  "image": "https://images.dbastatic.dk/dynamic/default/item/23550295/a50f96ea-9f95-49c1-a4b7-b9733ab23326",
  "item_condition": "https://schema.org/UsedCondition",
  "url": "https://www.dba.dk/recommerce/forsale/item/23550295",
  "from_url": "https://www.dba.dk/recommerce/forsale/search?q=iphone"
}
```

Each scraped product returns a record with 7 key fields:

#### Product Identification & Branding

| Field | Description & Example |
|---|---|
| **Name** | The product title as listed by the seller (e.g., "iPhone 13 Pro Max 256GB Space Gray"). Provides the primary identifier for the item. |
| **Brand** | Manufacturer or brand name extracted from listing (e.g., "Apple"). Useful for filtering, categorization, and brand-level analysis. |
| **URL** | Direct link to the individual product page on DBA.dk. Allows drill-down into full listings or re-verification of data. |

#### Product Details & Condition

| Field | Description & Example |
|---|---|
| **Item Condition** | State of the product: `New`, `Like New`, `Good`, `Fair`, or `Poor`. Critical for pricing models and quality assessment. |
| **Description** | Full seller-provided text describing the product, condition, and any defects (e.g., "Mint condition, barely used, original box included"). May include links, bullet points, or special characters. |
| **Image** | URL to the primary product photo hosted by DBA.dk. Use for visual verification or thumbnail display in downstream systems. |

#### Pricing & Transaction Data

| Field | Description & Example |
|---|---|
| **Offers** | Price or offer information. May include: fixed price (e.g., "299 DKK"), price range (e.g., "200–500 DKK"), or "Make an Offer" status. Format depends on listing type (buy-now vs. auction). |

***

### How to Use

#### Step 1: Identify Search URLs

1. Visit [dba.dk](https://www.dba.dk)
2. Use the search bar or category filters to find products of interest
3. Apply any filters (price, condition, category) using DBA's UI
4. Copy the full URL from your browser's address bar

#### Step 2: Configure Your Scrape

- Paste the URL into the `urls` array
- For large datasets, add multiple URLs (or paginated variants: `page=1`, `page=2`, etc.)
- Set `max_items_per_url` based on your needs (e.g., `100` for moderate runs, `200` for exhaustive collection)
- Set `ignore_url_failures` to `true` if processing many URLs

#### Step 3: Run the Scraper

- Start the scraping run via the API or dashboard
- Monitor progress in the run logs
- Wait for completion (time varies by URL count and item limit)

#### Step 4: Export & Analyze

- Download results as **JSON**, **CSV**, or **Excel**
- Import into databases, spreadsheets, or BI tools
- Analyze pricing trends, inventory levels, or competitive positioning

#### Best Practices & Troubleshooting

| Issue | Solution |
|---|---|
| No items returned | Verify the URL is a *search results* page, not a single product page. Try a simpler search query. |
| Slow runs | Reduce `max_items_per_url` or split large queries into smaller, focused searches. |
| Missing fields | Some fields may be empty if sellers don't fill them (e.g., blank "Brand"). Handle with default values in your downstream process. |
| Rate limiting | Space out large batch operations; use proxy rotation if needed. |

***

### Real-World Applications

- **Price Intelligence:** Track price trends for popular electronics, furniture, or collectibles across weeks or months
- **Competitive Benchmarking:** Compare your product prices against active DBA.dk listings in real time
- **Inventory Research:** Understand market supply and condition distribution for resale strategy
- **Sentiment & Condition Analysis:** Correlate item condition with pricing to optimize listing strategy
- **Market Entry:** Identify untapped niches or high-demand products before competitors

The structured output integrates seamlessly into Python, R, or Excel for further analysis, machine learning pipelines, or reporting dashboards.

***

### Conclusion

The **DBA.dk Product Search Scraper** is a powerful tool for anyone seeking structured marketplace data from Denmark's largest classifieds platform. With 7 essential fields covering identity, condition, pricing, and media, it transforms unstructured listings into actionable insights. Whether you're monitoring prices, researching inventory, or building predictive models, this scraper delivers the data foundation you need in minutes, not hours.

# Actor input Schema

## `urls` (type: `array`):

Add the URLs of the product list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://www.dba.dk/recommerce/forsale/search?page=2&q=iphone"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}
```

# 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 = {
    "urls": [
        "https://www.dba.dk/recommerce/forsale/search?page=2&q=iphone"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("soft_alexist/dba-product-search-scraper").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 = {
    "urls": ["https://www.dba.dk/recommerce/forsale/search?page=2&q=iphone"],
    "ignore_url_failures": True,
    "max_items_per_url": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("soft_alexist/dba-product-search-scraper").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 '{
  "urls": [
    "https://www.dba.dk/recommerce/forsale/search?page=2&q=iphone"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 100
}' |
apify call soft_alexist/dba-product-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

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/JqyKl0ks4DzxyfRNQ/builds/EbcnKID2nBbffoxiL/openapi.json
