Skip to content
Scrappa Get API key
DBA API 1 credit/request

DBA Search API Documentation

GET https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC

Search public ads on DBA (dba.dk), the Danish classifieds marketplace. Filter by keyword, category, price range, region, condition, seller type, ad type and shipping, sort by relevance, newest, oldest or price, and page through up to 50 pages of 53 ads. Each ad has id, title, city with coordinates, price in DKK, ad type, url, images, publish date (ISO 8601, UTC), labels and a dealer flag. Facets list the category, condition, seller type, ad type, shipping and region values with hit counts. A valid search with no results is a successful response.

DBA Search API Documentation 1 credit/request

Endpoint

Request preview
GET
https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC
Auth header
x-api-key
Cost
1 credit/request
Response preview
200 OK
{
    "success": true,
    "data": {
        "query": "cykel",
        "results": [
            {
                "position": 1,
                "id": "11565460",
                "title": "Renovering af Bakfiets ladcykel batteri (36V) 14Ah",
                "location": {
                    "city": "K\u00f8ge",
                    "coordinates": {
                        "lat": 55.4704,
                        "lng": 12.18454
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

This endpoint has no required query parameters.

12 optional filters available.

query string Optional

Search text, e.g. cykel. Optional when a category is set. Maximum 200 characters.

Example value cykel
category string Optional

DBA category id: 0.x top level, 1.x.y sub category, 2.x.y.z product category. Read the ids from the facets.category field of a search response. Example: 0.93.

Example value example
price_from integer Optional

Minimum price in DKK (whole kroner).

Example value 10
price_to integer Optional

Maximum price in DKK. Must be greater than or equal to price_from.

Example value 10
sort string Optional

Sort order: RELEVANCE (default), PUBLISHED_DESC, PUBLISHED_ASC, PRICE_ASC or PRICE_DESC.

Example value PUBLISHED_DESC
page integer Optional

1-based page number, 1 to 50. Each page holds up to 53 ads. Defaults to 1.

Example value 1
location string Optional

DBA region id from facets.location, e.g. 0.200009 (Fyn).

Example value Austin, Texas
condition array Optional

Condition filter 1 to 5 (1 brand new, 2 like new). Repeat the parameter for several values: condition[]=1&condition[]=2.

Example value ["example"]
dealer_segment string Optional

1 for private sellers, 3 for dealers.

Example value example
trade_type string Optional

1 for sale, 2 for give away, 3 for wanted.

Example value example
shipping_types string Optional

0 for ads that offer DBA shipping, 1 for ads with free shipping.

Example value example
published string Optional

Set to 1 to return only ads published today.

Example value example

Request Examples

PHP
<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
PHP
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
JavaScript
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
JavaScript
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
Ruby
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
Python
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/dba/search?query=cykel&sort=PUBLISHED_DESC", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
Python
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
Java
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
Go
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
Terminal
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC"
C#
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
TypeScript
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
RUST
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

Example response fields are illustrative; inspect the JSON before integrating.

Example response fields

Scan these fields before integrating.

success data meta
JSON Response
200 OK
{
    "success": true,
    "data": {
        "query": "cykel",
        "results": [
            {
                "position": 1,
                "id": "11565460",
                "title": "Renovering af Bakfiets ladcykel batteri (36V) 14Ah",
                "location": {
                    "city": "K\u00f8ge",
                    "coordinates": {
                        "lat": 55.4704,
                        "lng": 12.18454
                    }
                },
                "price": {
                    "amount": 2999,
                    "currency": "DKK"
                },
                "trade_type": "Til salg",
                "url": "https://www.dba.dk/recommerce/forsale/item/11565460",
                "images": [
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/6a/6a6f9d2b-4016-4b74-be0d-2ca4396b3d2e"
                    }
                ],
                "published_at": "2026-10-15T19:25:05Z",
                "labels": [
                    "Forhandler"
                ],
                "dealer": "BatteriService",
                "is_dealer": true
            },
            {
                "position": 2,
                "id": "25859380",
                "title": "Bysykkel med kurv og gir",
                "location": {
                    "city": "K\u00f8benhavn V",
                    "coordinates": {
                        "lat": 55.66901,
                        "lng": 12.56801
                    }
                },
                "price": {
                    "amount": 700,
                    "currency": "DKK"
                },
                "trade_type": "Til salg",
                "url": "https://www.dba.dk/recommerce/forsale/item/25859380",
                "images": [
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/b0c8f0d1-417b-4a62-be70-134e0c33c31c"
                    },
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/b8aff898-ba23-471b-859b-d530c35e90c0"
                    },
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/8cba8606-d59a-47f7-a9aa-6e8bbb97e10c"
                    },
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/295258cf-8a65-472c-9306-295fb2865b0d"
                    },
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/91af07aa-6908-4f88-92df-a71c8d7b783d"
                    },
                    {
                        "url": "https://images.dbastatic.dk/dynamic/default/item/25859380/a54c84c6-425f-40ba-b8e6-556838036648"
                    }
                ],
                "published_at": "2026-10-15T19:24:45Z",
                "labels": [
                    "Privat"
                ],
                "is_dealer": false
            }
        ],
        "pagination": {
            "page": 1,
            "last_page": 50,
            "per_page": 53,
            "total": 40571
        },
        "has_more": true,
        "facets": {
            "category": [
                {
                    "value": "0.90",
                    "label": "Bil-, b\u00e5d- og motorcykeludstyr",
                    "count": 844,
                    "children": [
                        {
                            "value": "1.90.3975",
                            "label": "ATV-tilbeh\u00f8r og reservedele",
                            "count": 13
                        },
                        {
                            "value": "1.90.82",
                            "label": "Biltilbeh\u00f8r og reservedele",
                            "count": 403
                        }
                    ]
                }
            ],
            "condition": [
                {
                    "value": "1",
                    "label": "Helt ny - u\u00e5bnet/med prism\u00e6rke",
                    "count": 6849
                },
                {
                    "value": "2",
                    "label": "Som ny - ingen synlige brugsspor",
                    "count": 6354
                }
            ],
            "dealer_segment": [
                {
                    "value": "3",
                    "label": "Forhandler",
                    "count": 9929
                },
                {
                    "value": "1",
                    "label": "Privat",
                    "count": 30642
                }
            ],
            "trade_type": [
                {
                    "value": "1",
                    "label": "Til salg",
                    "count": 40511
                },
                {
                    "value": "2",
                    "label": "Gives v\u00e6k",
                    "count": 59
                }
            ]
        }
    },
    "meta": {
        "endpoint_family": "search",
        "billable": true
    }
}

