# Flatfox Scraper - Swiss Rentals, Flatshares & Property Listings (`sian.agency/flatfox-property-scraper`) Actor

Scrape flatfox.ch rentals, flatshares and sales across Switzerland: CHF net and gross rent, rooms, m², move-in date, GPS, photos, floor plans and agency.

- **URL**: https://apify.com/sian.agency/flatfox-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 $1.06 / 1,000 property listings

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

## Flatfox Scraper - Swiss Rentals, Flatshares & Property Listings 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![ImmoScout24.ch Scraper](https://img.shields.io/badge/Store-ImmoScout24.ch%20Scraper-1AE392)](https://apify.com/sian.agency/immoscout24-ch-property-scraper?fpr=sian) [![ImmobilienScout24 Scraper](https://img.shields.io/badge/Store-ImmobilienScout24%20Scraper-1AE392)](https://apify.com/sian.agency/immobilienscout24-property-scraper?fpr=sian) [![Willhaben Property Scraper](https://img.shields.io/badge/Store-Willhaben%20Property%20Scraper-1AE392)](https://apify.com/sian.agency/willhaben-property-scraper?fpr=sian)

#### 🎉 Flatfox listings for any Swiss town, with the rent split, floor plans and move-in date on every row

##### For relocation agents, rental analysts, property managers and anyone hunting a flat in Zürich, Geneva, Bern or Lausanne

***

### 🔎 What is the Flatfox Swiss Property Scraper — and when should you use it?

The **Flatfox Swiss Property Scraper** turns public Flatfox rentals, flatshare rooms and property for sale anywhere in Switzerland 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:** Swiss rental and sale listings from Flatfox as rows. Each rental carries the gross rent and, when published, the net rent and the service charges as separate numbers. Size and layout follow: rooms in Swiss halves, living and usable space, floor, year built and renovated. Every row has the move-in date, the amenities the advertiser ticked, the street address, GPS coordinates, every photo and any attached floor plans. It also names the managing agency with its postal address. Listings that also went to ImmoScout24.ch or Homegate carry the ID they had there, and Flatfox-first listings carry the date their Flatfox-only period ends.

**Use something else when:** the property is outside Switzerland, or the buyer wants ImmoScout24.ch's own record. Use [ImmoScout24.ch Scraper](https://apify.com/sian.agency/immoscout24-ch-property-scraper?fpr=sian) for Switzerland's largest portal, with building-register IDs and the agency's legal entity. Use [ImmobilienScout24 Scraper](https://apify.com/sian.agency/immobilienscout24-property-scraper?fpr=sian) for German rentals and sales. Use [Willhaben Property Scraper](https://apify.com/sian.agency/willhaben-property-scraper?fpr=sian) for Austrian rentals and sales. This actor covers what Flatfox publishes: apartments, houses, flatshare rooms, offices and shops, parking, hobby rooms and building land in Switzerland, to rent or to buy. Flatfox is mainly a rental site, with about 1,900 sale listings against 33,900 rentals. It does not publish phone numbers or e-mail addresses, and it shows only what is currently advertised, so there is no let or sold history.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/flatfox-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 Swiss rental and property listings from Flatfox using the Apify Actor `sian.agency/flatfox-property-scraper`.

Use it when I need: Swiss rental and sale listings from Flatfox as rows. Each rental carries the gross rent and, when published, the net rent and the service charges as separate numbers. Size and layout follow: rooms in Swiss halves, living and usable space, floor, year built and renovated. Every row has the move-in date, the amenities the advertiser ticked, the street address, GPS coordinates, every photo and any attached floor plans. It also names the managing agency with its postal address. Listings that also went to ImmoScout24.ch or Homegate carry the ID they had there, and Flatfox-first listings carry the date their Flatfox-only period ends.

Don't use it when: the property is outside Switzerland, or the buyer wants ImmoScout24.ch's own record — use immoscout24-ch-property-scraper or immobilienscout24-property-scraper or willhaben-property-scraper instead.

