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

Blocket.se has been Sweden's default place to sell used goods for decades, making its asking prices a reference point, while a weak krona keeps them looking cheap to euro buyers. Rows give price in kronor, locality, trade type and a retailer-or-private flag. No seller names or coordinates.

- **URL**: https://apify.com/lowlanddata/blocket-se-scraper.md
- **Developed by:** [Lowland Data](https://apify.com/lowlanddata) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 6 total users, 3 monthly users, 99.9% 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 Scraper

Blocket.se has been Sweden's default place to sell something used for decades, which makes its asking prices the closest thing the country has to a reference. Prices are in kronor, and a weak krona has been making Swedish goods look cheap to euro buyers.

This actor turns a Blocket search into rows: title, price in whole kronor, locality, trade type, posting timestamp, the seller's spec picks such as brand and condition, the site's own badges, photos at full resolution, and whether the seller is a retailer or a private person. Filter by price band and posting date, sort newest first, run it daily.

**It runs, every time, and you can check that before you spend anything.** [lowlanddata.com/status/blocket-se-scraper](https://lowlanddata.com/status/blocket-se-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-se-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 - which is also why a scoped run finishes in seconds.

### Quick start (30 seconds)

1. Put what you'd type in the Blocket.se search box into **searchQuery**, e.g. `cykel`.
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 newest-first sorting for monitoring, and any input works on a daily Schedule.

### What you can build with it

- **Watch a niche for underpriced listings.** Run `searchQuery: "el-cykel"` with `priceMax: 15000` and `sortBy: "date"` hourly. Every new listing arrives with `priceAmount` parsed and give-aways (`priceAmount: 0`) included.
- **Map second-hand prices by locality.** Every listing carries its `city`: chart what the same bike costs in Stockholm versus Gothenburg without touching a coordinate.
- **Track retailer vs. private supply.** The `sellerType` flag tells you how much of any category is professional traders: market structure no Blocket.se page shows you.
- **Filter by brand without opening a listing.** `attributes` carries the seller's spec picks - brand, condition, whatever the category offers - so a "Scott" or "Giant" filter is one column, not a title search.
- **Feed an AI agent or a pipeline.** Every field is structured and predictable, and the site's nested data is flattened to plain columns, so an assistant can consume it directly with no parsing step.

### What you get

Each listing is one dataset item:

```json
{
  "listingId": "474000001",
  "url": "https://www.blocket.se/recommerce/forsale/item/474000001",
  "title": "Cykel 20 tum",
  "priceAmount": 600,
  "currency": "SEK",
  "postedAt": "2026-08-21T06:06:40.000Z",
  "city": "Västerås",
  "tradeType": "Säljes",
  "sellerType": "private",
  "attributes": { "brand": "Scott", "condition": "Begagnad" },
  "labels": ["private", "fiks_ferdig"],
  "imageUrl": "https://images.blocketcdn.se/dynamic/default/item/474000001/original",
  "imageUrls": ["https://images.blocketcdn.se/dynamic/default/item/474000001/sized"],
  "adId": "474000001",
  "adType": 67,
  "listingType": "bap"
}
```

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

- `priceAmount` is in whole Swedish kronor; `0` covers give-away listings. Listings without a price carry no amount.
- `tradeType` is the site's own label for the ad type: for sale, give-away or wanted ad.
- `attributes` is whatever the seller picked from the category's spec fields, one key per spec. Which keys appear depends on the category - a bike has `brand`, a phone has `model`. Absent when the seller picked nothing.
- `labels` are the site's own badges by id: `retailer` or `private`, `fiks_ferdig` when the item can be shipped, `buy_now` when it can be bought outright.
- `imageUrl` is the original photo; `imageUrls` the sized variants the site serves, up to eight.
- `city` is locality-level. Seller names, shop names and map coordinates are not collected.
- `postedAt` reflects publication or the seller's last bump.
- `adId`, `adType` and `listingType` are Blocket's own identifiers, for anyone reconciling against the site.

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

$3.00 per 1,000 listings 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:

- **100 listings ≈ $0.30**: a daily niche watch.
- **500 listings ≈ $1.50**: a solid market snapshot.
- **A 2,500-listing crawl ≈ $7.50**: a full query window, deduplicated.

The price is all-inclusive: your runs' platform usage is covered by it, with no separate compute or proxy charges. Runs are fast: a scoped few-hundred-item run typically finishes in under ten seconds. Datacenter proxies are sufficient, no residential proxy surcharge needed.

Free-plan runs are limited to a sample of 5 items, 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 Scraper" actor on Apify
(https://apify.com/lowlanddata/blocket-se-scraper). Guide me one step at a time.

What I want to watch: [E.G. "electric bikes under 15000 Swedish kronor"]

Guide me to:
1. Propose my input values: searchQuery (what I'd type in the Blocket.se search box),
   an optional priceMin/priceMax band in Swedish kronor, sortBy "date" for newest-first
   monitoring, 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 search box. Required, unless you only re-check listings through `listingIds`.                                                                                                                                                                                                                                                                                                                                                      |
| `listingIds`         | Re-check listings you already know instead of searching: listing IDs (the number at the end of every listing address, the `listingId` of every row) or the listings' full addresses, one per line. Each is read from its own page with title, price, town, seller type, the full description and the photos the page carries. A listing that is gone from the site is skipped, named in the log and not billed. When given, the search fields are ignored. Up to 50. |
| `priceMin`           | Only listings costing at least this many Swedish kronor.                                                                                                                                                                                                                                                                                                                                                                                                             |
| `priceMax`           | Only listings costing at most this many Swedish kronor.                                                                                                                                                                                                                                                                                                                                                                                                              |
| `sortBy`             | `date` (newest first, default), `price_asc`, `price_desc`, or `relevance`.                                                                                                                                                                                                                                                                                                                                                                                           |
| `postedAfter`        | Only listings posted on or after this date (YYYY-MM-DD). Stops early with newest-first sorting.                                                                                                                                                                                                                                                                                                                                                                      |
| `postedBefore`       | Only listings posted on or before this date (YYYY-MM-DD).                                                                                                                                                                                                                                                                                                                                                                                                            |
| `maxItems`           | Stop after this many listings (default 1000).                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `proxyConfiguration` | Proxy settings; keep Apify proxy enabled.                                                                                                                                                                                                                                                                                                                                                                                                                            |

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

#### Re-checking listings you already have

Put their IDs (or their addresses) into `listingIds` and nothing else: the run reads each listing's own page and returns it as a row with the same field names as a search result - `listingId`, `url`, `title`, `priceAmount`, `currency`, `city`, `sellerType`, `imageUrl`, `imageUrls` - plus the full `description` the search page never carries; `imageUrls` holds the photos the listing's page renders, which can be fewer than the search response lists. A price change shows up as a new `priceAmount`; a listing that has been sold, has expired or was taken down is not on the site any more - the run skips it, says so in the log and the status, and does not bill it. Schedule such a run and you have a watch on the exact listings you care about. The fields that only the search response carries (`postedAt`, `tradeType`, `labels`, `attributes`, `adType`, `listingType`) are not on a listing's page and are absent from a row read this way.

### 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-se-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -X POST -H "Content-Type: application/json" \
  -d '{"searchQuery": "cykel", "maxItems": 100}'
```

Node.js:

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('lowlanddata/blocket-se-scraper').call({
  searchQuery: 'cykel',
  maxItems: 100,
});
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-se-scraper").call(
    run_input={"searchQuery": "cykel", "maxItems": 100})
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-se-scraper"
```

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

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

**Want the whole family at once?** Point one connector at every tool in the EU Marketplaces bundle:

```text
https://mcp.apify.com?actors=lowlanddata/kleinanzeigen-scraper,lowlanddata/marktplaats-scraper,lowlanddata/tweedehands-scraper,lowlanddata/olx-pl-scraper,lowlanddata/olx-ro-scraper,lowlanddata/olx-pt-scraper,lowlanddata/willhaben-scraper,lowlanddata/finn-no-scraper,lowlanddata/tori-fi-scraper,lowlanddata/blocket-se-scraper,lowlanddata/dba-dk-scraper,lowlanddata/gumtree-uk-scraper,lowlanddata/vinted-scraper,lowlanddata/bol-com-scraper,lowlanddata/subito-scraper,lowlanddata/bazos-cz-scraper,lowlanddata/bazos-sk-scraper,lowlanddata/olx-bg-scraper,lowlanddata/olx-ua-scraper,lowlanddata/willhaben-car-scraper,lowlanddata/kleinanzeigen-free-finds,lowlanddata/olx-listing-watch,lowlanddata/marktplaats-new-listing-alerts,lowlanddata/tweedehands-new-listing-alerts,lowlanddata/kleinanzeigen-deal-radar
```

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-se-scraper/api/mcp](https://apify.com/lowlanddata/blocket-se-scraper/api/mcp).

Prompts that work once connected:

- "Search Blocket.se for 'el-cykel' under 15000 Swedish kronor and summarize the price distribution."
- "Get the 100 newest 'iphone 15' listings from Blocket.se and flag private sellers below the median price."
- "Watch Blocket.se for 'kajak' and tell me when something under 3 000 Swedish kronor appears."

### Beyond the ~2,600-result window

Blocket.se serves at most 50 pages per query (about 2,650 listings). The run reports honestly when a query is bigger than its window: split broad queries by price bands (`priceMin`/`priceMax`) across runs; overlapping runs merge cleanly on `listingId`.

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

Listing prices, titles and localities 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, shop names or map coordinates; the only seller-derived field is whether a listing comes from a retailer or a private person. Titles are the seller's own words, delivered as-is.

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 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 listings 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, on standard datacenter proxies, load kept negligible. No CAPTCHA fights, no bot-wall cat-and-mouse, which is also why runs are fast and reliable enough for daily schedules. The health record above shows how that holds up day to day.

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

Set `sortBy: "date"` with your query, cap `maxItems` to a page or two, and add a daily (or hourly) Schedule in the Apify Console with an email/Slack integration on the runs. Every new listing lands in your inbox with the price already parsed. The AI-assistant prompt above walks a non-technical user through exactly this setup. Even tighter: set `postedAfter` to yesterday's date: the dataset then contains only the new listings, nothing to dedupe on your side.

### FAQ

**Can I get seller names or phone numbers?** No. The output says whether the seller is a retailer or a private person, and nothing else about them.

**Does it cover cars, boats and property?** This actor searches the general-goods marketplace. Blocket.se's vehicle and property verticals carry different data: candidates for separate actors, done properly.

**Can I get only the newest listings?** Yes, set `postedAfter` to a date (yesterday, say) and the dataset contains only listings posted since then. With newest-first sorting the run stops paging as soon as it provably reaches older listings, so a daily watch stays fast and cheap.

**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 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 API for developers?** Blocket's own API programme targets partners, not ad-hoc search. This actor gives you the equivalent for listings: structured JSON on demand, no partnership required.

**Is scraping Blocket legal in Sweden?** Listing prices, titles and localities are public commercial data, and the actor collects no seller identity: the only seller-derived field is the retailer-vs-private flag. See the section above.

**What does it cost to scrape Blocket?** $3.00 per 1,000 listings, billed only for what is delivered. A 100-listing daily watch runs about $0.30; failed or empty runs are not billed.

**Can I download every result for a broad Blocket search?** Blocket serves at most 50 pages per query, roughly 2,650 listings. For bigger queries, split by `priceMin`/`priceMax` across several runs; overlaps merge cleanly on `listingId`.

**Can I bulk-export Blocket listings?** That is what a run is. Set `maxItems` to the size you need, up to the ~2,650-listing window per query, then export the dataset as CSV, Excel or JSON from the Console or read it over the API. Beyond one window, split by price band.

**How do I sort Blocket results by price?** Set `sortBy` to `price_asc` or `price_desc`. The default is `date` (newest first); `relevance` matches the site's own ranking.

**Can I filter Blocket listings by posting date?** Yes, `postedAfter` and `postedBefore` take a YYYY-MM-DD date. Combined with newest-first sorting, `postedAfter` also stops the run early, which keeps daily monitoring cheap.

**How do I tell private sellers from dealers on Blocket?** Every item carries `sellerType`: retailer or private. That is market structure Blocket's own pages don't aggregate for you.

**Does the output include map coordinates?** No. You get locality-level `city` and nothing finer.

**What is in `attributes`?** The spec fields the seller filled in for that category - brand, condition, size, model - one key each, flattened so they land as ordinary columns in an export. Which keys appear depends entirely on the category and on what the seller picked.

**What are `labels`?** Blocket's own badges on the listing, by id: `retailer` or `private`, `fiks_ferdig` if it can be shipped, `buy_now` if it can be bought outright without haggling.

**How long does a run take?** A scoped few-hundred-item run typically finishes in under ten seconds, so it fits inside a synchronous API call.

**How many listings can a single run return?** Up to `maxItems`, which defaults to 1,000. Apify free-plan runs return a 5-item sample.

**Can I test the scraper for free?** Yes, on the free plan you get a 5-item sample from your real query, which is enough to validate the fields against your pipeline.

**Are listing photos included?** Yes. `imageUrl` is the original photo at full resolution; `imageUrls` is an array of the sized variants the site serves, up to eight.

**Why does a listing show priceAmount 0?** That is a give-away ad; the actor keeps the zero rather than dropping the listing.

**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.

**Why did postedAt change on a listing I saw before?** `postedAt` reflects publication or the seller's most recent bump, so a bumped listing surfaces again with a newer timestamp.

### Related scrapers

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

- [DBA.dk Scraper](https://apify.com/lowlanddata/dba-dk-scraper): Denmark's classifieds institution.
- [Tori.fi Scraper](https://apify.com/lowlanddata/tori-fi-scraper): Finland's biggest marketplace.

### 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.
- **"The site blocked the run before any results could be fetched. This is usually temporary - retry in a few minutes."**: a temporary block on the first request; a retry usually lands on a clean proxy session.
- **"... the site serves at most this many pages per query ..."**: the query is bigger than Blocket.se's result window; add a price band for full coverage.
- **Fewer items 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`):

What to search for on Blocket.se, exactly as you would type it in the site's search box, e.g. "sykkel" or "iphone 15". Leave it out when you only re-check listings through <b>listingIds</b>.

## `listingIds` (type: `array`):

Re-check listings you already know instead of searching: one listing ID per line (the number at the end of every listing address on Blocket.se, and the <code>listingId</code> of every dataset item), or the listing's full address. Each one is read from its own page: title, price, town, seller type, the full description and the photos on its page. A listing that is gone from the site is skipped, named in the log and not billed. <b>When given, the search fields of this form are ignored</b> and the run status says which. Up to 50.

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

Only include listings costing at least this many Swedish kronor.

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

Only include listings costing at most this many Swedish kronor.

## `sortBy` (type: `string`):

Order of results: date (newest first, best for monitoring), price_asc, price_desc, or relevance.

## `postedAfter` (type: `string`):

Only include listings posted on or after this date. With newest-first sorting the run stops early once older listings are reached. <b>Format: <code>YYYY-MM-DD</code></b> (for example <code>2026-09-08</code>) or a full ISO timestamp such as <code>2026-09-08T14:30:00Z</code>. Slash dates like <code>08/09/2026</code> are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant.

## `postedBefore` (type: `string`):

Only include listings posted on or before this date. <b>Format: <code>YYYY-MM-DD</code></b> (for example <code>2026-09-08</code>) or a full ISO timestamp such as <code>2026-09-08T14:30:00Z</code>. Slash dates like <code>08/09/2026</code> are refused on purpose: they are read as September in Europe and August in the United States, and this actor will not guess which you meant.

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

Stop after this many listings. Free-plan runs are capped at 5 items. The form starts at 25 for a cheap first run - that is the form's prefill, not a cap on your plan; clear it to use the default of 1000.

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

Proxy settings. Keep Apify proxy enabled.

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

When a run fails, send the developer the actor name and build, an error category, the error message (truncated) and a one-way hash of your input - so a bug can be fixed without anyone asking you to reproduce it. <b>Your input itself, your results and your identity are never sent, and successful runs send nothing at all.</b> Switch this off and the actor behaves exactly the same.

## Actor input object example

```json
{
  "searchQuery": "cykel",
  "listingIds": [],
  "sortBy": "date",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "reportFailures": true
}
```

# Actor output Schema

## `listings` (type: `string`):

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

# 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": "cykel",
    "listingIds": [],
    "sortBy": "date",
    "maxItems": 25,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lowlanddata/blocket-se-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": "cykel",
    "listingIds": [],
    "sortBy": "date",
    "maxItems": 25,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("lowlanddata/blocket-se-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": "cykel",
  "listingIds": [],
  "sortBy": "date",
  "maxItems": 25,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call lowlanddata/blocket-se-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lowlanddata/blocket-se-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/85eXV4eTwSfsia2c1/builds/s5qxhiNcHJhEoJYgm/openapi.json
