Blocket Vehicle Listings Scraper avatar

Blocket Vehicle Listings Scraper

Pricing

from $1.27 / 1,000 item extracteds

Go to Apify Store
Blocket Vehicle Listings Scraper

Blocket Vehicle Listings Scraper

Export public Blocket car listings with make, model, year, asking price, mileage in kilometers, location, seller context, images and canonical URLs from saved Swedish vehicle searches.

Pricing

from $1.27 / 1,000 item extracteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 days ago

Last modified

Categories

Share

Export blocket vehicle listings from public Swedish car search pages into structured rows for inventory and asking-price comparisons. Paste the filtered search URL you already use on Blocket, or start with the default used-car search. Each row includes listing identity, make, model, model year, price, mileage, location, public seller context, images, and the canonical listing URL when those values are available.

Who is it for?

Used-car analysts can compare asking prices for a model and region. Dealers can review competing inventory. Researchers can assemble Swedish automotive samples without manually transcribing search cards. Recurring Apify schedules can collect snapshots for your own downstream comparison pipeline.

Why use it?

The output keeps stable listing IDs for joining snapshots and removes duplicates across searches in one run. It preserves source mileage and units alongside a kilometer conversion, so Swedish mil are not confused with kilometers. Seller context and image links come from the search response without additional detail-page charges.

This is an independent tool, not affiliated with or endorsed by Blocket. It covers the car search category, which can include transport vehicles. It does not support motorcycles, boats, caravans, property, jobs, or general marketplace searches.

Getting started

  1. Open Blocket's car search and apply your intended filters.
  2. Copy the full HTTPS search URL, including its query string.
  3. Add it under Car search URLs. Alternatively, omit URLs to search used cars with sales_form=1.
  4. Set Maximum unique listings and run the Actor.
  5. Inspect the dataset and download JSON, CSV, Excel, or another Apify export format.

Input parameters

{
"startUrls": [{"url": "https://www.blocket.se/mobility/search/car?sales_form=1&q=volvo"}],
"maxItems": 100
}
ParameterBehavior
startUrls1–10 HTTPS /mobility/search/car URLs. Optional; omitted URLs use the used-car default.
maxItemsGlobal unique-row limit, default 100, range 1–10000. Zero is invalid.

Entries use URL only. Custom method, payload, headers, and userData exposed by some clients are ignored; the Actor makes its own GET requests.

A supplied URL replaces the default filters: do not assume every custom search excludes leasing or new cars. page=1 through page=50 starts at that source page. Searches run sequentially and share the result limit. Listing URLs and unsupported categories fail validation rather than silently switching scope.

Filters and matching

Filters embedded in the URL are passed to Blocket. Create them in its search UI rather than guessing parameter values. For example, the source's q=volvo search was verified locally with Volvo records. Free-text matching follows Blocket's behavior; this Actor does not implement exact-phrase, whole-word, case-sensitive, or title-only matching.

Native filters may evolve. Inspect a sample before using it for a decision. No undocumented parameter is guaranteed to affect the upstream search. The Actor does not enrich detail URLs or apply a second set of unrelated local filters.

Extracted data

FieldsMeaning
listingId, url, title, categoryStable identity, canonical link, heading, and car category.
make, model, modelSpecification, yearManufacturer, model, trim text, and model year.
price, currency, priceUnit, salesFormAdvertised amount and native sales-form code. Not a transaction price.
mileage, mileageUnit, mileageKmOriginal odometer value/unit and conversion when recognized.
fuel, transmissionSource Swedish labels.
location, latitude, longitudePublic locality and approximate coordinates.
sellerName, sellerId, sellerTypePublic organisation context; private sellers may have null names.
imagesImage URLs, not downloaded files.
sourceTimestamp, searchUrl, scrapedAtSource Unix milliseconds, discovery page, and collection time.

Missing fields are null; missing image collections are empty arrays. Source mistakes are preserved rather than guessed away. A Scandinavian mile is 10 km; unknown units produce a null kilometer conversion. salesForm=1 denotes used-car sale and 2 new-car sale; other source codes can describe leasing. Do not compare monthly lease amounts with full purchase prices.

Output example

The normalized shape below follows observed search records; identity and seller values are illustrative.

{
"listingId": "12345678",
"url": "https://www.blocket.se/mobility/item/12345678",
"title": "Volvo XC60",
"category": "car",
"make": "Volvo",
"model": "XC60",
"year": 2020,
"price": 249000,
"currency": "SEK",
"mileage": 12000,
"mileageUnit": "SCANDINAVIAN_MILE",
"mileageKm": 120000,
"location": "Stockholm",
"sellerName": "Example dealer",
"sellerType": "Företag",
"images": [],
"scrapedAt": "2026-10-03T00:00:00.000Z"
}

How much does it cost to extract Blocket vehicle listings?

Pay-per-event pricing consists of one start event per valid run and one item event per delivered unique listing. Duplicate, rejected, and missing records have no item charge. Images and seller context included in a listing have no separate event charge. The start event costs $0.001. Listing prices are FREE $0.002438, BRONZE $0.00212, SILVER $0.0016536, and GOLD/PLATINUM/DIAMOND $0.001272 per listing. At BRONZE, 10 listings cost approximately $0.0222, 100 approximately $0.213, and 1,000 approximately $2.121. At FREE, 100 cost approximately $0.2448. These are Actor event estimates; consult Apify's current pricing panel and account billing for your applicable tier and invoice.

Spend tiers follow your qualifying aggregate monthly Apify Store spend, not a private volume discount in this Actor. Set a maximum charge budget to bound spending. A natural no-result search still incurs the start event. Invalid input is rejected before that event. Failed runs can contain partial rows and their corresponding charges.