How to call it: put Swiss towns or 4-digit postcodes in `locations`, in German, French, Italian or English, or leave it empty for all of Switzerland. A name the actor cannot match stops the run before anything is charged. Set `dealType` to `rent` or `sale` and `propertyType` to `residential`, `apartment`, `house`, `flatshare`, `commercial`, `parking`, `land`, `hobby-storage` or `any`. Narrow with `minPrice`/`maxPrice` in CHF, `minRooms`/`maxRooms`, `minSpace`/`maxSpace`, `furnishedOnly`, `temporaryOnly` and `amenities` (every picked feature must be present). Listings come newest first up to `maxResults`. To fetch listings you already have, pass their links in `listingUrls` instead.

Start with this input:
{
  "locations": [
    "Zürich"
  ],
  "dealType": "rent",
  "propertyType": "apartment",
  "maxRooms": 3,
  "maxPrice": 3000,
  "amenities": [
    "lift"
  ],
  "maxResults": 100
}

Ask me which Swiss towns or postcodes to cover, whether they want rentals or sales, and any price, room or must-have-feature limits, then run the Actor and summarise the results as a table.
```

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

- *Pull every 2.5- to 3.5-room apartment to rent in Zürich under CHF 3,000 and rank the postcodes by median gross rent per square metre.*
- *List the flatshare rooms (WG-Zimmer) in Bern and Lausanne posted this week, with rent, furnishing and move-in date.*
- *Find Flatfox-first rentals in Geneva and join them to my ImmoScout24.ch data on the ImmoScout24 ID.*

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

### 📋 Overview

**Type a Swiss town or postcode and get its Flatfox listings back as clean rows**: rentals, flatshare rooms, offices, parking and property for sale, ready for a spreadsheet, a database or an AI agent.

**What you get:**

- ✅ **Search by place, not by URL**: Zürich, Genf, Geneva, Lausanne or 8004. German, French, Italian and English names all work, across 2,400 Swiss postcodes.
- ⚡ **Fast**: 100 Zürich rentals in about 15 seconds, newest first.
- 🎯 **Filters that hold**: a listing that does not match your price, rooms, space or must-have features is never saved and never charged.
- 🧮 **The Swiss rent split**: gross rent, net rent and service charges as separate CHF columns.
- 📎 **Photos and floor plans**: every photo and every document the advertiser attached, with direct links.
- 💰 **Pay per listing**: $1.20 per 1,000 listings on the Bronze plan, plus a small start fee. Nothing to install and no key to set up.
- ✨ **NEW**: Flatfox-first dates. About one listing in five is published on Flatfox before the other Swiss portals, and the row says until when.

***

### ✨ Features

- 📍 **Place search in four languages**: towns and postcodes resolve to their full postcode set; a name the actor cannot match stops the run before any charge.
- 🗺️ **Whole cities, read completely**: busy areas are split into smaller map tiles automatically, so Zürich or all of Switzerland comes back complete.
- 🏠 **Every property type**: apartments, houses, flatshare rooms (WG-Zimmer), offices and shops, parking, hobby rooms and building land.
- 🤝 **Rent or buy**: switch between rentals and sales with one field.
- 🎚️ **Real filters**: price in CHF, rooms, floor space, furnished only, temporary lets only, and must-have features like a lift, a balcony or pets allowed.
- 🧮 **Rent split and price basis**: monthly, weekly, per m² per year for offices, or sale price, always labelled.
- 📅 **Move-in date and availability**: immediately, by agreement or from a date.
- 🏢 **Managing agency**: name, street, postcode and city on every row that has one.
- ⭐ **Flatfox-first until**: the date a listing stays on Flatfox before the other portals.
- 🔗 **ImmoScout24 / Homegate ID**: the ID a syndicated listing carried there, for joining datasets.
- 🔁 **Paste listing links**: fetch specific listings by their Flatfox address or number.

***

### 🎬 Quick Start

Pick a town, choose rent or buy, and press Start. The run reads Flatfox's map for that town, fetches every matching listing and saves each one as a row. You can download the result as JSON, CSV or Excel, or pull it through the API.

```bash
curl -X POST "https://api.apify.com/v2/acts/sian.agency~flatfox-property-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"locations": ["Zürich"], "dealType": "rent", "propertyType": "apartment", "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Name your places

