# Bakeca Property Scraper (`sian.agency/bakeca-property-scraper`) Actor

Scrape Bakeca.it housing ads across 107 Italian provinces: rooms, rentals, homes for sale, land and commercial. Price, m², GPS, private or agency, phone.

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

## Pricing

from $1.32 / 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?

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

## Bakeca Scraper: Italian Rooms, Rentals & Homes for Sale 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Immobiliare.it Scraper](https://img.shields.io/badge/Store-Immobiliare.it%20Scraper-1AE392)](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian) [![Smart Idealista Scraper](https://img.shields.io/badge/Store-Smart%20Idealista%20Scraper-E60023)](https://apify.com/sian.agency/smart-idealista-scraper?fpr=sian) [![Fotocasa Scraper](https://img.shields.io/badge/Store-Fotocasa%20Scraper-1AE392)](https://apify.com/sian.agency/fotocasa-property-scraper?fpr=sian)

#### 🎉 Every Bakeca housing ad in 107 Italian provinces, with price, m², GPS and private or agency on each row

##### For room hunters, landlords, agencies and analysts who need Italy's classifieds housing stock as a spreadsheet

***

### 🔎 What is the Bakeca Scraper — and when should you use it?

The **Bakeca Scraper** turns public Bakeca.it housing ads from any of Italy's 107 Bakeca provinces 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:** Italian rooms, homes for rent, homes for sale, holiday homes, shops, garages, warehouses and land as rows. Every search row carries the price in euros, floor area, property type, town, province, GPS and whether a private owner or an agency posted it. Open each ad in full and you also get the phone number where the ad shows one, the full text, every photo, district, furnishing, energy class and publish date.

