Blocket.se Car Scraper: All Swedish listings avatar

Blocket.se Car Scraper: All Swedish listings

Pricing

from $0.80 / 1,000 results

Go to Apify Store
Blocket.se Car Scraper: All Swedish listings

Blocket.se Car Scraper: All Swedish listings

Scrape every car on Blocket.se — price with and without VAT, mileage in km, VIN, registration plate, battery kWh, equipment, all photos, plus seller phone, email, website and address. Splits past Blocket's 2,450-per-search limit to reach all ~144,000 listings. JSON or CSV.

Pricing

from $0.80 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

Blocket.se Scraper

Blocket.se Scraper

Every car on Blocket.se — not the first 2,450. Paste any Blocket search URL and get one clean row per car: price with and without VAT, mileage in kilometres, VIN, registration plate, battery capacity, full equipment list, every photo at full resolution, and the seller's phone, email, website and postal address. Roughly 144,000 cars are listed at any moment, and this actor is built to reach all of them.

Input you pasteWhat comes back
blocket.se/mobility/search/car?... — any search, any filterOne row per matching car, across the whole result set
blocket.se/mobility/item/26253704 — a single adOne row for that car
blocket.se/mobility/dealer/9311124 — a dealer pageOne row per car in that dealer's inventory
Nothing at allEvery car on Blocket

Pure HTTP. No browser, no headless Chrome, no third-party bypass service. Blocket ships its data inside its own server-rendered pages, and this actor reads it there.


Why this is not a normal listing scraper

Blocket answers any single search with at most 50 pages of 49 ads. That is a hard ceiling of 2,450 rows per query, and it arrives with no error, no warning, and no marker in the response. Point a conventional crawler at "all cars" and it returns 2,450 of 144,000 and reports success.

This actor measures the size of your query first, then splits it into price ranges — halving, and halving again — until every piece fits under the ceiling. On the full Swedish car market that currently means 127 partitions planned from 255 counting queries, none of them touching the wall.

The split points are measured at run time, never hardcoded. A fixed ladder of price bands is only correct for the market it was measured against; the day the inventory shifts, one band crosses the ceiling and starts losing its tail with nothing in the log to say so.


How it works

How the Blocket scraper reaches every car

The run measures your query, plans the partitions, then walks each one. Ads seen while measuring are kept rather than re-fetched, and everything is deduplicated by ad ID, so a car that appears in two partitions is still one row.

At the end the actor compares what Blocket reported against what it actually collected and writes the difference into the log. Blocket's own count moves while a crawl runs — ads go up and come down by the minute — so a small delta is normal and the actor says so instead of pretending to a number it cannot guarantee.


Input

FieldTypeRequiredNotes
startUrlsarraynoSearch, ad or dealer URLs. Empty means every car on Blocket.
dealerOrgIdsarraynoDealer org IDs; each expands to that dealer's whole inventory.
detailLevelenumnobasic, full (default) or fullDealer. See below.
includePhonebooleannoResolve the number behind each ad's phone button. Default false.
maxItemsintegernoStop after this many cars. Default 1000.
fullCoveragePassbooleannoSecond sweep to catch cars listed without a price. Default false.
safePartitionCapintegernoSplit anything above this. Default 2000.
partitionConcurrencyintegernoCounting queries in flight while planning. Default 5.
maxConcurrencyintegernoParallel requests while scraping. Default 10.
proxyobjectnoOptional. Blocket serves this actor without one.

Detail levels

LevelExtra requests per carWhat it adds
basicnone~35 fields straight from the search results: price, mileage, VIN, plate, coordinates, images, dealer name
full1Description, equipment list, battery capacity, colour, registration date, inspection dates, previous owners, seller's street address
fullDealer1 + one per dealerDealer website, email, switchboard number and postal address, fetched once per dealer and cached

basic is dramatically cheaper and already carries most of what a pricing or inventory analysis needs. Reach for full when you want the description, the equipment or the EV fields.

Example input

{
"startUrls": [
"https://www.blocket.se/mobility/search/car?fuel=4&dealer_segment=2&sales_form=1"
],
"detailLevel": "fullDealer",
"includePhone": true,
"maxItems": 5000
}

That reads every used electric car sold by a business. Any filter Blocket's own interface offers works in the URL — price_from, price_to, year_from, mileage_to, body_type, transmission, wheel_drive, exterior_colour, location and the rest are passed through untouched.


Output schema

One row per car, 79 columns in a fixed order. Fields a run did not ask for come back as null rather than disappearing, so a CSV keeps the same shape from run to run.