Type one or more Swiss towns or postcodes in Places, or leave it empty for the whole country.

#### Step 2: Set rent or buy and the filters

Choose the property type, then add a price range, rooms, space or must-have features if you need them.

#### Step 3: Run and export

Press Start and open the dataset when the run finishes.

**That's it! In under a minute for most towns, you'll have:**

- Every matching listing with price, rent split, rooms and space
- Address, GPS coordinates, photos and floor plans
- The move-in date and the managing agency

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `locations` | array | No | Swiss towns or 4-digit postcodes. Empty means all of Switzerland. Default: Zürich |
| `dealType` | string | No | `rent` or `sale`. Default: `rent` |
| `propertyType` | string | No | `residential`, `apartment`, `house`, `flatshare`, `commercial`, `parking`, `land`, `hobby-storage` or `any`. Default: `residential` |
| `maxResults` | integer | No | Stop after this many listings. Default: 100 |
| `minPrice` / `maxPrice` | integer | No | Price range in CHF. 0 means no limit |
| `minRooms` / `maxRooms` | integer | No | Room range; 3 includes 3.5 |
| `minSpace` / `maxSpace` | integer | No | Floor space in m² |
| `amenities` | array | No | Features that must all be present, such as `lift`, `balconygarden`, `petsallowed` |
| `furnishedOnly` | boolean | No | Furnished listings only |
| `temporaryOnly` | boolean | No | Temporary lets and sublets only |
| `listingUrls` | array | No | Flatfox listing links or numbers to fetch instead of searching |

**Example:**

```json
{
  "locations": ["Zürich", "8004"],
  "dealType": "rent",
  "propertyType": "apartment",
  "maxRooms": 3,
  "maxPrice": 3000,
  "amenities": ["lift"],
  "maxResults": 100
}
```

**Fetch listings you already have:**

```json
{
  "listingUrls": [
    "https://flatfox.ch/de/wohnung/route-du-bugnon-48-1752-villars-sur-glane/1581688/",
    "1581688"
  ]
}
```

***

### 📤 Output

Each listing is saved to the Apify dataset with **60 fields**, including:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | number | Flatfox listing number |
| `url` | string | The listing on flatfox.ch |
| `propertyTitle` | string | The advertiser's headline |
| `price` / `priceBasis` | number / string | Headline price in CHF and what it means |
| `rentGross` / `rentNet` / `rentCharges` | number | Monthly rent with and without service charges |
| `rooms` | number | Room count in Swiss halves |
| `livingSpace` / `usableSpace` | number | Floor space in m² |
| `floor`, `yearBuilt` | number | Floor and year of construction |
| `availability` / `availableFrom` | string | Move-in terms and date |
| `street`, `postcode`, `city`, `canton` | string / number | Where it is |
| `latitude` / `longitude` | number | GPS coordinates |
| `amenities` | array | Features such as lift, balcony or garden, pets allowed |
| `imageUrls` / `documents` | array | Every photo and attached document |
| `agencyName` | string | The managing agency |
| `flatfoxExclusiveUntil` | string | End of the Flatfox-first period |
| `smgListingId` | string | ID on ImmoScout24.ch / Homegate, when syndicated |

**Example:**