**Use something else when:** you want the big Italian property portals rather than classifieds ads. Use [Immobiliare.it Scraper](https://apify.com/sian.agency/immobiliare-property-scraper?fpr=sian) for Immobiliare.it agency listings with full detail. Use [Smart Idealista Scraper](https://apify.com/sian.agency/smart-idealista-scraper?fpr=sian) for Idealista in Italy, Spain and Portugal. This actor reads Bakeca's housing section only, for live ads. Jobs, cars and Bakeca's other sections are not covered, and sold prices are not returned.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/bakeca-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 rooms, rentals and homes for sale from Bakeca.it in Italy using the Apify Actor `sian.agency/bakeca-property-scraper`.

Use it when I need: Italian rooms, homes for rent, homes for sale, holiday homes, shops, garages, warehouses and land as rows. Every search row carries the price in euros, floor area, property type, town, province, GPS and whether a private owner or an agency posted it. Open each ad in full and you also get the phone number where the ad shows one, the full text, every photo, district, furnishing, energy class and publish date.

Don't use it when: you want the big Italian property portals rather than classifieds ads — use immobiliare-property-scraper or smart-idealista-scraper instead.

How to call it: set `city` to a Bakeca province such as `milano`, `roma`, `torino` or `bologna` (or `italia` for the whole country), `category` to `rent`, `sale`, `rooms`, `holiday`, `commercial`, `garages`, `warehouses` or `land`, and optionally `town` (a town inside that province) and `sellerType` (`any`, `private` or `agency`). `maxResults` sets how many ads come back. `includeDetails` opens each ad for the phone, full text and every photo, for an extra charge per ad. `searchUrls` takes Bakeca results pages as [{"url": ...}] objects. To expand ads you already have, set `operation` to `detail` and pass `listingUrls`.

Start with this input:
{
  "operation": "search",
  "city": "milano",
  "category": "rooms",
  "sellerType": "private",
  "maxResults": 50,
  "includeDetails": false
}

Ask me which province or town to cover, and whether I want rooms, homes for rent or homes for sale, then run the Actor and summarise the results as a table.
```

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

- *List private rooms for rent in Milano with the monthly rent and the district.*
- *Build a price-per-m² table of homes for sale in Guidonia Montecelio.*
- *Find agency-listed flats for rent in Torino with the agency's phone number.*

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

### 📋 Overview

**Bakeca.it is where Italians post rooms, flats and houses themselves.** This actor turns its housing section into clean rows: rooms and beds, homes for rent, homes for sale, holiday homes, shops, garages, warehouses and land.

**What you get:**

- ✅ **Rooms and private landlords**: 44% to 65% of Bakeca's room ads in Milano, Roma and Torino come from private owners, by Bakeca's own counts
- ⚡ **25 ads per results page**: price, floor area, type, town, GPS, photo and advertiser come back on every search row
- 🎯 **Filters checked on real rows**: private-only and agency-only searches returned 30 of 30 and 10 of 10 matching ads in our tests
- 💰 **Pay per ad**: $1.50 per 1,000 ads on the Starter plan, and an ad is billed once per run even when it repeats
- 💎 **Full ad on demand**: one switch adds the phone number where the ad shows one, the full text, every photo, district, furnishing and energy class
- ✨ **NEW**: all 107 Bakeca provinces plus an All of Italy search in one dropdown

***

### ✨ Features

- 🏘️ **Eight housing sections**: rooms and beds, homes for rent, homes for sale, holiday homes, shops and offices, garages, warehouses and land
- 📍 **107 provinces or the whole country**: pick Milano, Roma, Torino, Bologna, Napoli or any other Bakeca province, or All of Italy
- 🏡 **Town filter**: narrow a province to one town, such as Sesto San Giovanni in Milano or Guidonia Montecelio in Roma
- 🙋 **Private or agency**: use Bakeca's own advertiser filter, and read the advertiser type on every row either way
- 📐 **Price per m²**: worked out on every row that has both a price and a floor area
- 📞 **Phone numbers**: in the full ad, whenever the advertiser shows one
- 🔗 **Paste any results page**: districts, furnished-only lists or a Bakeca keyword search all work as input
- 🔁 **No double billing**: premium ads that repeat on every page are kept and charged once

***

### 🎬 Quick Start

Pick a province and a section, press Start, and the ads land in your dataset. A bare run with no input returns 50 homes for rent in the Milano province. Turn on the full ad when you need phones and the complete description.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~bakeca-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"city": "milano", "category": "rooms", "sellerType": "private", "maxResults": 50}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Pick where

Choose a province from the list, or All of Italy. Type a town if you only want one.

#### Step 2: Pick what

Choose the section (rooms, homes for rent, homes for sale and so on) and, if you like, private owners or agencies only.

#### Step 3: Run and export

Set how many ads you want and press Start. Download the result as JSON, CSV or Excel.

**That's it! In about a minute, you'll have:**

- Prices in euros with floor area and price per m²
- Town, province and GPS for every ad
- Private or agency on every row, with the agency's name and storefront link

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` (default) reads results pages, `detail` opens ads you paste |
| `city` | string | No | Bakeca province, such as `milano`, `roma`, `torino`, or `italia` for the whole country |
| `category` | string | No | `rent`, `sale`, `rooms`, `holiday`, `commercial`, `garages`, `warehouses` or `land` |
| `town` | string | No | One town inside the province, written as Bakeca writes it |
| `sellerType` | string | No | `any`, `private` or `agency` |
| `maxResults` | integer | No | How many ads to return (default 50, one results page holds 25) |
| `includeDetails` | boolean | No | Open each ad for phone, full text, every photo and more (billed per ad) |
| `searchUrls` | array | No | Bakeca results pages to read instead of the fields above |
| `listingUrls` | array | No | Bakeca ad pages for the `detail` operation |

**Example: private rooms in Milano with phones**

```json
{
  "city": "milano",
  "category": "rooms",
  "sellerType": "private",
  "maxResults": 100,
  "includeDetails": true
}
```

**Example: homes for sale in one town**

```json
{
  "city": "roma",
  "category": "sale",
  "town": "Guidonia Montecelio",
  "maxResults": 200
}
```

**Example: paste results pages**

```json
{
  "searchUrls": [
    { "url": "https://milano.bakeca.it/annunci/offro-camera/quartiere/bocconi-ticinese/" },
    { "url": "https://milano.bakeca.it/annunci/offro-camera/?keyword=stanza+singola" }
  ],
  "maxResults": 100
}
```

**Example: open ads you already have**

```json
{
  "operation": "detail",
  "listingUrls": [
    { "url": "https://roma.bakeca.it/dettaglio/vendita-case/villetta-a-schiera-di-210-msup2-con-4-locali-e-box-auto-in-vendita-a-guidonia-montecelio-dixm290554868" }
  ]
}
```

Sorted results pages are not supported. Leave the sort order on Bakeca's default when you copy a results address.

***

### 📤 Output

Results are saved to the Apify dataset with **40 fields**, including:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Bakeca's ad ID, stable across runs |
| `listingUrl` | string | Link to the ad |
| `propertyTitle` | string | The ad's title |
| `section` | string | `rent`, `sale`, `rooms`, `holiday`, `commercial`, `garages`, `warehouses` or `land` |
| `propertyType` | string | Monolocale, Bilocale, Villa, Negozio and so on |
| `price` | number | Price in euros: monthly for rents and rooms, asking price for sales |
| `sizeSqm` | number | Floor or plot area in m² |
| `pricePerSqm` | number | Price divided by area |
| `town` / `province` | string | Where the property is |
| `latitude` / `longitude` | number | GPS position from the ad |
| `advertiserType` | string | `private` or `agency` |
| `advertiserName` / `advertiserUrl` | string | Who posted it and their Bakeca storefront |
| `phone` | string | Advertiser's phone, full ad only, when shown |
| `district` / `furnishing` / `energyClass` | string | From the full ad |
| `publishedDate` | string | Publish date from the full ad (YYYY-MM-DD) |
| `imageUrls` / `photoCount` | array / integer | Photo links and how many there are |
| `summaryText` / `descriptionText` | string | Card summary, and the full text when the ad is opened |

**Example: a search row**

```json
{
  "listingId": "nep8299550422",
  "listingUrl": "https://milano.bakeca.it/dettaglio/offro-casa/appartamento-di-50-msup2-con-2-locali-in-affitto-a-milano-nep8299550422",
  "propertyTitle": "Appartamento di 50 m² con 2 locali in affitto a Milano",
  "section": "rent",
  "sectionName": "Offro casa in affitto",
  "price": 1400,
  "currency": "EUR",
  "sizeSqm": 50,
  "propertyType": "Bilocale",
  "pricePerSqm": 28,
  "town": "Milano",
  "province": "Milano",
  "latitude": 45.4733,
  "longitude": 9.1872,
  "advertiserType": "agency",
  "advertiserName": "Dove.it",
  "advertiserUrl": "https://milano.bakeca.it/vetrina/immobiliare/doveit55729/",
  "photoCount": 19,
  "isPremium": true,
  "thumbnail": "https://static.bakeca.it/immagini/67a/offro-casa-in-affitto-milano-appartamento-di-50-msup2-67a5647404e851f6c42772432bcc92j4.jpg",
  "summaryText": "A Milano, nel cuore di Brera in via Solferino 3, proponiamo in affitto questo appartamento bilocale/ loft di 50 mq …",
  "searchUrl": "https://milano.bakeca.it/annunci/offro-casa/",
  "searchPage": 1,
  "hasDetail": false,
  "status": "success"
}
```

**Example: a row with the full ad opened**

```json
{
  "listingId": "dixm290554868",
  "propertyTitle": "Villetta a schiera di 210 m² con 4 locali e box auto in vendita a Guidonia Montecelio",
  "section": "sale",
  "price": 410000,
  "currency": "EUR",
  "propertyType": "Villa",
  "sizeSqm": 210,
  "pricePerSqm": 1952.38,
  "town": "Guidonia Montecelio",
  "district": "Setteville Nord",
  "furnishing": "Parzialmente arredato",
  "energyClass": "G (Legge 90/2013), IPE 175.00 KWh/m² anno",
  "publishedDate": "2026-10-01",
  "advertiserType": "agency",
  "advertiserName": "Dove.it",
  "phone": "3272074613",
  "advertiserSince": "2019-10-07",
  "advertiserActiveAds": 2145,
  "photoCount": 20,
  "imageUrls": ["https://static.bakeca.it/immagini/d67/case-in-vendita-guidonia-montecelio-villetta-a-schiera-di-d67e0d95337db8822be76e936c3778j9.jpg"],
  "descriptionText": "[Rif. DV-8290] Nella tranquilla località di Marco Simone, poco distante da Guidonia Montecelio …",
  "hasDetail": true,
  "status": "success"
}
```

Each run also writes a `report.html` summary to the run's key-value store, with your rows, anything that needs a fix and what you were charged.

***

### 💼 Use Cases & Examples

#### 1. Student room rents near universities

**Housing offices and student unions map room prices around Politecnico, Bicocca or Bologna's university district.**

**Input:** `city` milano, `category` rooms
**Output:** Monthly rent, town, GPS and private or agency for every room ad
**Use:** A rent map of single and double rooms by neighbourhood, refreshed every week

#### 2. Private landlord leads

**Property managers and rental agencies find owners who list rooms and flats themselves.**

**Input:** `sellerType` private, `includeDetails` true
**Output:** Private ads with the phone number where the owner shows one
**Use:** A call list of landlords who may want help letting or managing their property

#### 3. Rental and sale price tracking

**Analysts and investors schedule the same province and section daily.**

**Input:** One province and section on an Apify schedule
**Output:** Stable ad IDs with price and floor area
**Use:** Spot new ads, price cuts and removed ads as a daily diff

#### 4. Agency market share

**Agencies and franchise networks see who advertises where.**

**Input:** `sellerType` agency, a province, `includeDetails` true
**Output:** Agency name, storefront link, office address, years on Bakeca and number of live ads
**Use:** Rank competitors by stock in each town

#### 5. Short lets and transitory rentals

**Relocation services and corporate housing teams find flats let by the month.**

**Input:** `category` rent, then filter `summaryText` for "transitorio" or "brevi periodi"
**Output:** Transitory and short-stay flats, often posted by short-let operators
**Use:** A shortlist of furnished flats for staff on 3 to 12 month assignments

#### 6. Land, garages and commercial space

**Investors and developers look past flats.**

**Input:** `category` land, garages, warehouses or commercial
**Output:** The same row shape with price, area and town
**Use:** Price per m² of building land or shop space across a province

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/bakeca-property-scraper').call({
  city: 'bologna',
  category: 'rooms',
  sellerType: 'private',
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/bakeca-property-scraper').call(
    run_input={
        'city': 'roma',
        'category': 'sale',
        'town': 'Guidonia Montecelio',
        'maxResults': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item.get('price'), item.get('sizeSqm'), item['listingUrl'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~bakeca-property-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "detail", "listingUrls": [{"url": "https://milano.bakeca.it/dettaglio/offro-camera/singola-con-bagno-in-comune-per-universitari-zona-politecnico-vd6a281659042"}]}'
```

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

1. **Trigger**: a daily schedule, or a webhook from your CRM
2. **HTTP Request**: call the actor's run endpoint with your province and section
3. **Process**: read the dataset items as JSON
4. **Action**: add new ads to Google Sheets, Airtable or your CRM, or send an alert on price drops

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 ads** per run, every field included
- No credit card required
- Good for checking a province or section before a bigger run

#### PAID Tier (Production Ready)

- Up to **10,000** ads per run (the "Properties to collect" limit)
- Pay per ad returned: $1.50 per 1,000 ads on the Starter plan, less on higher Apify plans
- The full ad is an optional extra at $3 per 1,000, charged only when you switch it on

💰 **Only ads you receive are charged.** A search that matches nothing, an ad from another town or of the other advertiser type, a repeated premium ad and an ad page that no longer exists cost nothing.

🔗 [View current pricing](https://apify.com/sian.agency/bakeca-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions

**Q: Which parts of Bakeca does it cover?**
A: The whole housing section: rooms, homes for rent, homes for sale, holiday homes, shops and offices, garages, warehouses and land. That is all 107 Bakeca provinces, or Italy at once. Jobs, cars and Bakeca's other sections are not included.

**Q: Do I get phone numbers?**
A: Yes, with "Open each ad in full", whenever the advertiser shows a number on the ad. Many private ads do, and some only accept messages through Bakeca.

**Q: How do I tell private owners from agencies?**
A: Every row has `advertiserType` set to `private` or `agency`, taken from the ad itself. You can also let Bakeca filter it with the Advertiser field.

**Q: Why is a price missing on some rows?**
A: Some ads show 1 € or "Trattativa riservata" and give the real figure in the text. Those rows leave `price` empty rather than carry a made-up number.

**Q: Can I search one district?**
A: Yes. Open the district on bakeca.it, for example Bocconi-Ticinese in Milano, and paste the results address into Search page URLs.

**Q: How many ads can I get?**
A: FREE accounts get 25 per run. Paid accounts can ask for up to 10,000 per run. A province's section usually holds a few hundred to a few thousand ads.

**Q: How fresh is the data?**
A: Every run reads the live site. Nothing is cached between runs.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, straight from the Apify dataset.

***

### 🐛 Troubleshooting

**A town search returns nothing**

- Check the town is spelled the way Bakeca spells it, for example "Sesto San Giovanni"
- Make sure the town is inside the province you picked

**A pasted URL is skipped**

- Paste a housing results page, such as https://milano.bakeca.it/annunci/offro-camera/ , not an ad page or the home page
- Remove any sorting from the address, because sorted pages are not supported

**Fewer rows than "Properties to collect"**

- The search ran out of ads, or the FREE tier stopped at 25
- With a town set, premium ads from other towns are skipped and not billed

**A page failed to load**

- This is nearly always temporary. Run the same input again a few minutes later. Failed pages are never charged

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Bakeca is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Bakeca.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [actor's Issues tab](https://apify.com/sian.agency/bakeca-property-scraper/issues)
- Check the [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/bakeca-property-scraper/changelog.md

# Actor input Schema

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

Property Search reads Bakeca results pages. Property Detail opens the ad addresses you paste in Ad URLs.

## `city` (type: `string`):

The Bakeca province to search. Each one covers its whole province, the capital and the surrounding towns. All of Italy reads the national results.

## `category` (type: `string`):

Which Bakeca housing section to read. Rooms covers single and double rooms and beds in shared flats.

## `town` (type: `string`):

A town inside the province, written as Bakeca writes it, for example Sesto San Giovanni in Milano or Guidonia Montecelio in Roma. Leave empty for the whole province. Ads from other towns are skipped and never billed.

## `sellerType` (type: `string`):

Bakeca's own private or agency filter. Each row also carries the advertiser type, so you can split them afterwards.

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

How many ads to return. One results page holds 25. Free accounts stop at 25.

## `includeDetails` (type: `boolean`):

Opens every ad for the full description, every photo, the phone number where the ad shows one, district, furnishing, energy class, publish date and the advertiser's profile. Billed as one Property Detail on top of the search row.

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

Paste Bakeca results pages instead of using the fields above, for example https://milano.bakeca.it/annunci/offro-camera/quartiere/bocconi-ticinese/ . One URL per line. Sorted result pages are not supported.

## `listingUrls` (type: `array`):

For Property Detail: Bakeca ad addresses, for example https://milano.bakeca.it/dettaglio/offro-camera/singola-con-bagno-in-comune-per-universitari-zona-politecnico-vd6a281659042 . One per line.

## Actor input object example

```json
{
  "operation": "search",
  "city": "milano",
  "category": "rent",
  "sellerType": "any",
  "maxResults": 50,
  "includeDetails": false
}
```

# Actor output Schema

## `bakecaProperties` (type: `string`):

Every property this run returned.

## `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",
    "city": "milano",
    "category": "rent",
    "sellerType": "any",
    "maxResults": 50,
    "includeDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/bakeca-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",
    "city": "milano",
    "category": "rent",
    "sellerType": "any",
    "maxResults": 50,
    "includeDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/bakeca-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",
  "city": "milano",
  "category": "rent",
  "sellerType": "any",
  "maxResults": 50,
  "includeDetails": false
}' |
apify call sian.agency/bakeca-property-scraper --silent --output-dataset

```

## MCP server setup

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