# Homegate Scraper (`unfenced-group/homegate-scraper`) Actor

Scrape homegate.ch for Swiss real estate listings: price, m², rooms, GPS, canton, features & descriptions. 37,500+ buy listings across all 26 cantons. No proxy required.

- **URL**: https://apify.com/unfenced-group/homegate-scraper.md
- **Developed by:** [Unfenced Group](https://apify.com/unfenced-group) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 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.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Homegate.ch Scraper

![homegate-scraper](https://api.apify.com/v2/key-value-stores/lJlifu6C8YQfZMPKE/records/homegate-scraper)

Extract structured real estate listings from **homegate.ch** — Switzerland's leading property platform with 37,500+ buy listings across all 26 cantons. Retrieves full property details from server-side rendered data. No API key required.

---

### Why this scraper?

#### 🏔️ All 26 Swiss cantons
Scrape any combination of cantons — Zürich, Bern, Genf, Waadt, Tessin, and more — or scrape all of Switzerland in one run.

#### 📊 Rich structured output
Captures price (CHF), living space (m²), room count, floor, build year, GPS coordinates, and 35+ property features including parking, balcony, garden, elevator, Minergie certification, mountain view, pet policy, child-friendliness, charging station, and more.

#### 🖼️ Full image gallery
Returns **all listing photos** as a complete `imageUrls` array (typically 10–20+ images per property). Also extracts `floorPlanUrls` (PDF floor plans) and `virtualTourUrl` where available.

#### 📝 Full descriptions
Property descriptions are extracted directly from the page's server-rendered data — no additional requests needed. Available as plain text, HTML, and Markdown.

#### 🗺️ GPS coordinates
Latitude and longitude included for every listing where Homegate provides them, enabling map visualisation and proximity analysis.

#### 👤 Agent & agency data
Captures listing agent name, phone number, email, agency ID, and agency logo URL for direct contact or lead enrichment workflows.

#### 🏗️ New construction data
`isNewBuilding` and `isNewConstruction` flags identify new-build properties. `newConstructionType` and `projectUrl` provide further detail for development projects.

#### 🔗 Direct URL support
Supply any Homegate search results URL directly to scrape a custom filter (price range, number of rooms, location, etc.) exactly as configured in the Homegate interface.

---

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `startUrls` | Array | `[]` | Homegate.ch search result URLs to scrape directly. Overrides `cantons` and `propertyType`. |
| `cantons` | Array | `[]` | Canton slugs to scrape, e.g. `kanton-zuerich`, `kanton-bern`, `kanton-genf`. Leave empty for all of Switzerland. |
| `propertyType` | String | `immobilien` | `immobilien` (all types), `wohnung` (apartments), or `haus` (houses). |
| `maxItems` | Integer | `200` | Maximum listings to return. |
| `daysOld` | Integer | `0` | Return only listings published within this many days. `0` disables the filter. |

**Available canton slugs:** kanton-zuerich, kanton-bern, kanton-genf, kanton-waadt, kanton-wallis, kanton-luzern, kanton-basel-stadt, kanton-basel-landschaft, kanton-aargau, kanton-solothurn, kanton-freiburg, kanton-tessin, kanton-graubuenden, kanton-thurgau, kanton-st-gallen, kanton-neuenburg, kanton-jura, kanton-zug, kanton-schwyz, kanton-uri, kanton-nidwalden, kanton-obwalden, kanton-glarus, kanton-appenzell-ausserrhoden, kanton-appenzell-innerrhoden, kanton-schaffhausen

---

### Output schema

#### Listing identity & type

| Field | Type | Description |
|---|---|---|
| `id` | String | Homegate listing ID. |
| `url` | String | Full URL of the listing detail page. |
| `title` | String | Listing title as published by the seller. |
| `offerType` | String | Always `"BUY"` for sale listings. |
| `propertyType` | String | Input property type filter used (`immobilien`, `wohnung`, `haus`). |
| `categories` | Array | Homegate property categories, e.g. `["APARTMENT","FLAT"]` or `["HOUSE","VILLA"]`. |
| `listingType` | String \| null | Listing tier: `"PREMIUM"`, `"STANDARD"`, etc. |
| `platforms` | Array | Platforms the listing is syndicated to (e.g. `["homegate","immoscout24","tutti"]`). |

#### Price

| Field | Type | Description |
|---|---|---|
| `price` | Number \| null | Sale price in CHF. Null if not published. |
| `currency` | String | Always `"CHF"`. |
| `priceText` | String \| null | Formatted price string, e.g. `"CHF 850'000"`. |

#### Location

| Field | Type | Description |
|---|---|---|
| `street` | String \| null | Street address. |
| `postalCode` | String \| null | Swiss postal code (4 digits). |
| `locality` | String \| null | City or municipality name. |
| `canton` | String \| null | Full canton name (e.g. `"Zürich"`, `"Bern"`, `"Genf"`). |
| `latitude` | Number \| null | GPS latitude. |
| `longitude` | Number \| null | GPS longitude. |

#### Characteristics — space & structure

| Field | Type | Description |
|---|---|---|
| `livingSpace` | Number \| null | Net living area in m². |
| `totalFloorSpace` | Number \| null | Total floor space in m² (may include non-living areas). |
| `lotSize` | Number \| null | Plot/land size in m². |
| `numberOfRooms` | Number \| null | Room count in Swiss format (e.g. `3.5`, `4.0`). |
| `numberOfBathrooms` | Number \| null | Number of bathrooms. |
| `numberOfToiletsGuest` | Number \| null | Number of guest toilets. |
| `floor` | Number \| null | Floor the property is on. |
| `numberOfFloors` | Number \| null | Total number of floors in the building. |
| `ceilingHeight` | Number \| null | Ceiling height in metres. |
| `cubage` | Number \| null | Volume of the building in m³. |
| `utilizationRatio` | Number \| null | Plot utilisation ratio (Ausnützungsziffer). |
| `yearBuilt` | Number \| null | Year of construction. |
| `yearLastRenovated` | Number \| null | Year of last renovation. |

#### Characteristics — features (Boolean | null)

| Field | Description |
|---|---|
| `isNewBuilding` | New-build property. |
| `isOldBuilding` | Listed as old/historic building. |
| `isGroundFloor` | Ground-floor unit. |
| `hasParking` | Parking space included. |
| `hasGarage` | Garage included. |
| `hasBalcony` | Has balcony. |
| `hasTerrace` | Has terrace. |
| `hasGarden` | Has garden. |
| `hasElevator` | Building has elevator. |
| `isWheelchairAccessible` | Wheelchair accessible. |
| `hasNiceView` | Listed as having a notable view. |
| `hasMountainView` | Has mountain view. |
| `isQuiet` | Listed as quiet location. |
| `isSunny` | Listed as sunny. |
| `isChildFriendly` | Child-friendly. |
| `arePetsAllowed` | Pets allowed. |
| `hasWashingMachine` | Washing machine included or connection available. |
| `hasTumbleDryer` | Tumble dryer included or connection available. |
| `hasDishwasher` | Dishwasher included. |
| `hasFireplace` | Has fireplace. |
| `hasCableTv` | Cable TV connection. |
| `hasChargingStation` | EV charging station available. |
| `isMinergieGeneral` | Minergie energy efficiency certified (general). |
| `isMinergieCertified` | Minergie Plus / Eco certified. |

#### Images & media

| Field | Type | Description |
|---|---|---|
| `imageUrls` | Array | All listing photo URLs (typically 10–20+ per property). |
| `imageCount` | Number | Number of photos. |
| `floorPlanUrls` | Array | PDF floor plan URLs where provided. |
| `virtualTourUrl` | String \| null | Virtual tour link where provided. |

#### Agent & agency

| Field | Type | Description |
|---|---|---|
| `agentName` | String \| null | Listing agent full name. |
| `agentPhone` | String \| null | Agent phone number. |
| `agentEmail` | String \| null | Agent email address. |
| `agentAvatarUrl` | String \| null | Agent profile photo URL. |
| `agencyId` | String \| null | Homegate agency / lister ID. |
| `agencyLogoUrl` | String \| null | Agency logo image URL. |

#### New construction

| Field | Type | Description |
|---|---|---|
| `isNewConstruction` | Boolean \| null | Part of a new construction project. |
| `newConstructionType` | String \| null | Project type, e.g. `"NEW_CONSTRUCTION_LIGHT"`. |
| `projectUrl` | String \| null | Developer project website URL. |

#### Description

| Field | Type | Description |
|---|---|---|
| `descriptionText` | String \| null | Full property description as plain text. |
| `descriptionHtml` | String \| null | Full description as HTML. |
| `descriptionMarkdown` | String \| null | Full description as Markdown. |

#### Dates & metadata

| Field | Type | Description |
|---|---|---|
| `publishDate` | String \| null | Publication date (YYYY-MM-DD). |
| `publishDateISO` | String \| null | Publication date in ISO 8601 format. |
| `contentHash` | String | MD5 fingerprint of id + title + price for change detection. |
| `isRepost` | Boolean | Always `false`. |
| `originalPublishDate` | null | Reserved. |
| `originalUrl` | null | Reserved. |
| `source` | String | Always `"homegate.ch"`. |
| `scrapedAt` | String | ISO timestamp of when this record was scraped. |

#### Example output record

```json
{
  "id": "4002873083",
  "url": "https://www.homegate.ch/kaufen/immobilien/objekt4002873083",
  "title": "4.5-Zimmer-Wohnung im OG mit zwei Balkonen",
  "offerType": "BUY",
  "propertyType": "immobilien",
  "categories": ["APARTMENT", "FLAT"],
  "listingType": "PREMIUM",
  "platforms": ["homegate", "immoscout24", "alleimmobilien", "home", "anibis"],
  "price": 1650600,
  "currency": "CHF",
  "priceText": "CHF 1.650.600",
  "livingSpace": null,
  "totalFloorSpace": 112,
  "lotSize": 1778,
  "numberOfRooms": 4.5,
  "numberOfBathrooms": 2,
  "floor": 1,
  "yearBuilt": 2026,
  "isNewBuilding": true,
  "street": "Eichacherstrasse 21",
  "postalCode": "8904",
  "locality": "Aesch ZH",
  "canton": "Zürich",
  "latitude": 47.339204,
  "longitude": 8.442492,
  "hasBalcony": true,
  "hasElevator": true,
  "hasGarage": true,
  "hasMountainView": true,
  "isSunny": true,
  "isQuiet": true,
  "isChildFriendly": true,
  "arePetsAllowed": true,
  "isWheelchairAccessible": true,
  "imageUrls": [
    "https://media2.homegate.ch/listings/v2/e218sub/4002873083/image/9cc62bc8.jpg",
    "https://media2.homegate.ch/listings/v2/e218sub/4002873083/image/37c2a85b.jpg"
  ],
  "imageCount": 16,
  "floorPlanUrls": ["https://media2.homegate.ch/listings/v2/e218sub/4002873083/document/6956d46f.pdf"],
  "virtualTourUrl": "https://kuula.co/share/collection/7Ml1y?...",
  "agentName": "Ramona Schiesser",
  "agentPhone": "+41556104746",
  "agentEmail": "ramona.schiesser@lerchpromotionen.ch",
  "agencyId": "e218sub",
  "agencyLogoUrl": "https://media2.homegate.ch/t_customer_logo/logos/l_e218sub_v2.jpg",
  "isNewConstruction": true,
  "newConstructionType": "NEW_CONSTRUCTION_LIGHT",
  "projectUrl": "https://ameichacher.ch/",
  "descriptionText": "Ruhe, Sonne und eine beeindruckende Weitsicht ...",
  "descriptionHtml": "<p>Ruhe, Sonne...</p>",
  "descriptionMarkdown": "Ruhe, Sonne ...",
  "publishDate": "2026-01-26",
  "publishDateISO": "2026-01-26T17:03:33.924Z",
  "contentHash": "a3f9c12e4b7d8e1f",
  "isRepost": false,
  "source": "homegate.ch",
  "scrapedAt": "2026-05-06T10:00:00.000Z"
}
````

***

### Examples

**All buy listings in Zürich:**

```json
{
  "cantons": ["kanton-zuerich"],
  "propertyType": "immobilien",
  "maxItems": 200
}
```

**Apartments in Bern and Genf:**

```json
{
  "cantons": ["kanton-bern", "kanton-genf"],
  "propertyType": "wohnung",
  "maxItems": 500
}
```

**Custom search URL (with price and rooms filter set in Homegate):**

```json
{
  "startUrls": [
    { "url": "https://www.homegate.ch/kaufen/immobilien/kanton-zuerich/trefferliste?pr=500000-1500000&nrooms=3-5" }
  ],
  "maxItems": 100
}
```

**Recent new listings across all of Switzerland:**

```json
{
  "propertyType": "immobilien",
  "daysOld": 7,
  "maxItems": 1000
}
```

***

### 💰 Pricing

**$1.50 per 1,000 results** — you only pay for successfully retrieved listings.

| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.50 |
| 10,000 | ~$15.00 |
| 100,000 | ~$150.00 |

> Flat-rate alternatives typically charge $29–$49/month regardless of usage.

***

### Performance

| Run size | Approx. time |
|---|---|
| 200 listings | 1–2 min |
| 1,000 listings | 5–8 min |
| 5,000 listings | 25–40 min |

***

### Known limitations

- Only **buy (for-sale)** listings are available — rental listings (`/mieten`) are not accessible from the scraper infrastructure.
- Pagination is capped at 50 pages (1,000 results) per search URL. To exceed this, combine multiple canton filters or use `startUrls` with different search configurations.
- Publish dates are available only when Homegate includes them in the server-rendered data.

***

### Technical details

- **Source:** window.**INITIAL\_STATE** SSR injection (Vue/Pinia) — pure JSON-in-HTML, zero CSS selectors
- **Memory:** 256 MB
- **Retry:** Automatic retry on network errors, exponential backoff, 3 attempts per request
- **v2.0:** Removed cheerio; full image galleries, agent data, and 20+ new fields extracted entirely from SSR state

***

### Additional services

Need a custom actor, additional filters, scheduled runs, or integration support?.nl]\(mailto:info@unfencedgroup.nl) — we build on request.

***

***

### Need a custom scraper?

**[Unfenced Group](https://www.unfencedgroup.nl)** builds Apify actors for any website — for free.

If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.

**Get in touch:** [www.unfencedgroup.nl](https://www.unfencedgroup.nl)

# Actor input Schema

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

Type of property: immobilien (all types), wohnung (apartments), haus (houses).

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

Minimum listing price (local currency). Leave empty for no minimum.

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

Maximum listing price (local currency). Leave empty for no maximum.

## `daysOld` (type: `integer`):

Only return listings published within this many days. Set to 0 to disable.

## `fetchDetails` (type: `boolean`):

If true, opens each listing detail page to extract additional fields (description, floor plan, agent contact). Increases run time and cost.

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

Maximum number of listings to return per run.

## `startUrls` (type: `array`):

Homegate.ch search or category URLs to scrape. When provided, cantons and propertyType are ignored.

## `cantons` (type: `array`):

Swiss cantons to scrape. Use Homegate URL slugs, e.g. kanton-zuerich, kanton-bern, kanton-genf. Leave empty to scrape all of Switzerland.

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

Proxy settings. Homegate is protected by Cloudflare — residential proxies recommended for best results. Default uses Apify Residential.

## Actor input object example

```json
{
  "propertyType": "immobilien",
  "daysOld": 0,
  "fetchDetails": false,
  "maxItems": 200,
  "startUrls": [],
  "cantons": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "maxItems": 200
};

// Run the Actor and wait for it to finish
const run = await client.actor("unfenced-group/homegate-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 = { "maxItems": 200 }

# Run the Actor and wait for it to finish
run = client.actor("unfenced-group/homegate-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "maxItems": 200
}' |
apify call unfenced-group/homegate-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=unfenced-group/homegate-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Homegate Scraper",
        "description": "Scrape homegate.ch for Swiss real estate listings: price, m², rooms, GPS, canton, features & descriptions. 37,500+ buy listings across all 26 cantons. No proxy required.",
        "version": "0.0",
        "x-build-id": "99pdGqX7wZ5OhB2Jt"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/unfenced-group~homegate-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-unfenced-group-homegate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/unfenced-group~homegate-scraper/runs": {
            "post": {
                "operationId": "runs-sync-unfenced-group-homegate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/unfenced-group~homegate-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-unfenced-group-homegate-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "propertyType": {
                        "title": "Property type",
                        "enum": [
                            "immobilien",
                            "wohnung",
                            "haus"
                        ],
                        "type": "string",
                        "description": "Type of property: immobilien (all types), wohnung (apartments), haus (houses).",
                        "default": "immobilien"
                    },
                    "minPrice": {
                        "title": "Min price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Minimum listing price (local currency). Leave empty for no minimum."
                    },
                    "maxPrice": {
                        "title": "Max price",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum listing price (local currency). Leave empty for no maximum."
                    },
                    "daysOld": {
                        "title": "Max age (days)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return listings published within this many days. Set to 0 to disable.",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Fetch listing details",
                        "type": "boolean",
                        "description": "If true, opens each listing detail page to extract additional fields (description, floor plan, agent contact). Increases run time and cost.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of listings to return per run.",
                        "default": 200
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Homegate.ch search or category URLs to scrape. When provided, cantons and propertyType are ignored.",
                        "default": [],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "cantons": {
                        "title": "Cantons",
                        "type": "array",
                        "description": "Swiss cantons to scrape. Use Homegate URL slugs, e.g. kanton-zuerich, kanton-bern, kanton-genf. Leave empty to scrape all of Switzerland.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Homegate is protected by Cloudflare — residential proxies recommended for best results. Default uses Apify Residential.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