```json
{
  "listingId": 1581688,
  "url": "https://flatfox.ch/en/flat/route-du-bugnon-48-1752-villars-sur-glane/1581688/",
  "imageUrl": "https://flatfox.ch/media/ff/2025/03/zmrks0yds2bfbp6zx3h9kojm4ytxghxn026tahlxty3fi1xwzs.jpg",
  "propertyTitle": "Votre nouveau logement facilite vos déplacements",
  "summaryTitle": "Route du Bugnon 48, 1752 Villars-sur-Glâne - CHF 1’790 incl. utilities per month",
  "dealType": "rent",
  "propertyCategory": "apartment",
  "price": 1790,
  "priceBasis": "per month",
  "currency": "CHF",
  "rentGross": 1790,
  "rentNet": 1500,
  "rentCharges": 290,
  "rooms": 3.5,
  "floor": 2,
  "livingSpace": 84,
  "yearBuilt": 1983,
  "availability": "immediately",
  "amenities": ["view", "balconygarden", "lift"],
  "isFurnished": false,
  "street": "Route du Bugnon 48",
  "postcode": 1752,
  "city": "Villars-sur-Glâne",
  "canton": "FR",
  "latitude": 46.795457,
  "longitude": 7.1159203,
  "imageCount": 9,
  "documentCount": 1,
  "documents": [{ "url": "https://flatfox.ch/media/ff/2026/02/xm6v81rdwm53h539j3kpwa9ttmq08jajbaazlzcppsq0khah5k/913oul5314pwkj8i82uyaxmyof1lzhtb1m8hnilq79muwh11tq.pdf", "caption": "3187.05.0152.pdf" }],
  "agencyName": "Helvetia Service SA",
  "agencyCity": "Neuchâtel",
  "reference": "3187.05.0152",
  "publishedAt": "2025-03-06T14:28:54.166279+01:00",
  "searchedLocation": "Fribourg",
  "status": "success"
}
```

***

### 💼 Use Cases & Examples

#### 1. Swiss Rental Market Analysis

**Rental analysts and proptech teams measuring rent per m² by postcode across Swiss cities.**

**Input:** A list of cities with `propertyType: "apartment"` and a high `maxResults`
**Output:** Gross and net rent, rooms, living space, year built and GPS for every listing
**Use:** Rent-per-m² maps, affordability studies and pricing models

#### 2. Relocation and Flat Hunting

**Relocation consultants shortlisting flats for a client moving to Zürich or Geneva.**

**Input:** One city, `maxPrice`, `minRooms` and `amenities` such as `lift` or `petsallowed`
**Output:** Matching listings with photos, floor plans, move-in date and the agency's details
**Use:** A ready shortlist to send the client the same day

#### 3. Flatfox-First Listing Alerts

**Property managers and flat hunters who want new listings before they spread to other portals.**

**Input:** A small `maxResults` on a daily schedule
**Output:** The newest listings first, each with its Flatfox-first date
**Use:** Morning alerts in Slack, e-mail or a Google Sheet

#### 4. WG-Zimmer and Student Housing Research

**University housing offices and student organisations tracking flatshare rooms.**

**Input:** `propertyType: "flatshare"` for Bern, Lausanne or Zürich
**Output:** Room rents, furnishing, temporary-let flags and move-in dates
**Use:** Semester-start rent reports and housing guides for new students

#### 5. Agency Lead Generation

**Service providers selling to Swiss property managers: cleaners, movers, photographers.**

**Input:** A region with `propertyType: "residential"`
**Output:** The managing agency and its address for every listing
**Use:** A list of the agencies letting the most units in each postcode

#### 6. Commercial Space Scouting

**Brokers and growing firms looking for offices and shops.**

**Input:** `propertyType: "commercial"` with `minSpace` and a city
**Output:** Price per month or per m² per year, usable space and address
**Use:** Comparing office rents across districts

#### 7. Cross-Portal Deduplication

**Data teams who already hold ImmoScout24.ch listings.**

**Input:** Any search
**Output:** The ImmoScout24 / Homegate ID on each syndicated listing
**Use:** Join the two datasets on the ID instead of matching addresses

***

