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.
Run this endpoint
Endpoint
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.
string
Optional
Search text, e.g. cykel. Optional when a category is set. Maximum 200 characters.
cykel
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
integer
Optional
Minimum price in DKK (whole kroner).
10
integer
Optional
Maximum price in DKK. Must be greater than or equal to price_from.
10
string
Optional
Sort order: RELEVANCE (default), PUBLISHED_DESC, PUBLISHED_ASC, PRICE_ASC or PRICE_DESC.
PUBLISHED_DESC
integer
Optional
1-based page number, 1 to 50. Each page holds up to 53 ads. Defaults to 1.
1
string
Optional
DBA region id from facets.location, e.g. 0.200009 (Fyn).
Austin, Texas
array
Optional
Condition filter 1 to 5 (1 brand new, 2 like new). Repeat the parameter for several values: condition[]=1&condition[]=2.
["example"]
string
Optional
1 for private sellers, 3 for dealers.
example
string
Optional
1 for sale, 2 for give away, 3 for wanted.
example
string
Optional
0 for ads that offer DBA shipping, 1 for ads with free shipping.
example
string
Optional
Set to 1 to return only ads published today.
example
Request Examples
<?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
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();
}
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));
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);
}
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
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()
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}")
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());
}
}
}
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))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/dba/search?query=cykel&sort=PUBLISHED_DESC"
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}");
}
}
}
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();
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
{
"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.
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"
}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
}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
}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.