Pagination and limitations

Each search follows Blocket's reported pagination, capped at 50 source pages. The Actor does not partition searches to bypass that cap or promise complete national inventory. It stops at the global result limit, a billing limit, source exhaustion, or an error. Overlapping queries consume no duplicate item charges, but may still require page requests.

Listings can move between pages while the source changes. Deduplication prevents repeated IDs but cannot guarantee a snapshot transaction or perfect coverage. Sponsored placements outside the normal search response are excluded. There are no built-in historical comparisons, sold-status confirmations, valuations, phone lookups, or notifications.

Integrations

Use Apify schedules for repeat collection, then join runs by listingId in your database. Store scrapedAt and compare price or mileage columns to identify changes. A record absent from a capped or filtered sample is not proof it was sold.

Send exports to spreadsheets, BI systems, Make, or Zapier for downstream processing; those services may have their own charges.

API usage

Use your own Apify token securely. The synchronous endpoint is convenient for small runs; larger runs should use the asynchronous run API and retain the returned run ID.

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~blocket-sweden-vehicle-listings/run-sync-get-dataset-items' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"maxItems":20}'
const response = await fetch('https://api.apify.com/v2/acts/automation-lab~blocket-sweden-vehicle-listings/run-sync-get-dataset-items', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}`, 'Content-Type': 'application/json' },
body: JSON.stringify({ maxItems: 20 }),
});
if (!response.ok) throw new Error(`Apify returned ${response.status}`);
const rows = await response.json();
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/blocket-sweden-vehicle-listings').call(run_input={'maxItems': 20})
rows = list(client.dataset(run['defaultDatasetId']).iterate_items())

MCP setup

Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/blocket-sweden-vehicle-listings"

Claude Desktop, Cursor, and VS Code can use their supported HTTP MCP configuration with the same scoped URL:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/blocket-sweden-vehicle-listings"
}
}
}

Authenticate according to your client's Apify configuration. Discover actual tool names with tools/list; the scoped endpoint also exposes supporting run/data tools. Discovery is not permission to start a run. Example prompt: “Collect 20 used Volvo listings from my Blocket car search URL and compare asking prices, clearly identifying missing mileage.”

Start an authorized run once and retain its run ID, status and storage IDs; these are metadata, not result rows. call-actor supports waitSecs 0–45 seconds (default 30). Configure the client's request timeout above the selected wait plus transport margin, within a total 120-second deadline. If still running, inspect that same run with bounded backoff: 2, 4, 8 seconds capped at 10. On client timeout, recover the known run; if its ID is unknown, report uncertainty rather than blindly restart. At the deadline, stop polling and report pending with the run ID. Report terminal failures honestly, with available rows identified as partial.

After success, use get-dataset-items with the returned defaultDatasetId, offset=0, limit=20, and a fields projection such as listingId,url,make,model,year,price,currency,mileageKm,location,sellerType,scrapedAt, following the discovered tool schema. Prefer untransformed JSON (no filtering or unwinding), advance source offsets using pagination metadata, and stop at exhaustion or a total budget of 100 rows or 64 KiB of serialized UTF-8 content across all pages, whichever comes first. Process pages host-side before model injection and omit or summarize oversized rows/pages with disclosure. If the client cannot intercept oversized responses, do not claim a hard byte guarantee. Report returned rows, continuation offset and partial/truncated status. Keep full exports outside model context. These are consumer context limits, not Actor collection limits; discovery transport size is not model-visible context, and client caching or token savings are not guaranteed.

Legality, data handling and responsible use

No AI model is used in extraction or output. The Actor fetches public Blocket search pages and writes selected public vehicle and seller context to your Apify dataset. It does not retrieve private accounts, messages, phone numbers, or passwords. Public seller context and approximate location can still be personal data: use only for lawful, proportionate purposes, respect source terms, and avoid unsolicited outreach.

Apify hosts processing, output and logs. Dataset retention follows your Apify storage settings; delete unwanted runs/datasets through Apify. This Actor adds no persistent cache, cross-run dataset, or session storage. Normal logs contain counts and page numbers, not listing records or seller identities. No additional paid API, proxy, or external AI account is required by this implementation.

Failed operations send sanitized diagnostic input, exceptions and actor/build/run IDs to our private GlitchTip service for repair; secret fields and URL queries are removed and reports are retained for 30 days. Run storage and diagnostics have separate deletion/retention paths. Contact support for diagnostic deletion requests.

FAQ and troubleshooting

Why are there fewer rows than requested? A search may exhaust, hit the 50-page cap, overlap earlier searches, or reach your charge budget.

The maxItems setting is a ceiling, not a guaranteed count.

Can I supply a listing URL? No. Use a /mobility/search/car URL. Other category and detail routes are rejected.

Why did the run fail? Invalid inputs, permanent HTTP errors, a blocked response, or a changed search-state shape fail visibly. Transient network errors, 429 and 5xx responses receive at most three total attempts. No browser or residential proxy fallback is hidden in the price. Inspect the run log; do not treat partial data as complete.

Does this show sold vehicles or historical prices? No. It collects current public search records. Maintain your own snapshots and interpret absence cautiously.

For Nordic comparisons, see FINN.no Multi-Category Listings. For other markets, see AutoTrader Canada Vehicle Listings and Carzone Used Cars. Their source coverage and schemas differ.

Report problems through the Apify Store issue channel or automation_labs_support@agentmail.to. Include the run link and a non-sensitive search example. Never send account credentials.