{
"adId": "26253704",
"adUrl": "https://www.blocket.se/mobility/item/26253704",
"title": "Tesla Model X",
"make": "Tesla",
"model": "Model X",
"modelSpecification": "100D Long Range 6-sits *MOMS* 423hk",
"year": 2017,
"firstRegistration": "2017-06-13",
"bodyType": "SUV",
"exteriorColor": "Grå",
"price": 308900, // SEK, including VAT
"priceExVat": 247120, // where the seller marked it VAT-deductible
"currency": "SEK",
"mileage": 14729, // Scandinavian miles, as Blocket reports it
"mileageUnit": "SCANDINAVIAN_MILE",
"mileageKm": 147290, // converted — one mil is ten kilometres
"previousOwners": 10,
"fuel": "El",
"transmission": "Automatisk",
"wheelDrive": "Fyrhjulsdrift",
"enginePowerHp": 423,
"batteryCapacityKwh": 100, // a real structured field, not parsed out of the title
"drivingRangeKm": 435,
"rangePerKwh": 4.4,
"chargingCosts": { "home_charging": { "cost_pr_km": 0.41 }, "monthly_savings": { "monthly_amount": 780 } },
"registrationNumber": "YGT452",
"chassisNumber": "5yjxcce29hf045288",
"inspectionLast": "2026-03-19",
"inspectionNext": "2027-03-31",
"description": "Tesla Model X 100D AWD, 423 hk, 6-sits (2017)…",
"equipment": ["ABS-bromsar", "Backkamera", "Digitalt mätarhus", "…47 entries"],
"imageUrls": ["https://images.blocketcdn.se/dynamic/1280w/item/26253704/…"],
"imageCount": 19,
"sellerStreet": "Finspångsgatan 37",
"sellerZip": "16353",
"sellerCity": "Spånga",
"latitude": 59.39018,
"longitude": 17.87464,
"orgId": "9311124",
"organisationName": "Cederfeldts Bil",
"dealerSegment": "Företag",
"adPhoneNumber": "073-518 06 90", // behind the ad's phone button
"adContactPhone": "+46735180690", // the ad's own contact block
"dealerPhone": "073-518 06 90", // the dealer's profile page
"adContactEmail": "sulle@cederfeldtsbil.se",
"dealerEmail": "info@cederfeldtsbil.se",
"dealerWebsite": "http://www.cederfeldtsbil.se/",
"publishedAt": "2026-09-01T12:18:41.000Z",
"updatedAt": "2026-09-02T13:33:46.860Z",
"scrapedAt": "2026-09-02T15:06:30.241Z"
}

Three phone numbers, three columns

Blocket exposes a seller's number in three places and they genuinely disagree. On one Porsche Center Göteborg listing the phone button returned 031-361 83 72, the ad's contact block held +46313855500, and the dealer's own profile page said 031-385 55 00. Each gets its own column, labelled by where it came from, so you can decide which one your use case wants rather than having the actor decide for you. The same applies to email.


Pricing

Billed for work actually performed, so a cheap run stays cheap.

EventCharged whenRate
ResultEach car row$0.80 / 1,000
Ad detailAn ad page is opened (full and above)$0.50 / 1,000
Dealer profilePer unique dealer, not per row$0.002 each
Phone numberA number is actually returned$0.60 / 1,000

Which works out to roughly $0.80 per 1,000 at basic, $1.30 at full, and about $1.86 with phone numbers switched on.

Nothing is charged for the counting queries that plan the partitions, for search pages, for retries, or for a phone lookup that comes back empty — around 7% of ads expose no number and those are free. A dealer with 200 cars in the run is charged once, not 200 times.


What makes this richer than a generic listing scraper

CapabilityTypical scraperThis actor
Result-set sizeFirst 2,450 rows, silentlySplits the query until the whole set is reachable
Split pointsHardcoded price bandsMeasured at run time, so they survive a shifting market
Coverage reporting"Finished"Reported vs collected, delta written to the log
MileageRaw Blocket numberRaw value, unit, and kilometres — no factor-of-ten trap
Battery capacityParsed out of the title textBlocket's own structured battery_capacity field
Seller contactOne phoneThree phone sources and two email sources, each labelled
ImagesFirst photo, default sizeEvery photo at 1280px, the largest the CDN serves
BrowserOften headless ChromePure HTTP

Notes & limitations

Battery capacity is optional on Blocket. It is a real structured field, not something parsed out of the listing title, but sellers fill it in for only part of the inventory — roughly 40–45% in sampling. Expect nulls, and do not treat a null as "no battery data exists".

About 7% of ads expose no phone number. The number is served against a token that ships with the ad page, and some ads carry no token. Those rows get adPhoneNumber: null. That is Blocket withholding the number, not a failed request.

