# Blocket.se Car Scraper (`lowlanddata/blocket-car-scraper`) Actor

Turn a Blocket.se car search into structured rows: make, model, year, mileage in kilometres, fuel, gearbox, power and price in kronor, with the full spec and equipment list per car. Private-lease offers flagged. No seller data, no login.

- **URL**: https://apify.com/lowlanddata/blocket-car-scraper.md
- **Developed by:** [Lowland Data](https://apify.com/lowlanddata) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Blocket.se Car Scraper

Blocket is where Sweden sells its used cars - around 150,000 listed at any moment, from private sellers and from most of the country's dealers. That makes its asking prices the closest thing there is to a Swedish used-car reference, in kronor, and a weak krona has been making Swedish cars look cheap to euro buyers.

This actor turns a Blocket car search into rows: make, model, trim line, model year, mileage in kilometres, fuel, gearbox, power, colour, equipment list, the seller's description, the asking price in kronor, and the primary photo. Search by make, model or both; set a price band; run it daily.

**It runs, every time, and you can check that before you spend anything.** [lowlanddata.com/status/blocket-car-scraper](https://lowlanddata.com/status/blocket-car-scraper/) is this actor's public health record: every run of the last 30 days, the success rate, the daily canary, failures included. Full input/output reference on the [tool page](https://lowlanddata.com/tools/blocket-car-scraper/).

No login, no CAPTCHA solving, no private endpoints. The actor reads what Blocket.se shows a logged-out visitor, paces its requests and stays on standard datacenter proxies.

### Quick start (30 seconds)

1. Put what you'd type in the Blocket.se car search into **searchQuery**, e.g. `volvo xc60`.
2. Click **Start**. That's the whole minimum setup.
3. When the run finishes, open the dataset's **Overview** tab for a clean table, or **Export** it as CSV/Excel/JSON.

Optional knobs: a price band in Swedish kronor, and **Fetch specs** off for a price-only sweep at a tenth of the cost. Any input works on a daily Schedule.

### What you can build with it

- **Price a car before you buy or sell it.** Run `searchQuery: "golf gti"` with a `priceMin`/`priceMax` band and compare year, mileage and price across every listing on the market that morning.
- **Watch a model for underpriced listings.** Schedule `searchQuery: "tesla model 3"` with `priceMax: 300000` daily; every new car arrives with `mileageKm` and `year` parsed, so a spreadsheet filter finds the outliers.
- **Track the used-EV market.** Filter `fuel` for `El` across a make and chart price against mileage over weeks - depreciation data no Blocket page shows you.
- **Feed an AI agent or a pipeline.** Every field is structured and predictable, mileage and power already numeric, so an assistant can consume it directly with no parsing step.

### What you get

Each car is one dataset item:

```json
{
  "listingId": "26644656",
  "url": "https://www.blocket.se/mobility/item/26644656",
  "title": "Volvo XC60",
  "variant": "D5 AWD R-Design Geartronic",
  "make": "Volvo",
  "model": "XC60",
  "year": 2019,
  "mileageKm": 84000,
  "powerHp": 235,
  "engineLitres": 2,
  "fuel": "Diesel",
  "transmission": "Automatisk",
  "color": "Svart",
  "previousOwners": 2,
  "priceAmount": 249000,
  "currency": "SEK",
  "priceType": "total",
  "condition": "used",
  "equipment": ["Dragkrok", "Panoramatak", "Adaptiv farthållare"],
  "description": "Välvårdad, servad hos märkesverkstad.",
  "updatedAt": "2026-09-10T13:21:00Z",
  "imageUrl": "https://images.blocketcdn.se/dynamic/default/item/26644656/example"
}
```

Field notes, so you know exactly what you are buying:

- `mileageKm` is kilometres. Blocket shows Swedish *mil*, and one mil is ten kilometres; the conversion is done for you.
- `powerHp` is horsepower as the site lists it (Hk). `engineLitres` is the engine size.
- `fuel`, `transmission` and `color` are the site's own Swedish labels - `Diesel`, `Bensin`, `El`, `Plug-in Bensin`; `Automatisk`, `Manuell` - so they match what a Swedish buyer would filter on.
- `equipment` is the seller's equipment list, one entry per item, as entered.
- `description` and `variant` are the seller's own words, passed through unedited. A dealer who writes a phone number or a registration plate into the ad text has published it themselves; the actor does not extract those as fields, but it does not rewrite the free text either.
- `priceType` says what `priceAmount` is: `total` for an asking price, `monthly` for a private-lease offer. Blocket lists both kinds in one search, and a lease's price is its monthly cost - filter on `priceType` when you are pricing a purchase. Absent with **Fetch specs** off, because only the car's own page says which.
- `condition` is `new` or `used` from the listing's schema markup.
- `updatedAt` is when the listing was last updated, in Swedish local time as shown.
- With **Fetch specs** off, rows carry `title`, `variant`, `make`, `model`, `priceAmount`, `currency`, `condition` and `imageUrl` only - the fields on the search page.
- Seller names, contact details, registration plates and map coordinates are not collected.

### How much does it cost to scrape Blocket.se cars?

$3.00 per 1,000 cars delivered, pay-as-you-go, no subscription, and you pay per result rather than per hour. A run that finds nothing still costs the $0.005 actor start. In plain dollars:

- **50 cars ≈ $0.15**: pricing one model before a purchase.
- **200 cars ≈ $0.60**: a daily watch on a make.
- **1,000 cars ≈ $3.00**: a full market snapshot for one query.

The price is all-inclusive: your runs' platform usage is covered by it, with no separate compute or proxy charges. Runs with specs on take about a second per car, because each car's own page is read; a hundred cars finishes in about two minutes. With specs off a run is a few seconds. Datacenter proxies are sufficient, no residential proxy surcharge needed.

Free-plan runs are limited to a sample of 5 cars, enough to evaluate the output format against your real query.

### Not technical? Let your AI assistant set it up

Copy this into ChatGPT, Claude or any AI assistant, fill in the one line, and follow the conversation:

```text
Help me set up the "Blocket.se Car Scraper" actor on Apify
(https://apify.com/lowlanddata/blocket-car-scraper). Guide me one step at a time.

What I want to watch: [E.G. "used Volvo XC60 under 250000 Swedish kronor"]

Guide me to:
1. Propose my input values: searchQuery (a make, a model, or both), an optional
   priceMin/priceMax band in Swedish kronor, whether to fetch specs, and maxItems.
2. Create a free Apify account (apify.com), open the actor page, paste the values
   into the Input form, and start a run.
3. Set up a daily Schedule in the Apify Console with the same input, plus an email
   or Slack integration so new results reach me automatically.
4. Show me how to export results as CSV/Excel, or read them from the API if I code.
5. If the results are what I wanted, remind me at the end to leave a quick rating on the actor page, and to report anything broken or missing on its Issues tab.
```

### Input

| Field                | Description                                                                                                      |
| -------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `searchQuery`        | What you'd type in the Blocket.se car search: a make, a model, or both. Required.                                |
| `priceMin`           | Only cars listed at or above this many Swedish kronor.                                                           |
| `priceMax`           | Only cars listed at or below this many Swedish kronor.                                                           |
| `scrapeDetails`      | Read each car's own page for year, mileage, fuel, gearbox, power, colour, equipment and description. Default on. |
| `maxItems`           | Stop after this many cars (default 100).                                                                         |
| `proxyConfiguration` | Proxy settings; keep Apify proxy enabled.                                                                        |

A run minimally needs a `searchQuery`; invalid combinations (like an inverted price band) fail immediately with the reason in the run's status message.

### Use it from your code

Run the actor and get items straight back with one HTTP call (fine for scoped runs up to ~5 minutes):

```bash
curl "https://api.apify.com/v2/acts/lowlanddata~blocket-car-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -X POST -H "Content-Type: application/json" \
  -d '{"searchQuery": "volvo xc60", "maxItems": 50}'
```

Node.js:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/blocket-car-scraper').call({
  searchQuery: 'volvo xc60',
  maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lowlanddata/blocket-car-scraper").call(
    run_input={"searchQuery": "volvo xc60", "maxItems": 50})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

For bigger crawls, start the run asynchronously and fetch the dataset when the finished-run webhook fires. Schedules (e.g. a daily price snapshot), webhooks and the Make/Zapier/n8n integrations all work out of the box: this is a standard Apify actor.

### Use it with AI agents (MCP)

Claude, Cursor and other MCP-capable agents can run this scraper as a tool through Apify's hosted MCP server: the agent fills in the search itself, starts the run and reads the results: no glue code.

Claude Code:

```bash
claude mcp add apify --transport http "https://mcp.apify.com?actors=lowlanddata/blocket-car-scraper"
```

Cursor or Claude Desktop (add a custom connector / MCP server with this URL):

```text
https://mcp.apify.com?actors=lowlanddata/blocket-car-scraper
```

Sign in with your Apify account when prompted. Runs are billed to it. Setup details per client: [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp), or start from this actor's own MCP page: [apify.com/lowlanddata/blocket-car-scraper/api/mcp](https://apify.com/lowlanddata/blocket-car-scraper/api/mcp).

Prompts that work once connected:

- "Search Blocket.se for used Volvo XC60s under 250 000 kronor and summarise price against mileage."
- "Get the 50 newest Tesla Model 3 listings on Blocket.se and flag any priced below the median for their year."
- "Watch Blocket.se for a Golf GTI under 150 000 kronor and tell me when one appears."

### Is it legal to scrape Blocket.se?

Listing prices, specifications and photos are public commercial information. This actor reads what Blocket.se shows any logged-out visitor, never signs in, bypasses no anti-bot protection, and paces its requests so its load on the site is negligible. It does not collect seller names, contact details, registration plates or map coordinates: the registration number is on the page and its label is simply not among the fields this actor reads.

One limit stated plainly: `title`, `variant` and `description` are the seller's own words, passed through unedited. A seller who writes a phone number or a plate into their ad text has published it themselves; the guarantee covers the structured fields, not free text sellers choose to write.

Sweden applies the GDPR, supervised by the Swedish Authority for Privacy Protection (IMY). How you store and use the data once it is yours is governed by the law of your own jurisdiction.

This actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Blocket.se or its owners, and trademarks belong to their respective holders.

### Is there a Blocket.se car API alternative?

Blocket.se's public API programme is aimed at partners, not ad-hoc listing search. This actor is the practical alternative: the same cars as structured JSON through one HTTP call (`run-sync-get-dataset-items`), on a schedule, or as an MCP tool for AI agents.

### Does Blocket.se block scrapers?

This actor makes ordinary requests: paced, one car page at a time, on standard datacenter proxies, load kept negligible. No CAPTCHA fights, no bot-wall cat-and-mouse, which is also why runs are reliable enough for daily schedules. The health record above shows how that holds up day to day.

### How do I monitor Blocket.se car prices?

Pick your query and a price band, cap `maxItems` to a page or two, and add a daily Schedule in the Apify Console with an email/Slack integration on the runs. Every new car lands in your inbox with year, mileage and price already parsed. For a cheap daily sweep, switch **Fetch specs** off and fetch specs only for the cars that interest you.

### FAQ

**Can I get the seller's name or phone number?** No. The output describes the car, and says nothing about who is selling it.

**Does it cover the registration plate or VIN?** No. Plates are collected by nobody here, and the page does not carry a VIN.

**Can I tell a dealer from a private seller?** Not in this version. The marker Blocket uses is inside the seller block, which this actor does not read; a reliable signal is on the list.

**Why is mileage in kilometres when Blocket shows mil?** Because a buyer outside Sweden expects kilometres. One Swedish mil is ten kilometres, and the conversion is exact.

**What does "Fetch specs" cost me?** One extra page request per car, about a second each. It is where year, mileage, fuel, gearbox, power, colour, equipment and description come from. Off, you get the search-page fields in a few seconds.

**How fresh is the data?** Live at run time: every run queries Blocket.se directly. For continuous freshness, schedule the actor.

**How do I export Blocket car listings to Excel?** Open the run's dataset in the Apify Console and pick Excel from the Export menu: CSV, JSON and XML are there too, and the same formats are available over the API.

**Does it work with Make, Zapier or n8n?** Yes, it is a standard Apify actor; all platform integrations, webhooks and schedules apply.

**Is there a Blocket car API for developers?** Blocket's own API programme targets partners, not ad-hoc search. This actor gives you the equivalent: structured JSON on demand, no partnership required.

**What does it cost to scrape Blocket cars?** $3.00 per 1,000 cars, billed only for what is delivered. Pricing one model runs a few cents; failed or empty runs are not billed.

**Can I bulk-export every listing for a make?** Set `maxItems` to the size you need and export the dataset as CSV, Excel or JSON, or read it over the API. A big make can run to thousands of cars; with specs on, budget about a second per car.

**Why is a new XC60 listed at 8,590 SEK?** It is a private-lease offer, and that is the monthly cost. Blocket mixes leases into the same search as sales; every row with specs carries `priceType`, so keep `priceType: "total"` when you are pricing a purchase.

**Can I filter by fuel or gearbox?** Not as an input yet - the site exposes no such parameter server-side - but `fuel` and `transmission` are columns on every row, so a spreadsheet or pipeline filter is one step.

**Are photos included?** `imageUrl` is the listing's primary photo.

**Why did updatedAt change on a car I saw before?** The seller edited or bumped the listing; `updatedAt` reflects the last update the site shows.

**Can ChatGPT or Claude run this scraper for me?** Any MCP-capable agent can, through Apify's hosted MCP server. The agent fills in the search, runs it and reads the results. Setup URLs are in the MCP section above.

### Related scrapers

Working the Nordic used-car or second-hand market? Same output discipline, same public health record:

- [Blocket.se Scraper](https://apify.com/lowlanddata/blocket-se-scraper): Blocket's general second-hand marketplace, everything that is not a car.
- [willhaben Car Scraper](https://apify.com/lowlanddata/willhaben-car-scraper): Austria's used-car market, the same fields.

### Troubleshooting

The actor fails fast with the reason in the run's status message:

- **"priceMin must not be higher than priceMax."**: swap the two values.
- **"Failed to read the car search page ..."**: the site did not answer readably on a fresh route either; retry in a few minutes.
- **"N cars delivered; M without specs ..."**: some car pages could not be read; those rows carry the search-page fields only. Re-run to fill them in.
- **Fewer cars than requested on a free plan**: the 5-item free sample cap; run on a paid Apify plan for full results.

### Support

Found an issue or missing a field you need? The fastest route is the actor's **Issues tab** - it is monitored and reports get fixed. For anything private, email **contact@lowlanddata.com**. This actor is actively maintained.

Working well for you? A **rating on this page** takes ten seconds and helps other buyers find it. It is also the clearest signal of what we should build next.

# Actor input Schema

## `searchQuery` (type: `string`):

<b>Required.</b> What you would type into the Blocket.se car search: a make, a model, or both, e.g. "volvo xc60", "tesla", "golf gti".

## `priceMin` (type: `integer`):

Only cars listed at or above this many Swedish kronor.

## `priceMax` (type: `integer`):

Only cars listed at or below this many Swedish kronor.

## `scrapeDetails` (type: `boolean`):

On: year, mileage, fuel, gearbox, power, colour, equipment and description, one page request per car. Off: make, model, price and photo from the search page only - about ten times faster and cheaper, useful for a price watch.

## `maxItems` (type: `integer`):

Stop after this many cars. With specs on, each car is one extra page request, so a hundred cars takes about two minutes.

## `proxyConfiguration` (type: `object`):

Keep Apify proxy enabled; standard datacenter proxies are sufficient.

## `reportFailures` (type: `boolean`):

When a run fails, send the error and your input (never your results) to the maintainer so the actor gets fixed. Switch off to keep failures private.

## Actor input object example

```json
{
  "searchQuery": "volvo xc60",
  "scrapeDetails": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "reportFailures": true
}
```

# Actor output Schema

## `cars` (type: `string`):

Scraped Blocket.se car listings, one JSON object per car.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQuery": "volvo xc60",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/blocket-car-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQuery": "volvo xc60",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/blocket-car-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQuery": "volvo xc60",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call lowlanddata/blocket-car-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lowlanddata/blocket-car-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qSjXH5MFugWhSiY9B/builds/IDrtZi3kxWvArDg6N/openapi.json