### 🔗 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/flatfox-property-scraper').call({
  locations: ['Zürich'],
  dealType: 'rent',
  propertyType: 'apartment',
  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/flatfox-property-scraper').call(
    run_input={'locations': ['Lausanne'], 'dealType': 'rent', 'propertyType': 'apartment', 'maxResults': 100}
)

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

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~flatfox-property-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"locations": ["Bern"], "propertyType": "flatshare", "maxResults": 50}'
```

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

1. **Trigger**: a daily schedule
2. **HTTP Request**: run the actor with your town and filters
3. **Process**: keep the listing IDs you have not seen before
4. **Action**: post new listings to Slack, a Google Sheet or your CRM

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run with every field and filter
- No credit card required
- Enough to test a town and check the output

#### PAID Tier (Production Ready)

- **Unlimited** listings per run, up to your Max listings
- Whole cities and all of Switzerland in one run
- Pay per listing returned: message rows and filtered-out listings are never charged

💰 **$1.20 per 1,000 listings** on the Bronze plan, lower on higher plans, plus a small fee per run.

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

***

### ❓ Frequently Asked Questions

**Q: Do I need a Flatfox account, an API key or a proxy?**
A: No. Enter a place and press Start.

**Q: How do I name a place?**
A: Type a Swiss town or 4-digit postcode, one per line. Genf, Genève and Geneva find the same listings. An empty list searches all of Switzerland.

**Q: What if a place is not recognised?**
A: The run stops before anything is charged and names the place it could not match. It never widens the search on its own.

**Q: How many listings can one run return?**
A: As many as match, up to your Max listings. Busy areas are split into smaller map tiles automatically, so large cities are read completely.

**Q: What is the difference between gross rent, net rent and service charges?**
A: Swiss rentals are advertised as a net rent plus service charges (Nebenkosten). The gross rent is both together, and each row carries whichever parts the advertiser published.

**Q: What does "Flatfox-first until" mean?**
A: Some advertisers publish on Flatfox before sending the listing to the other Swiss portals. The date is when that period ends.

**Q: Can I get phone numbers or e-mail addresses?**
A: No. Flatfox handles contact through its own enquiry form. Each row names the managing agency and its postal address where one is listed.

**Q: Does it cover properties for sale?**
A: Yes, but Flatfox is mainly a rental site, with about 1,900 sale listings against 33,900 rentals.

**Q: Which formats can I export?**
A: JSON, CSV, Excel, XML and HTML from the dataset, or through the API.

***

### 🐛 Troubleshooting

**"Could not match these places"**

- Use the town name as Flatfox shows it (Zürich, Genève, Lausanne) or its 4-digit postcode
- Check the spelling; accents are optional

**"No listings match this search"**

- Widen the price, rooms or space range
- Remove a must-have feature, or switch the property type
- Flatshare rooms exist only to rent

**Fewer listings than expected**

- Check Max listings; the run stops there
- On the free tier a run returns up to 25 listings

**A listing link returns "Not found"**

- The listing has been let, sold or withdrawn; search the same town for live listings

***

### ⚖️ 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/).

Flatfox is a trademark of Flatfox AG, part of SMG Swiss Marketplace Group. This Actor is not affiliated with, endorsed by or sponsored by Flatfox or SMG Swiss Marketplace Group. It reads only publicly visible listings.

***

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue on the [Issues tab](https://apify.com/sian.agency/flatfox-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/flatfox-property-scraper/changelog.md

# Actor input Schema

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

The search returns complete Flatfox listings for any Swiss city, town or postcode, or for the whole country, with rent-or-buy, property type, price, rooms, space, furnishing and amenity filters. You can also paste Flatfox listing links to fetch those listings directly. Both return the same full row.

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

Swiss cities, towns or 4-digit postcodes, one per line: Zürich, Genf, Lausanne, Bern, 8004. German, French, Italian and English names all work. A city covers all of its postcodes. Leave the list empty to search the whole of Switzerland. A place that cannot be matched stops the run before anything is charged, rather than widening the search.

## `dealType` (type: `string`):

Rentals carry the monthly gross rent and, where the advertiser published it, the net rent and the service charges separately. Sales carry the asking price. Flatfox is rental-first, so a sale search returns far fewer listings than the same rental search.

## `propertyType` (type: `string`):

Which part of Flatfox to search. All homes is what most rental studies want. Flatshare rooms are rental-only, so a sale search for them returns nothing. Commercial prices are often quoted per m² per year; the row says which.

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

Stop after this many listings across all places in the run. Newest listings come first, so a scheduled run with a small limit picks up what was added since the last one. Flatfox holds roughly 36,000 listings in total.

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

Lowest price to include, in Swiss francs. For rentals this is the monthly rent the listing displays. 0 means no lower bound. Listings with no published price are left out whenever a price bound is set.

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

Highest price to include, in Swiss francs. 0 means no upper bound.

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

Only listings with at least this many rooms. Swiss room counts use halves (2.5, 3.5), so 3 includes 3.5. 0 means no minimum. Listings that publish no room count, such as parking or offices, are left out when this is set.

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

Only listings with at most this many rooms. 0 means no maximum.

## `minSpace` (type: `integer`):

Minimum floor space in square metres: the living space for homes, the usable space for commercial property. 0 means no minimum.

## `maxSpace` (type: `integer`):

Maximum floor space in square metres. 0 means no maximum.

## `amenities` (type: `array`):

Keep only listings that have ALL of the features picked here: lift, balcony or garden, pets allowed, parking space, wheelchair access and so on. Each feature is exactly what the advertiser ticked on Flatfox. Each extra feature you pick narrows the result further.

## `furnishedOnly` (type: `boolean`):

Keep only listings the advertiser marked as furnished.

## `temporaryOnly` (type: `boolean`):

Keep only listings offered for a limited period, such as sublets and short-term rentals.

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

Paste Flatfox listing addresses to fetch exactly those listings instead of searching, for example https://flatfox.ch/de/wohnung/zollstrasse-6-8005-zurich/1389523/ or the short form https://flatfox.ch/1389523/. A bare listing number works too. When this list is filled, the place and filter fields are ignored.

## Actor input object example

```json
{
  "operation": "search",
  "locations": [
    "Zürich"
  ],
  "dealType": "rent",
  "propertyType": "residential",
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minSpace": 0,
  "maxSpace": 0,
  "amenities": [],
  "furnishedOnly": false,
  "temporaryOnly": false,
  "listingUrls": []
}
```

# Actor output Schema

## `flatfoxListings` (type: `string`):

Every listing this run returned, with price, rent split, size, place, photos and documents.

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

HTML summary of the run: listings returned, anything that needs a fix, and what was charged.

# 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": [
        "Zürich"
    ],
    "dealType": "rent",
    "propertyType": "residential",
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "minSpace": 0,
    "maxSpace": 0,
    "amenities": [],
    "furnishedOnly": false,
    "temporaryOnly": false,
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/flatfox-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": ["Zürich"],
    "dealType": "rent",
    "propertyType": "residential",
    "maxResults": 100,
    "minPrice": 0,
    "maxPrice": 0,
    "minRooms": 0,
    "maxRooms": 0,
    "minSpace": 0,
    "maxSpace": 0,
    "amenities": [],
    "furnishedOnly": False,
    "temporaryOnly": False,
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/flatfox-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": [
    "Zürich"
  ],
  "dealType": "rent",
  "propertyType": "residential",
  "maxResults": 100,
  "minPrice": 0,
  "maxPrice": 0,
  "minRooms": 0,
  "maxRooms": 0,
  "minSpace": 0,
  "maxSpace": 0,
  "amenities": [],
  "furnishedOnly": false,
  "temporaryOnly": false,
  "listingUrls": []
}' |
apify call sian.agency/flatfox-property-scraper --silent --output-dataset

```

## MCP server setup

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