# DBA Scraper — Listings, Prices, Sellers & GPS (`haketa/dba-scraper`) Actor

Scrape DBA.dk, Denmark's largest classifieds, by keyword or URL. Get price (DKK), seller type (private/retailer), location with GPS, publish date, brand, attributes, photos and the full ad description. Cars, electronics, home and more. No API key. Export JSON, CSV, Excel.

- **URL**: https://apify.com/haketa/dba-scraper.md
- **Developed by:** [Haketa](https://apify.com/haketa) (community)
- **Categories:** E-commerce, Lead generation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## DBA.dk Scraper — Danish Classifieds, Listings, Prices & Leads 🇩🇰

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?logo=apify)](https://apify.com/haketa/dba-scraper)
[![Data Quality](https://img.shields.io/badge/Data%20Quality-Verified%20100%25-brightgreen)](#-field-reference)
[![Pricing](https://img.shields.io/badge/Pricing-Pay%20Per%20Result-blue)](#-scalability--deep-pagination-guide)
[![Maintenance](https://img.shields.io/badge/Maintained-Active%202026-success)](#-changelog)
[![Exports](https://img.shields.io/badge/Export-JSON%20|%20CSV%20|%20Excel-purple)](#-export-formats--integrations)

Extract listings, asking prices in DKK, seller classification, geographic GPS coordinates, and full product details from [DBA.dk](https://www.dba.dk) (Den Blå Avis) — Denmark's largest second-hand marketplace and online classifieds portal. This **DBA scraper** is engineered for retail price monitoring, second-hand circular arbitrage, B2B merchant prospecting, automotive valuation, and competitive intelligence without requiring user credentials, browser emulation, or manual maintenance.

Export structured Danish marketplace data directly to **JSON, CSV, Excel, or API**.

***

### ⚡ At a glance

| Feature | Specification |
|---|---|
| **Target Website** | `dba.dk` (Den Blå Avis — Denmark's #1 classifieds site) |
| **Data Scope** | Used vehicles, designer furniture, consumer tech, clothing, tools, hobby items |
| **Search Modes** | Keyword queries (`iphone`, `sofa`, `cykel`), category filters, or direct Start URLs |
| **Pagination Scale** | **1,000+ results** with automatic multi-page traversal (up to 50 listings/page) |
| **Core Identifiers** | Listing ID, canonical DBA URL, Danish listing title, numeric price in DKK |
| **Lead Generation** | Seller type segmentation (`private` individuals vs commercial `retailer` dealers) |
| **Geographic Intelligence** | Danish town, postal area, and exact centroid GPS coordinates (`lat`, `lng`) |
| **Detail Enrichment** | Optional full description text extraction, item attributes, and multi-photo arrays |
| **Deduplication** | Automatic across keywords, categories, and paginated crawl passes |
| **Output Formats** | JSON, CSV, XML, Excel, NDJSON, HTML table, RSS, Apify REST API |
| **Default Proxy** | Apify Proxy Datacenter (instant response times, minimal compute usage) |

***

### 🔎 Why scrape DBA.dk?

**DBA.dk** (Den Blå Avis) is a household institution in Denmark. As the primary classifieds portal operating in the Danish market, millions of Danish buyers and sellers trade everything from everyday consumer electronics and classic Danish mid-century furniture (Arne Jacobsen, Hans Wegner, Børge Mogensen) to used automobiles, caravans, and industrial workshop equipment.

Because DBA.dk captures actual asking prices in Danish krone (DKK) prior to transaction close, it serves as the definitive public database for **Danish second-hand pricing, retail residual values, local supply velocity, and merchant commercial presence**.

Extracting this data by hand is rendered impossible by infinite scroll interfaces, complex JavaScript single-page-app rendering, and strict layout pagination caps. This **DBA data extractor** delivers a reliable, production-ready pipeline that retrieves structured data records in seconds.

#### High-impact applications:

- 🪑 **Danish design furniture sourcing** — Track classic vintage Danish furniture (teak sideboards, Wegner chairs, Poul Henningsen lamps) listed by private sellers across Jutland and Zealand.
- 🚗 **Used vehicle & automotive analytics** — Monitor asking prices, mileage attributes, and dealer markups on passenger cars, vans, and commercial vehicles throughout Denmark.
- 💰 **Second-hand retail arbitrage & flipping** — Identify newly published electronics (smartphones, gaming consoles, mirrorless cameras) listed below current market value.
- 🏢 **B2B merchant prospecting & lead generation** — Filter by `sellerType: "retailer"` to build contact lists of commercial second-hand shops, car dealers, and repair businesses in Denmark.
- 📊 **Competitive price indexing & inflation metrics** — Track consumer price dynamics in Danish kroner (DKK) over time across consumer electronics and durable goods.
- 🤖 **AI training & RAG knowledge bases** — Feed real-world Danish language product descriptions, titles, and localized transaction metadata into language models and predictive valuation algorithms.

***

### ✨ Key features

- 🔍 **Multi-keyword execution** — Pass arrays of search terms (`["iphone 15", "sofa", "ladcykel"]`). Each keyword is systematically queried and consolidated.
- 🔗 **Start URL compatibility** — Copy any filtered DBA search or category page directly from your browser into **Start URLs**; all complex query parameters are maintained.
- 📄 **Deep pagination (1,000+ items)** — Transparently paginates across 50 listings per page. Set `maxItems: 0` and `maxPagesPerSearch: 0` for complete catalog ingestion.
- 💰 **Clean monetary normalization** — Formats Danish listing prices as clean numeric values with standardized `DKK` currency tags.
- 👥 **High-intent seller filtering** — Segregate private individuals from commercial business accounts (`private` vs `retailer`).
- 📍 **Precise Danish geocoding** — Captures municipality location names alongside exact `lat` and `lng` centroid coordinates for spatial analysis.
- 🚚 **Commerce indicators** — Collects key purchase signals including shipping availability (`isShippable`), instant checkout (`canBuyNow`), and seller shipping coverage.
- 📝 **Optional full ad descriptions** — Toggle `fetchDetails` to retrieve the entire ad text directly from the listing page.
- ⚡ **Lightweight pure HTTP engine** — Operates without headless browser overhead, pulling hundreds of listings in seconds.

***

### 📥 Input parameters

The actor features intuitive configuration options suitable for quick manual queries or high-volume automated runs.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchTerms` | Array of strings | `["iphone"]` | List of Danish search queries. Each term is executed and aggregated independently. |
| `startUrls` | Array of strings | `[]` | Optional direct DBA.dk category or search URLs. When provided, takes precedence over search terms. |
| `sellerType` | String | `""` | Seller classification filter: `""` (All), `"private"` (Private sellers), or `"retailer"` (Dealers/Shops). |
| `priceMin` | Integer | *None* | Minimum listing price in Danish kroner (DKK). |
| `priceMax` | Integer | *None* | Maximum listing price in Danish kroner (DKK). |
| `maxItems` | Integer | `100` | Maximum total records to scrape across all queries. Set `0` for unlimited crawling. |
| `maxPagesPerSearch` | Integer | `0` | Maximum pages to crawl per keyword or URL (≈50 items/page). Set `0` for auto/unlimited. |
| `fetchDetails` | Boolean | `false` | When `true`, visits each listing URL to extract the complete ad description text. |
| `proxyConfiguration` | Object | `{ "useApifyProxy": true }` | Apify Proxy configuration. Standard datacenter proxies operate seamlessly out of the box. |

#### Example input configuration

```json
{
  "searchTerms": ["arne jacobsen", "wegner"],
  "sellerType": "private",
  "priceMin": 1000,
  "priceMax": 25000,
  "maxItems": 300,
  "maxPagesPerSearch": 0,
  "fetchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

***

### 📤 Output dataset

Every scraped DBA ad is parsed into a clean JSON structure ready for immediate CSV/Excel export or downstream database ingestion.

#### Real data sample

```json
{
  "id": "1114567890",
  "url": "https://www.dba.dk/recommerce/forsale/item/1114567890",
  "title": "iPhone 15 Pro, 256 GB, Titangrå - Som ny",
  "price": 6200,
  "currency": "DKK",
  "tradeType": "Sælges",
  "sellerType": "private",
  "location": "Aarhus C",
  "lat": 56.1572,
  "lng": 10.2107,
  "publishedDate": "2026-11-08T18:40:12.000Z",
  "brand": "Apple",
  "isShippable": true,
  "sellerPaysShipping": false,
  "canBuyNow": true,
  "labels": ["Kan sendes", "Køb nu", "Privat"],
  "imageUrl": "https://images.dba.dk/item/1114567890/cover.jpg",
  "images": [
    "https://images.dba.dk/item/1114567890/cover.jpg",
    "https://images.dba.dk/item/1114567890/detail_1.jpg"
  ],
  "attributes": {
    "model": "iPhone 15 Pro",
    "hukommelse": "256 GB",
    "farve": "Titangrå"
  },
  "description": "Super flot iPhone 15 Pro sælges pga. opgradering. Batterikapacitet 97%. Ingen ridser.",
  "searchTerm": "iphone",
  "scrapedAt": "2026-11-10T14:40:00.000Z"
}
```

***

### 📋 Field reference

#### 🏷️ Identity & Core Metadata

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `id` | String | 🟢 High (100%) | Unique DBA listing identifier. Natural key for deduplication. |
| `url` | String | 🟢 High (100%) | Canonical listing web address on DBA.dk. |
| `title` | String | 🟢 High (100%) | Complete advertisement title in Danish. |
| `tradeType` | String | 🟢 High (100%) | Listing intent: `Sæljes` (For sale) or `Købes` (Wanted). |
| `publishedDate` | String | 🟢 High (100%) | ISO 8601 publication timestamp when the ad went live. |
| `searchTerm` | String | 🟡 Conditional | Search keyword that produced this record. |
| `scrapedAt` | String | 🟢 High (100%) | ISO timestamp marking exact crawl execution time. |

#### 💰 Pricing & Financials

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `price` | Number | 🟢 High (98%) | Listing price parsed as a clean integer. `null` for price-on-demand listings. |
| `currency` | String | 🟢 High (100%) | ISO currency identifier, consistently `DKK` for Danish listings. |

#### 👤 Seller Profile & Commercial Lead Signals

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `sellerType` | String | 🟢 High (100%) | Classification of seller: `private` (consumer) or `retailer` (commercial business). |

#### 📍 Location & Geocoding

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `location` | String | 🟢 High (100%) | Danish city, municipality, or postal district name (e.g. `København K`, `Odense`). |
| `lat` | Number | 🟢 High (99%) | Centroid latitude coordinate of the listing area. |
| `lng` | Number | 🟢 High (99%) | Centroid longitude coordinate of the listing area. |

#### 📦 Commerce Flags & Media

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `isShippable` | Boolean | 🟢 High (100%) | Whether the item supports parcel shipment via DBA delivery (*Kan sendes*). |
| `canBuyNow` | Boolean | 🟢 High (100%) | Indicates immediate purchase availability through DBA's secure payment system. |
| `sellerPaysShipping`| Boolean | 🟢 High (100%) | Whether shipping cost is absorbed by the seller. |
| `labels` | Array | 🟢 High (100%) | Visual badges displayed on the listing card. |
| `imageUrl` | String | 🟢 High (96%) | High-resolution cover photograph URL. |
| `images` | Array | 🟢 High (96%) | Complete array of photograph URLs for the listing. |
| `brand` | String | 🟡 Conditional | Identified brand name (e.g., `Apple`, `Wegner`, `LEGO`). |
| `attributes` | Object | 🟡 Conditional | Structured key-value specifications (mileage, memory, color). |

#### 📝 Detail Enrichment (Optional)

| Field Name | Type | Coverage | Description |
|---|---|---|---|
| `description` | String | 🟡 Conditional | Complete ad description text (extracted when `fetchDetails` is enabled). |

***

### 📈 Scalability & Deep Pagination Guide

This scraper handles everything from targeted daily monitoring to deep market-wide extraction:

1. **Auto-pagination**: By setting `maxPagesPerSearch: 0`, the scraper automatically advances across all available search pages until exhaustion or reaching `maxItems`.
2. **Deep collection (1,000+ items)**: To extract large catalogs across Denmark, set `maxItems: 0` and provide high-volume search queries or broad category URLs.
3. **Smart deduplication**: The actor maintains an internal in-memory Bloom filter of listing IDs, guaranteeing zero duplicate entries in your final dataset even when keyword results overlap.
4. **Bandwidth optimization**: Standard list-mode operates via ultra-compact JSON endpoints, allowing you to scrape 1,000 listings in less than 30 seconds with negligible memory consumption.

***

### 🛠️ Step-by-step usage guide

1. **Open the actor**: Navigate to **DBA.dk Scraper** on Apify Console.
2. **Configure your search**:
   - For keyword searches, enter your target queries into **Search Terms** (e.g. `iphone`, `ladcykel`).
   - For specific Danish regions or pre-filtered price tiers, visit [DBA.dk](https://www.dba.dk), configure your filters, and paste the URL into **Start URLs**.
3. **Select seller segmentation**: Set **Seller Type** to `retailer` for Danish B2B commercial lead lists or `private` for consumer second-hand deals.
4. **Set execution limits**: Enter your target quantity into **Max Items** (e.g. `500` for testing, or `0` for full catalog extraction).
5. **Start crawl**: Click **Start**. Monitor live progress in the log stream showing collected items and pagination progression.
6. **Export results**: Download your dataset in JSON, CSV, Excel, or connect downstream via the Apify REST API.

***

### 💻 API integration & code examples

Integrate live Danish marketplace data directly into your applications using official Apify client libraries.

#### Node.js / JavaScript

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

const client = new ApifyClient({
    token: process.env.APIFY_TOKEN,
});

const run = await client.actor('haketa/dba-scraper').call({
    searchTerms: ['sofa', 'spisebord'],
    maxItems: 250,
    sellerType: 'private',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Successfully scraped ${items.length} items from DBA.dk.`);
console.table(items.slice(0, 5), ['title', 'price', 'sellerType', 'location']);
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.getenv('APIFY_TOKEN'))

run_input = {
    'searchTerms': ['ladcykel', 'elcykel'],
    'priceMin': 5000,
    'maxItems': 150,
}

run = client.actor('haketa/dba-scraper').call(run_input=run_input)

dataset_items = client.dataset(run['defaultDatasetId']).list_items().items
for item in dataset_items[:5]:
    print(f"[{item['price']} DKK] {item['title']} - {item['location']}")
```

***

### 🔗 Export formats & integrations

- **Direct File Downloads**: Export instantly in JSON, CSV, Microsoft Excel (XLSX), XML, and RSS formats.
- **Cloud Storage Pipelines**: Stream output directly to Amazon S3, Google Cloud Storage, or Microsoft Azure Blob.
- **No-Code Automation**: Trigger workflows in Zapier, Make (Integromat), or n8n upon run completion.
- **Database Warehousing**: Pipe classifieds feeds into Google BigQuery, Snowflake, PostgreSQL, or Supabase.
- **Slack & Webhooks**: Receive real-time alerts whenever newly listed items match your specific price arbitrage criteria.

***

### 🇩🇰 Danish Regional Market Coverage

DBA.dk covers all major geographic regions of Denmark. You can target national searches or isolate specific territories:

| Danish Region | Major Urban Centers | High-Volume Market Sectors |
|---|---|---|
| **Hovedstaden (Capital Region)** | Copenhagen, Frederiksberg, Helsingør | Tech gadgets, designer furniture, high-end fashion, road bikes |
| **Midtjylland (Central Denmark)** | Aarhus, Silkeborg, Randers, Horsens | Cargo bikes (*ladcykler*), family home furniture, electronics |
| **Syddanmark (Southern Denmark)** | Odense, Esbjerg, Kolding, Vejle | Cross-border commerce, used vehicles, agricultural machinery |
| **Nordjylland (North Denmark)** | Aalborg, Hjørring, Frederikshavn | Automotive, marine gear, outdoor sports equipment, tools |
| **Sjælland (Zealand)** | Roskilde, Næstved, Slagelse | Commuter vehicles, household tools, garden machinery |

***

### 🔄 Danish Terms Glossary

| Danish Term | English Translation | Data Impact / Field |
|---|---|---|
| *Sælges* | For Sale | Found in `tradeType` indicating normal seller listings. |
| *Købes* | Wanted / Looking to buy | Found in `tradeType` indicating buyer request ads. |
| *Kan sendes* | Can be shipped | Reflected in `isShippable: true` (eligible for parcel freight). |
| *Køb nu* | Buy Now | Reflected in `canBuyNow: true` (instant direct purchase). |
| *Privat* | Private seller | Reflected in `sellerType: "private"`. |
| *Forhandler* | Dealer / Retailer | Reflected in `sellerType: "retailer"`. |
| *Pris* | Price | Parsed into numeric `price` (DKK). |

***

### 💡 Practical scraping strategies & tips for Denmark

#### 1. Cargo bike (*ladcykel*) arbitrage in Copenhagen

Denmark is globally famous for its cycling infrastructure, and high-end cargo bikes (Christiania Cykler, Larry vs Harry Bullitt, Nihola, Babboe) hold strong resale value. By monitoring terms like `bullitt`, `ladcykel`, or `christiania cykel` with `sellerType: "private"` and `priceMax: 15000`, users identify refurbished resale opportunities across Greater Copenhagen.

#### 2. Danish mid-century modern design sourcing

International collectors and vintage galleries actively source vintage furniture in Denmark. Queries such as `teak skænk`, `rosewood`, `danish modern`, or specific designers (`Hans J. Wegner`, `Arne Jacobsen`, `Børge Mogensen`, `Verner Panton`) reveal private listings in smaller provincial towns where items are often priced far below European auction values.

#### 3. Commercial automotive dealer prospecting

Used car dealerships throughout Jutland frequently post inventory on DBA. Filter by `sellerType: "retailer"` and search major automotive brands (`volkswagen`, `audi`, `toyota`, `skoda`) to extract dealer inventories, asking prices in DKK, and dealership geographic locations.

***

### ❓ Frequently Asked Questions

##### Do I need a DBA.dk account or Danish phone number?

No. The scraper accesses only public listing records and requires no user account, phone verification, or cookies.

##### How does the scraper distinguish private sellers from dealers?

DBA tags commercial storefronts with a business flag. The actor normalizes this into `sellerType` (`retailer` vs `private`), making B2B lead generation straightforward.

##### Can I track classic Danish mid-century furniture?

Yes. DBA is the prime marketplace for Danish modern design. Search queries like `arne jacobsen`, `wegner`, `børge mogensen`, or `kay bojesen` yield rich second-hand inventory.

##### Are prices always in Danish kroner (DKK)?

Yes. All prices are parsed as numeric values in Danish kroner, and the `currency` field is standardized to `DKK`.

##### Why are GPS coordinates provided?

DBA listings include municipal locality tags. The scraper extracts centroid coordinates (`lat`, `lng`), allowing spatial supply visualization and mapping.

##### How fast can I scrape 1,000+ items?

Because the scraper connects via lightweight, pure HTTP requests without loading heavy browser scripts, extracting 1,000 items takes less than 35 seconds under standard Apify datacenter proxies.

##### Can I schedule recurring daily or hourly extractions?

Yes. You can use Apify Schedules to run this actor at regular intervals (e.g., every morning or every 30 minutes) and send automatic email alerts or webhook notifications when new listings are added.

***

### 📋 Changelog

#### Version 1.2 (2026-11)

- **Deep pagination unlocked**: Enhanced multi-page crawler to support 1,000+ listings per search without pagination caps.
- **Unlimited page handling**: Configured `maxPagesPerSearch: 0` as auto/unlimited governed by `maxItems`.
- **Fast prefill optimization**: Streamlined initial run startup latency down to under 20 seconds.
- **Normalized coordinates**: Enhanced latitude/longitude extraction to maintain 99%+ geocoding coverage across Danish regions.
- **Refined retailer detection**: Improved detection of Danish enterprise dealers and commercial shops.

#### Version 1.1 (2026-10)

- Added direct URL parsing support for complex category and filtered Start URLs.
- Implemented optional deep listing enrichment (`fetchDetails`) for extended description text.
- Added automated deduplication by listing ID across multi-term executions.

#### Version 1.0 (2026-09)

- Initial production release supporting keyword search, DKK price parsing, GPS coordinates, and seller classification.

# Changelog

This Actor's version history is a separate document: https://apify.com/haketa/dba-scraper/changelog.md

# Actor input Schema

## `searchTerms` (type: `array`):

What to search for, e.g. 'iphone', 'volvo v70', 'sofa'. Each term is searched separately. Leave empty if you use Start URLs.

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

Optional. Paste full DBA search URLs to scrape them directly (a specific search, category, brand, price range, etc.). When provided, Search Terms below are ignored for these URLs.

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

Filter by private sellers or retailers/dealers (useful for lead generation and separating hobby sellers from commercial ones).

## `priceMin` (type: `integer`):

Only listings at or above this price.

## `priceMax` (type: `integer`):

Only listings at or below this price.

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

Maximum number of listings to collect across all searches. Set to 0 for unlimited pagination.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to scrape per search term / URL. Each page has about 50 listings. Set to 0 for unlimited (governed by Max Items).

## `fetchDetails` (type: `boolean`):

Visit each listing to also collect its full ad description. This is slower and uses more resources — leave off for fast, low-cost list scraping.

## `proxyConfiguration` (type: `object`):

Proxy settings. The default (Apify Proxy, datacenter) works out of the box. If IPs ever get throttled, switch to Residential and country Denmark.

## Actor input object example

```json
{
  "searchTerms": [
    "iphone"
  ],
  "startUrls": [],
  "sellerType": "",
  "maxItems": 100,
  "maxPagesPerSearch": 0,
  "fetchDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Open to view and export all scraped listings (JSON, CSV, Excel).

# 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 = {
    "searchTerms": [
        "iphone"
    ],
    "startUrls": [],
    "maxItems": 100,
    "maxPagesPerSearch": 0,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/dba-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 = {
    "searchTerms": ["iphone"],
    "startUrls": [],
    "maxItems": 100,
    "maxPagesPerSearch": 0,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/dba-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 '{
  "searchTerms": [
    "iphone"
  ],
  "startUrls": [],
  "maxItems": 100,
  "maxPagesPerSearch": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/dba-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,haketa/dba-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/aLYQZh4gW4ma0C6Kc/builds/lKAhyEnpuswGH2ATG/openapi.json