Cars listed without a price need the extra pass. The partitioner splits on price, so a car with no price is invisible to it — currently about 25 cars out of 144,000, or 0.02%. The actor detects this and says so in the log. Set fullCoveragePass: true to sweep a second axis and pick them up; it roughly doubles search-page traffic, and per-ad requests are deduplicated so those are not repeated.

A whole-market run costs real money and needs the cost limit raised. All ~144,000 cars comes to roughly $115 at basic, $187 at full, and around $268 with phone numbers on. Apify stops a run the moment it reaches the maximum-cost setting on that run, and it stops mid-crawl with no warning — a validation run of this actor was cut at 50,350 rows exactly that way. Raise the limit before starting a whole-market crawl, or keep the scope down with maxItems or a filtered search URL. A single price band or one dealer's inventory costs cents.

Mileage is in Scandinavian miles. Blocket's mileage is mil, where one mil is ten kilometres. Both the raw value and mileageKm are in the output. Using the raw number as kilometres puts you off by a factor of ten.

Swedish values are not translated. fuel, transmission, exteriorColor, bodyType and the equipment list come back as Blocket writes them — El, Automatisk, Grå. Translating them would mean guessing at a mapping and losing the original.

Blocket's own total moves during a run. It shifted three times within an hour during testing. The actor logs reported-versus-collected rather than asserting they match, because asserting it turns ordinary listing churn into failed runs.


🤖 For AI Agents & LLM Apps

Purpose: structured car listings from Blocket.se, Sweden's largest classifieds site. One row per car.

Minimal tested input:

{ "startUrls": ["https://www.blocket.se/mobility/search/car?fuel=4"], "detailLevel": "basic", "maxItems": 100 }

Key output fields: adId, adUrl, title, make, model, modelSpecification, year, firstRegistration, bodyType, exteriorColor, price, priceExVat, currency, mileage, mileageKm, previousOwners, fuel, transmission, wheelDrive, enginePowerHp, batteryCapacityKwh, drivingRangeKm, rangePerKwh, registrationNumber, chassisNumber, inspectionLast, inspectionNext, doors, seats, bootSizeLitres, weightKg, description, equipment, imageUrls, location, sellerStreet, sellerZip, sellerCity, latitude, longitude, orgId, organisationName, dealerSegment, adPhoneNumber, adContactPhone, dealerPhone, adContactEmail, dealerEmail, dealerWebsite, publishedAt, updatedAt, scrapedAt.

Behaviours worth knowing:

  • Billing is per row plus per unit of extra work: opening an ad, fetching a dealer profile, resolving a phone number. Partition planning, search pages, retries and empty phone lookups are free.
  • detailLevel: "basic" needs no per-ad request and is the cheapest way to survey the market.
  • mileage is in Scandinavian miles; use mileageKm for kilometres.
  • batteryCapacityKwh and adPhoneNumber are frequently null — that is source data, not failure.
  • Every field is present on every row, null when unknown, so the shape is stable.
  • Swedish enum values are not translated.
  • A capped run (maxItems reached) says so in the log and skips the coverage comparison.
  • A whole-market crawl is ~$115 at basic and ~$187 at full. Raise the run's maximum-cost setting first, or it aborts part-way through.

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Blocket, Schibsted, Vend, or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper extracts only publicly visible data from Blocket.se — car listings, dealer profiles and the contact details Blocket itself shows to any logged-out visitor. No login, no CAPTCHA solving, no API-key forgery, no private-endpoint probing.

Users are responsible for:

  • Complying with Blocket.se's Terms of Service
  • Following GDPR and your jurisdiction's data-protection laws when storing or processing seller contact details, registration plates and VINs
  • Not contacting sellers listed in scraped data without a lawful basis for doing so
  • Not republishing scraped data in a way that competes commercially with Blocket
  • Honouring any opt-out signals on the source pages

Registration plates and chassis numbers are personal data in many jurisdictions when they can be linked to an individual. Treat them accordingly.


SEO Keywords

blocket scraper, scrape blocket, blocket.se scraper, blocket car scraper, blocket bilar scraper, swedish car listings scraper, sweden used car data, blocket api, blocket mobility scraper, swedish car market data, blocket dealer scraper, blocket annonser scraper, used car price data sweden, swedish vehicle listings, blocket electric car scraper, sweden ev listings scraper, blocket elbil scraper, car dealer leads sweden, swedish car dealer contacts, vin scraper sweden, registration plate scraper sweden, blocket cheerio scraper, no-browser blocket scraper, apify blocket, blocket bulk export, swedish automotive market research, car pricing intelligence sweden, blocket inventory scraper, blocket bil data, nordic car listings scraper, blocket listing extraction