Blocket API

Blocket, FINN, Tori and DBA listings from one API

The Blocket API returns the Nordic second-hand marketplaces as clean JSON from one engine: Blocket in Sweden (SEK), FINN torget in Norway (NOK), Tori in Finland (EUR) and DBA in Denmark (DKK), switched with one country parameter.

no credit card1,000 free credits · instant API key · pay by card or crypto
Missing a Blocket endpoint, or need a source we don't have yet?Contact us real people · same-day reply.
B
/blocket/v1

3 active endpoints. Every call is 1 credit.

  • POST/blocket/v1/search
  • POST/blocket/v1/listing
  • POST/blocket/v1/categories

What Blocket endpoints does ReefAPI ship?

3 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

3 endpoints

search

1 cr

Search second-hand listings on Blocket (se), FINN (no), Tori (fi) or DBA (dk) by keyword, cat…

required
optional
query, country, category, location, page, sort, price_min, price_max, condition, seller_type, listing_type, shipping, published_today, max_rotations

listing

1 cr

The full listing by id or URL.

required
listing_id
optional
country, max_rotations

categories

1 cr

The marketplace category tree of one site with live listing counts.

required
optional
country, query, max_rotations

Every parameter, every allowed value →

Blocket API

3 of 3 endpoints, ready to run

View docs ↗

The listing feed: id, title, price in local currency, give-away flag, municipality, publication time, private or business seller, shipping and buy-now, photos and attributes, with the true total.