Errors

Handle these documented responses before retrying or showing customer-facing failures.

422

Validation Error

A query parameter is missing or invalid. This response is not billable.

{
    "errors": {
        "page": [
            "DBA serves at most 50 result pages per search."
        ]
    },
    "message": "The request validation failed"
}
422

Rejected Filter Value

DBA rejected a filter value, for example an unknown category id. This response is not billable.

{
    "meta": {
        "billable": false,
        "retryable": false,
        "endpoint_family": "search"
    },
    "error": {
        "code": "INVALID_PARAMETER",
        "message": "DBA rejected the search parameters. Check the category and filter values."
    },
    "success": false
}
503

Invalid Source Response

DBA answered with a shape that no longer matches the documented contract. This response is not billable.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "PARSER_DRIFT",
        "message": "The DBA API is temporarily unavailable. Please retry."
    },
    "success": false
}
503

Service Unavailable

The upstream service is temporarily unavailable. Please retry shortly.

{
    "meta": {
        "billable": false,
        "retryable": true,
        "endpoint_family": "search"
    },
    "error": {
        "code": "UPSTREAM_UNAVAILABLE",
        "message": "The DBA API is temporarily unavailable. Please retry."
    },
    "success": false
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Try It Live

Test this endpoint in our interactive playground with real data.