# Booli Scraper - Sweden Property Listings & Sold Prices (`sian.agency/booli-property-scraper`) Actor

Scrape Booli.se: homes for sale plus the full slutpriser archive — asking and sold prices, area, rooms, fee, agency and price changes, in Swedish.

- **URL**: https://apify.com/sian.agency/booli-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.63 / 1,000 property searches

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Booli Scraper - Sweden Property Listings & Sold Prices 🚀

#### 🎉 Every Booli.se home for sale, plus the full sold-price archive, with asking and final prices on the same rows

##### Built for analysts valuing Swedish housing, agencies watching their stock, and anyone done copying prices out of a browser by hand

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-blue)](https://apify.com/sian.agency/booli-property-scraper)
[![Sweden](https://img.shields.io/badge/Market-Sweden-yellow)](https://apify.com/sian.agency/booli-property-scraper)
[![Pay Per Result](https://img.shields.io/badge/Pricing-Pay%20Per%20Result-green)](https://apify.com/sian.agency/booli-property-scraper/pricing)
[![Maintained](https://img.shields.io/badge/Maintained%20by-SI%C3%81N%20Agency-orange)](https://apify.com/sian.agency?fpr=sian)

### 🔎 What is the Booli Sweden Property Scraper — and when should you use it?

The **Booli Sweden Property Scraper** turns Booli.se homes for sale and the sold-price archive, for any Swedish area into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Swedish property rows from Booli.se: asking prices on homes for sale, final registered sold prices with the asking-price difference, area, rooms, living area, monthly fee, plot size, coordinates, agency and Booli's own estimate. Counties and municipalities resolve by name; finer areas via a pasted search URL.

**Use something else when:** the property data you need is not on Booli.se. Use [Hemnet Scraper](https://apify.com/sian.agency/hemnet-property-scraper?fpr=sian) for Sweden's market leader, asking and sold prices with broker contacts. Use [Boligsiden Scraper](https://apify.com/sian.agency/boligsiden-property-scraper?fpr=sian) for Denmark's valuation-led portal, listing and sold prices. Use [Finn.no Scraper](https://apify.com/sian.agency/finn-no-property-scraper?fpr=sian) for Norway's property market, listings and prices. This actor covers the two search surfaces Booli publishes — bostäder till salu (homes for sale, including snart till salu) and slutpriser (final registered sale prices built on lagfarter from Lantmäteriet). Full advert text and complete photo sets live on each listing's own page and are not part of the search rows; Booli Pro statistics and the broker-comparison tools are separate Booli products and out of scope.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/booli-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want Booli.se property rows and prices for any Swedish area using the Apify Actor `sian.agency/booli-property-scraper`.

Use it when I need: Swedish property rows from Booli.se: asking prices on homes for sale, final registered sold prices with the asking-price difference, area, rooms, living area, monthly fee, plot size, coordinates, agency and Booli's own estimate. Counties and municipalities resolve by name; finer areas via a pasted search URL.

Don't use it when: the property data you need is not on Booli.se — use hemnet-property-scraper or boligsiden-property-scraper or finn-no-property-scraper instead.

How to call it: give `locations` a list of Swedish municipalities or counties (Motala kommun, Stockholms län) or paste Booli search addresses into `searchUrls`; pick the `operation` (search for homes for sale, sold for the slutpriser archive); set `objectTypes`, price, room or living-area bounds and `maxResults` to narrow it.

Start with this input:
{
  "operation": "sold",
  "locations": [
    "Motala kommun",
    "Vasastan, Stockholm"
  ],
  "objectTypes": [
    "Lägenhet",
    "Villa"
  ],
  "maxResults": 200
}

Ask me which Swedish areas to cover, whether the buyer wants homes currently for sale or the sold-price archive, and how many results the run should stop at, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull every sold villa in Motala kommun with the final price, the asking price and the percentage between them.*
- *List apartments for sale in Vasastan, Stockholm under 6 million kr with the monthly fee and the agency name.*
- *Show homes coming to market (snart till salu) in Göteborg with coordinates, newest first.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/booli-property-scraper.md](https://apify.com/sian.agency/booli-property-scraper.md).

### 📋 Overview

The actor pages Booli's own search results exactly the way the site does, filtered and de-duplicated. It stops the moment your row budget is reached. You are charged per returned result, never per page fetched, and results your filters exclude are never saved and never billed.

| Operation | What it returns | Typical rows per page |
|---|---|---:|
| 🔍 Property Search | Homes for sale with asking price, facts, agency and estimate | 35 |
| 🧾 Sold Prices (Slutpriser) | Final registered prices with asking-price comparison | 35 |

### ✨ Features

- **Both surfaces, one actor**: asking prices and the sold archive under one run and one bill.
- **Any Swedish area**: every municipality and county resolves by name; numeric area ids and pasted search URLs reach the finer areas.
- **Booli's own property-type filter**, with exactly the six values the site offers.
- **Filtered rows never bill** — price, rooms and living-area bounds are applied before anything is saved.
- **The pre-market backlog as a switch**: "only coming to market" (snart till salu) isolates supply that has not formally hit the market yet.
- **Coordinates on every row**, so mapping is a join rather than a geocoding project.
- **Structured output**: numbers as numbers, dates as dates, identical in the dataset, the exports and the run report.
- **Nothing to configure** — no proxy picker, no area-id archaeology. Press Start.

### 🎬 Quick Start

1. Open the actor and press **Start**. The default run reads current homes for sale across all of Sweden and stops at 100 rows.
2. Watch the log: each page prints how many results matched, how many were saved, and what was charged.
3. Export the dataset as JSON, CSV or Excel. `report.html` in the key-value store holds the human summary.

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your areas

Type them the way Swedes do — `Sverige`, `Stockholms län`, `Motala kommun`. All 290 municipalities and all 21 counties resolve by name, and the log prints the exact match it picked, area id included, so nothing is silently guessed. For an area finer than a municipality (a district like Vasastan), or for byte-exact control, paste the address of the Booli search you built in your browser into **Search URLs** — the area, the surface (till salu or slutpriser) and the property type ride in the URL.

#### Step 2: Pick the surface and the filters

`operation` decides the question: **Property Search** for homes on the market, **Sold Prices (Slutpriser)** for what they actually went for. Then narrow by property type, price band, rooms, living area, new construction, or "coming to market" only. Filtered-out results cost nothing.

#### Step 3: Press Start, then export

The run pages Booli until your `maxResults` budget is hit or the search runs out. Download the dataset, or hand the API example below to your pipeline.

### 📥 Input Configuration

| Field | Type | Default | What it does |
|---|---|---|---|
| 🎯 Operation | select | 🔍 Property Search | Property Search or Sold Prices (Slutpriser) |
| 📍 Areas in Sweden | list | *(empty = all Sweden)* | Free-text area names, Booli area ids, or a mix; each resolves against Booli's own suggestions |
| 🌐 Booli search URLs | list | *(empty)* | Pasted booli.se search addresses, read verbatim — page numbers in them are ignored |
| 🏠 Property types | multi-select | *(all)* | Booli's own six values: Lägenhet, Villa, Kedjehus-Parhus-Radhus, Fritidshus, Gård, Tomt/Mark |
| 🔢 Max results | integer | 100 | Whole-run budget across all areas |
| 💵 Min / 💰 Max price (kr) | integer | 0 | Asking price on search rows, final price on sold rows |
| 🛏️ Min / 🚪 Max rooms | integer | 0 | Results stating no room count are dropped while a bound is set |
| 📐 Min / 📏 Max living area (m²) | integer | 0 | Same rule as rooms |
| 🏗️ Only new construction | boolean | off | Booli's own nyproduktion flag |
| ⏳ Only coming to market | boolean | off | Booli's snart till salu flag — the pre-market backlog |

### 📤 Output

Every row carries the fields below (empty rather than guessed when Booli does not publish a value). The exact set is declared in the actor's dataset schema, so the Output tab renders typed, sortable columns.

| Field | Type | On which rows | Meaning |
|---|---|---|---|
| `booliId` | string | all | Booli's own id — stable join key |
| `url` | string | all | The listing's Booli address |
| `streetAddress` | string | all | Street address as Booli shows it |
| `objectType` | string | all | Lägenhet, Villa, Radhus, Fritidshus, Gård, Tomt, … |
| `listPrice` / `listPriceText` | number / string | all | Asking price (number + display string) |
| `soldPrice` / `soldPriceText` | number / string | sold | Final registered price |
| `soldPriceDiffPct` / `soldPriceDiffText` | number / string | sold | Sold vs asking, e.g. −8.3 |
| `soldPriceType` | string | sold | How the price arose — Sista bud, Slutpris, … verbatim |
| `soldDate` | date | sold | Registration date |
| `listSqmPrice` | number | most | Price per m² |
| `listPriceDiffPct` | number | search | Booli's asking-price change flag |
| `estimatePrice` | number | search | Booli Värdering, where the listing carries one |
| `rooms`, `livingArea`, `additionalArea`, `plotArea` | number | all | The facts on the card |
| `rent` | number | apartments | Monthly fee (avgift) |
| `tenureForm` | string | all | Äganderätt, Bostadsrätt, … |
| `isNewConstruction`, `upcomingSale`, `biddingOpen` | boolean | search | Booli's own flags |
| `publishedAt`, `daysActive` | date / number | search | Market freshness |
| `nextShowing` | string | search | Next viewing, as Booli words it |
| `descriptiveAreaName`, `municipality` | string | all | Where it is |
| `latitude`, `longitude` | number | all | Coordinates |
| `agencyName`, `agencyUrl`, `agencyThumbnail` | string | search | The agency behind the listing |
| `amenities`, `thumbnailUrl`, `photoCount` | array / string / number | all | Card facts |
| `searchedLocation`, `searchUrl` | string | all | Which of your inputs produced the row |

### 💼 Use Cases & Examples

#### 1. Sold-price comps and valuation

Sold Prices for a municipality puts final price against asking price on every row: the uplift percentage Swedish valuation actually runs on. Median it by property type and you have a comps engine, not a scrape.

#### 2. Asking-price market studies

Price per square metre, stock mix across property types, fee burden per apartment — one run per area, coordinates included, ready for the pivot table.

#### 3. Pre-market sourcing

"Only coming to market" turns Booli's snart till salu backlog into a feed: supply before the bidding, on a schedule, and billed per row.

#### 4. Agency lead generation

Group a municipality by `agencyName` and you can see who holds the stock and where: the shortlist a brokerage scout or a prop-tech sales team actually works from.

#### 5. New-listing monitoring

Schedule an area, keep the `booliId`s you have seen, and yesterday's diff is today's run. `publishedAt` and `daysActive` do the dating for you.

#### 6. Price-cut and bid tracking

`listPriceDiffPct` and `biddingOpen` come straight off Booli's cards. Those are the two signals buyers wait for, and you never hold your own price history to compute them.

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { Actor } from 'apify';

const run = await Actor.call('sian.agency/booli-property-scraper', {
    operation: 'sold',
    locations: ['Motala kommun'],
    objectTypes: ['Villa'],
    maxResults: 200,
}, { memoryMbytes: 512, budgetUsd: 0.5 });

const { items } = await Actor.dataset(run.defaultDatasetId).getData();
for (const row of items) {
    console.log(row.streetAddress, row.soldPrice, 'vs asking', row.listPrice, `(${row.soldPriceDiffPct}%)`);
}
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("sian.agency/booli-property-scraper").call(run_input={
    "operation": "search",
    "locations": ["Vasastan, Stockholm"],
    "objectTypes": ["Lägenhet"],
    "maxPrice": 6000000,
    "maxResults": 300,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["streetAddress"], item["listPrice"], item["rent"], item["agencyName"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~booli-property-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "operation": "sold",
    "locations": ["Motala kommun", "Vasastan, Stockholm"],
    "objectTypes": ["Lägenhet", "Villa"],
    "maxResults": 200
  }'
```

#### Automation Workflows (N8N / Zapier / Make)

This actor is an Apify actor, so it plugs into any automation platform that can call an HTTP API:

- **N8N** — use the Apify node (or an HTTP Request node against the Run Actor endpoint above) to schedule area sweeps and pipe rows into Google Sheets, Airtable or a database.
- **Zapier / Make** — trigger on a schedule, run the actor, iterate the dataset items, route each row wherever your business needs it.
- **Cron + API** — the run-sync-get-dataset-items endpoint returns the dataset inline, so a scheduled curl is a complete pipeline.

### 📊 Performance & Pricing

Measured on the live portal: 35 results per page, roughly 1.5–3 s per page, prices and facts read from the structured data Booli embeds in its own pages.

#### FREE Tier (Try It Now)

- 25 results per run, every operation available
- Same data quality as paid — nothing held back

#### PAID Tier (Production Ready)

- **$2.99 per 1,000 results** on the Bronze tier, falling to $2.63 at Gold
- **$0.005 per run start**, a fraction of a cent per scheduled run
- Per-result billing: a filtered-out or unmatched input costs nothing

| Volume | Approximate cost |
|---:|---:|
| 1,000 results | ~$0.003 |
| 10,000 results | ~$0.03 |
| 100,000 results | ~$0.30 (Gold rates below that) |

### ❓ FAQ

**Do I need a proxy or an unlocker key for this?**

No. Booli.se blocks plain datacentre requests, and the actor handles the route itself, the same way a browser in Sweden gets the pages. There is no proxy setting because which proxy to use is our cost decision, not something you should have to know.

**Will the Swedish text and prices come through correctly?**

Yes. The actor reads the structured data Booli embeds in its own pages, so prices arrive as numbers in kronor, dates as dates, and every Swedish name — areas, agencies, streets — arrives exactly as Booli publishes it.

**What areas can I search?**

Every municipality and county in Sweden resolves by name, and numeric area ids cover whatever finer area you need. For a district, or for exact control, paste a Booli search address into Search URLs — the log shows the exact match for every name.

**What is the difference between the two operations?**

Property Search reads homes currently for sale: asking price, facts, agency and Booli's estimate. Sold Prices reads the slutpriser archive: final registered prices with the asking price and the percentage between them, built on lagfarter from Lantmäteriet. Same areas, same row budget, two different questions.

**How many results can one search return?**

Booli serves 35 results per page and keeps paging while the search has more; the all-Sweden listing search alone covers tens of thousands of homes. For national work, split by area or property type. Each is its own search with its own budget.

**Are sold prices for every sale in Sweden?**

No. The archive covers sales with a registered deed (lagfart) published through Lantmäteriet. That is the great majority of arm's-length sales, but not every transfer, and the newest registrations lag completion by a few weeks.

**What does the Booli estimate field contain?**

Booli's automated valuation (Booli Värdering) on the listings that carry one. Where Booli shows none, the field stays empty rather than guessed.

**Can I get the full advert text and every photo?**

Not in this version. The rows carry what Booli's search pages carry, including the first photos. Full advert text and complete photo sets are a natural next operation; ask and it moves up the roadmap.

### 🛠️ Troubleshooting

| Symptom | Fix |
|---|---|
| "matched no area in Booli's own suggestions" | Check the spelling, or go one level broader — the municipality rather than the district. A pasted search URL always works. |
| A run returns fewer rows than you asked for | The row budget, the FREE-tier cap or your own filters stopped it. The log names which one, on every page. |
| "Booli.se declined the request" on an input | The site throttled that moment. Re-run the input; it already retried five times before giving up. |
| A row has an empty field | Booli does not publish that value for that property (plots carry no living area, sold rows carry no agency). Empty means unknown, never zero. |
| Rows missing after filtering | Filters never bill and never save a row they exclude — lower the bound to see them again. |

### ⚖️ Legal

Booli and booli.se are trademarks of Booli Search Technologies AB (SBAB). This actor is not affiliated with, endorsed by, or sponsored by Booli, SBAB or Lantmäteriet. It reads publicly available listing data at run time; prices, photos and listing text belong to the agency or owner who published them, and a listing can be edited or withdrawn by its author at any time. Sold prices build on registered deeds (lagfarter) that Booli attributes to Lantmäteriet.

### 💬 Support

- 🐛 Issues and feature requests: [Issues tab](https://apify.com/sian.agency/booli-property-scraper/issues)
- ⭐ If the actor saved you an afternoon: [leave a 5-star review](https://apify.com/sian.agency/booli-property-scraper/reviews)
- 🏠 More SIÁN scrapers: [sian.agency on Apify](https://apify.com/sian.agency?fpr=sian)

### 🔗 More SIÁN scrapers

- [Hemnet Scraper](https://apify.com/sian.agency/hemnet-property-scraper?fpr=sian): Sweden's market leader, asking and sold prices with broker contacts
- [Boligsiden Scraper](https://apify.com/sian.agency/boligsiden-property-scraper?fpr=sian): Denmark, listing and sold prices
- [Finn.no Scraper](https://apify.com/sian.agency/finn-no-property-scraper?fpr=sian): Norway's property market

⭐ **Using Booli Scraper?** [Leave a 5-star review](https://apify.com/sian.agency/booli-property-scraper/reviews) — it keeps the actor maintained. Bugs or feature ideas? Open an issue on the [Issues tab](https://apify.com/sian.agency/booli-property-scraper/issues).

# Actor input Schema

## `operation` (type: `string`):

Pick one per run. Property Search walks Booli.se's own listing pages for any Swedish area and returns 35 homes per page with asking price, area, rooms, fee, agency and Booli's own price estimate; Sold Prices reads the slutpriser archive the same way and returns 35 final sale prices per page, each with the asking price and the percentage between the two.

## `locations` (type: `array`):

Where to search, one area per line. All 290 Swedish municipalities and all 21 counties resolve by name, in Swedish or English (Motala kommun, Stockholm), plus Booli's own numeric area id (77104 = all Sweden). Leave empty to read all of Sweden. For a finer area than a municipality, or to control the search exactly, paste the Booli search address into Search URLs instead.

## `searchUrls` (type: `array`):

Paste Booli search addresses instead of filling the form, e.g. https://www.booli.se/sok/till-salu?areaIds=880 or https://www.booli.se/sok/slutpriser?areaIds=77104\&objectType=Villa. Build the search on booli.se, copy the address bar, and the area, property type and sale-or-sold surface in it are read straight off the URL. A page number in the address is ignored; the run starts at page one and pages forward on its own.

## `objectTypes` (type: `array`):

Which kinds of home to keep. Leave empty to take every type. The values are Booli's own property-type filter, so the list is exactly what the site offers: apartments, houses, terraced and linked houses, holiday homes, farms and plots/land.

## `maxResults` (type: `integer`):

Stop after this many results across the whole run, not per area. One page carries 35 results, so a run ends on the first page that crosses your limit.

## `minPrice` (type: `integer`):

Keep only results priced at or above this, in kronor. 0 means no lower bound. On Sold Prices this is the final registered price.

## `maxPrice` (type: `integer`):

Keep only results priced at or below this, in kronor. 0 means no upper bound.

## `minRooms` (type: `integer`):

Keep only homes with at least this many rooms. 0 means no minimum. Results that state no room count are dropped while this bound is set — Booli does not publish rooms for every object type.

## `maxRooms` (type: `integer`):

Keep only homes with at most this many rooms. 0 means no maximum.

## `minLivingArea` (type: `integer`):

Keep only homes with a living area of at least this many square metres. 0 means no minimum. Plots and homes that state no living area are dropped while this bound is set.

## `maxLivingArea` (type: `integer`):

Keep only homes with a living area of at most this many square metres. 0 means no maximum.

## `onlyNewConstruction` (type: `boolean`):

Keep only homes Booli itself flags as new construction (nyproduktion).

## `onlyUpcomingSale` (type: `boolean`):

Keep only listings marked snart till salu — homes that are coming to market but not formally for sale yet. Sweden's largest such backlog sits on Booli, and this is the only surface that exposes it as a filter.

## Actor input object example

```json
{
  "operation": "search",
  "locations": [],
  "searchUrls": [],
  "objectTypes": [],
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minLivingArea": 0,
  "maxLivingArea": 0,
  "onlyNewConstruction": false,
  "onlyUpcomingSale": false
}
```

# Actor output Schema

## `booliSeResults` (type: `string`):

Every home-for-sale listing or sold-price record this run returned, one row per result.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# 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 = {
    "operation": "search",
    "locations": [],
    "searchUrls": [],
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "minLivingArea": 0,
    "maxLivingArea": 0,
    "onlyNewConstruction": false,
    "onlyUpcomingSale": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/booli-property-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 = {
    "operation": "search",
    "locations": [],
    "searchUrls": [],
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "minLivingArea": 0,
    "maxLivingArea": 0,
    "onlyNewConstruction": False,
    "onlyUpcomingSale": False,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/booli-property-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 '{
  "operation": "search",
  "locations": [],
  "searchUrls": [],
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minLivingArea": 0,
  "maxLivingArea": 0,
  "onlyNewConstruction": false,
  "onlyUpcomingSale": false
}' |
apify call sian.agency/booli-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/booli-property-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/U9VjPF3fC792oGxGI/builds/mOAYprdUYgNLlKABw/openapi.json