1 credit0 required · 4 optional
POST/blocket/v1/search
ok1610 ms · 53 records · sample
{
  "ok": true,
  "meta": {
    "api": "blocket",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1609.8,
    "record_count": 53,
    "cache_hit": false
  },
  "data": {
    "results": [
      {
        "listing_id": "26636833",
        "title": "Retro cykel",
        "url": "https://www.blocket.se/recommerce/forsale/item/26636833",
        "price": 1500,
        "currency": "SEK",
        "is_free": false,
        "listing_type": "sell",
        "listing_type_label": "Säljes",
        "location": "Söråker",
        "coordinates": {
          "lat": 62.50412,
          "lon": 17.48707
        },
        "listed_at": "2026-09-16T12:30:19Z",
        "seller_type": "private",
        "brand": null,
        "shipping_available": false,
        "buy_now": false,
        "free_shipping": false,
        "image": "https://images.blocketcdn.se/dynamic/default/item/26636833/5a10b2c9-368f-41f3-a7ab-0eb9417d9bd8",
        "images": [
          "https://images.blocketcdn.se/dynamic/default/item/26636833/5a10b2c9-368f-41f3-a7ab-0eb9417d9bd8",
          "https://images.blocketcdn.se/dynamic/default/item/26636833/fe88b171-4bb7-40ef-9c09-01ec70e33fdd",
          "https://images.blocketcdn.se/dynamic/default/item/26636833/cd6453f4-034a-4f19-bc4f-f36123a01774"
        ],
        "image_count": 4,
        "attributes": null,
        "labels": [
          "Privat"
        ]
      },
      {
        "listing_id": "26633506",
        "title": "Cykel Kronan 3 växlad unisexcykel",
        "url": "https://www.blocket.se/recommerce/forsale/item/26633506",
        "price": 3000,
        "currency": "SEK",
        "is_free": false,
        "listing_type": "sell",
        "listing_type_label": "Säljes",
        "location": "Halmstad",
        "coordinates": {
          "lat": 56.67437,
          "lon": 12.85567
        },
        "listed_at": "2026-09-16T10:38:48Z",
        "seller_type": "private",
        "brand": "Monark",
        "shipping_available": false,
        "buy_now": false,
        "free_shipping": false,
        "image": "https://images.blocketcdn.se/dynamic/default/item/26633506/70fb52af-6b13-4e1e-9e01-cfd306cb6d9e",
        "images": [
          "https://images.blocketcdn.se/dynamic/default/item/26633506/70fb52af-6b13-4e1e-9e01-cfd306cb6d9e"
        ],
        "image_count": 1,
        "attributes": null,
        "labels": [
          "Privat"
        ]
      },
      {
        "listing_id": "26632897",
        "title": "Monark trehjuling cykel 20\" blå unisex",
        "url": "https://www.blocket.se/recommerce/forsale/item/26632897",
        "price": 3150,
        "currency": "SEK",
        "is_free": false,
        "listing_type": "sell",
        "listing_type_label": "Säljes",
        "location": "Svalöv",
        "coordinates": {
          "lat": 55.92477,
          "lon": 13.16728
        },
        "listed_at": "2026-09-16T10:13:35Z",
        "seller_type": "private",
        "brand": "Monark",
        "shipping_available": false,
        "buy_now": false,
        "free_shipping": false,
        "image": "https://images.blocketcdn.se/dynamic/default/item/26632897/6d2444b0-2ada-4891-948d-070bdc915b09",
        "images": [
          "https://images.blocketcdn.se/dynamic/default/item/26632897/6d2444b0-2ada-4891-948d-070bdc915b09",
          "https://images.blocketcdn.se/dynamic/default/item/26632897/6bb993da-b397-4ff5-9404-cc77b3c49d14",
          "https://images.blocketcdn.se/dynamic/default/item/26632897/62f6171b-8404-4eb9-9514-8f55603d3909"
        ],
        "image_count": 3,
        "attributes": null,
        "labels": [
          "Privat"
        ]
      }
    ],
    "count": 53,
    "total_results": 17732,
    "page": 1,
    "last_page": 50,
    "has_more": true,
    "sort_applied": "relevance",
    "filters_applied": null,
    "category_facets": [
      {
        "category": "0.91",
        "name": "Affärsverksamhet",
        "count": 27
      },
      {
        "category": "0.67",
        "name": "Bygg och trädgård",
        "count": 96
      },
      {
        "category": "0.77",
        "name": "Djur och tillbehör",
        "count": 41
      }
    ],
    "region_facets": [
      {
        "location": "0.300010",
        "name": "Blekinge",
        "count": 280
      },
      {
        "location": "0.300020",
        "name": "Dalarna",
        "count": 461
      },
      {
        "location": "0.300009",
        "name": "Gotland",
        "count": 83
      }
    ],
    "country": "se",
    "site": "Blocket",
    "currency": "SEK",
    "query": "cykel"
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Blocket API works

Blocket is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 252 engines.

02
Call
POST /blocket/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

Price a second-hand category without free ads skewing it

Give-away ads are stored with a price of zero and sold ads keep their old price. Filter them out at the source, then open the ads you care about.

01categories
POST/blocket/v1/categories
{"country": "se", "query": "cykel"}

Find the category code - Bicycles is 2.69.3963.257 on all four sites.

02search
POST/blocket/v1/search
{"country": "se", "category": "2.69.3963.257", "listing_type": "sell", "sort": "newest"}

Only for-sale ads, newest first. Skip rows where price is null. Take listing_id from the rows you want.

03listing
POST/blocket/v1/listing
{"listing_id": <listing_id from above>, "country": "se"}

Condition, description, attributes and status. A status of sold means the price is no longer on offer.

A price series built only from real asking prices, with condition attached - one credit per call.

request
curl -X POST https://api.reefapi.com/blocket/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"cykel","country":"se"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "blocket",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

A price of 0 is not a price - how a Nordic listing really reads

On all four sites a give-away ad is stored with a price of zero, and a for-sale ad can have no price at all. Averaging those rows drags every price series down, and a sold ad still shows its old price. This engine returns price as null when there is no real asking price, flags give-aways with is_free, and marks sold ads with status.

Listing (measured 2026-09-15)What the site storespriceis_free / status
Blocket, 'Cykel bortskänkes' (given away)price 0 in search, no price on the adnullis_free true
DBA, bicycle ad 'Til salg' with no priceprice 0 in searchnullis_free false
Blocket, 'Tärnö bord och stolar' (sold)price 200 kr still shown200status sold
Blocket, 'Custom Beach Cruiser cykel'price 1 400 kr1400is_free false, status active

On one Blocket page for 'cykel' sorted by lowest price, all 28 zero-price rows were give-aways, and they come first. A search filtered to give-aways returned 48 ads, every one with price null and is_free true.

Four sites, one shape, and what the price field does not mean

Blocket, FINN torget, Tori and DBA run on one platform, so one integration covers all four. Measured on 2026-09-15 with 56 live calls across the four countries, 37 end-to-end cases and a 17-listing check against the ads themselves. Two of these lines go against us.

Four countries, four currencies

se Blocket (SEK), no FINN torget (NOK), fi Tori (EUR), dk DBA (DKK). Every row and listing carries its currency. Listing ids belong to one site; category codes and the five-step condition scale are shared by all four.

Give-aways and priceless ads are null, not zero

A give-away is stored with a price of zero on the site; it comes back as price null with is_free true. A for-sale ad without a price comes back as price null with is_free false. On a lowest-price-first Blocket page all 28 zero-price rows were give-aways.

Sold ads are marked

A sold ad can stay online with its last price. listing returns status sold instead of active, so an old price is never mistaken for a current one.

Checked against the ads themselves

On 17 listings across bicycles, sofas, phones and children's clothes in all four countries, price matched the ad's own structured data on 16 of 16 and the search row on 17 of 17; title matched the page heading on 17 of 17; seller type matched the search row on 17 of 17.

Private sellers stay private

For private sellers the sites show no name to visitors, and none is returned; exact coordinates are left out too, while postal code and city stay. Business sellers come back with shop name, organisation id, registry link and address.

Against us: 50 pages per query

Search returns 53 listings per page and stops at page 50, even when the total is larger. Split a large query by category, region, price or published_today to reach the rest.

Against us: some fields are optional for sellers

Condition was set on 14 of 17 verified listings and some business shops leave it out. Tori business sellers sometimes list items at 1 euro as an 'ask for price' placeholder; that number is returned as the site shows it.

What people build with Blocket

The jobs this data is most often used for.

3

endpoints

1

credit per call

01

Resale and price-intelligence teams track second-hand prices per category in Sweden, Norway, Finland and Denmark with search sorted by newest.

02

Recommerce and refurbishment businesses watch give-away and low-price ads in their region with listing_type, location and price filters.

03

Market analysts size supply per category and region from total_results, category_facets and region_facets without paging through ads.

04

Dealers monitor business competitors' stock and prices through listing's seller block and the shop's other listings.

What Blocket data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 252 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/blocket/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"cykel","country":"se"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/blocket/v1/search",
    headers={"x-api-key": REEF_KEY},
    json={
  "query": "cykel",
  "country": "se"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Blocket.

Get a free key →
Which sites and countries does the Blocket API cover?

Four marketplaces that share one platform: country=se is Blocket (Sweden, SEK), no is FINN torget (Norway, NOK), fi is Tori (Finland, EUR) and dk is DBA (Denmark, DKK). site=blocket, finn, tori or dba works too, and a pasted listing URL picks the country by itself. The response fields are identical on all four; titles, labels and category names come back in the site's language.

Why is price null on some listings?

Because the site has no asking price for them. Give-away ads are stored with a price of zero; they come back as price null with is_free true and listing_type give_away. A few for-sale ads also have no price, and they come back as price null with is_free false. A zero is never returned as a price, so an average over price never includes free items.

Does the API show sold listings?

A sold ad can stay online with its old price. listing returns status sold (with the site's own label, such as Såld) instead of active, so a stale price is never read as a live offer. search returns ads that are currently listed.

Can I get the seller's name and phone number?

For business sellers, listing returns the shop name, organisation id, a link to the national company registry, address, website and the shop's other listings. For private sellers the sites do not show a name to visitors, so seller.name is null and only the seller type is returned. Phone numbers and e-mail addresses written into descriptions are redacted by default.

How do category codes work?

Codes look like 0.69 (Sport and outdoor), 1.69.3963 (Cycling) and 2.69.3963.257 (Bicycles), and the same code means the same category on all four sites. The categories action returns the whole three-level tree with live counts, every search returns category_facets, and listing returns category_search_code for the ad's own category.

How deep can I page?

53 listings per page and up to 50 pages per query - the sites stop there even when total_results is larger (17,660 bicycles for 'cykel' on Blocket on 2026-09-15). Narrow the query with category, location, price or published_today to reach the rest.

What do the sites NOT publish?

The original creation date on the ad page (listing returns edited_at; search returns listed_at, the time the ad was published or renewed), a private seller's name, a view count, and a shipping price before checkout. Condition is optional for sellers: 14 of 17 verified listings had one, and some business shops leave it out.

What is the Blocket API?

Blocket API is a ReefAPI endpoint group for nordic second-hand listings from blocket, finn, tori and dba. It returns live JSON through POST requests under /blocket/v1.

Is the Blocket API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Blocket calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Blocket login or account?

No login to Blocket is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Blocket data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Blocket API use?

Blocket actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Blocket from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call blocket actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Blocket API a Blocket scraper?

It is the managed alternative to a DIY Blocket scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same nordic second-hand listings from blocket, finn, tori and dba back as clean JSON.

16 Classifieds & Second-hand APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Blocket, you are one call away from the rest of the category — no second contract, no second integration.

Need something this API does not do?

Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.

0/4000

No account needed · we reply from [email protected]

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.