# Realtor.ca Scraper - Canadian MLS Listings (`lentic_clockss/realtor-ca-scraper`) Actor

Scrape Realtor.ca Canadian MLS listings by city. Extract for-sale and rental prices, beds, baths, sqft, MLS numbers, agents, and photos. A Realtor.ca / CREA API alternative for Excel, CSV, or JSON.

- **URL**: https://apify.com/lentic\_clockss/realtor-ca-scraper.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Realtor.ca Scraper — Canadian MLS Listings

**Scrape Realtor.ca for-sale and rental listings by Canadian city — then download structured MLS data as Excel, CSV, or JSON.**

This Actor is a practical **Realtor.ca / CREA API alternative** for market research, investor screening, rental comps, and lead lists. Enter a city such as `Toronto, ON`, choose **For sale**, **For rent**, or **Both**, and get listing rows with MLS numbers, prices, beds, baths, size, agents, photos, and addresses.

- Pull **Canadian homes for sale** and **rentals** from [Realtor.ca](https://www.realtor.ca/)
- Resolve cities to map bounding boxes, then call CREA `PropertySearch_Post`
- Optionally enrich with **PropertyDetails** (remarks, extra photos)
- Filter by CAD price range — or paste a realtor.ca city URL
- Export to **Excel / CSV / JSON**, or connect Make, n8n, Zapier, Python, or MCP
- **Pay per event** — Actor start + each Dataset listing; no subscription

---

### What does the Realtor.ca Scraper do?

It turns a Canadian city search on Realtor.ca into a clean Apify Dataset of MLS listings.

Under the hood, the Actor:

1. Resolves your city to a map bounding box (curated cache for major metros, Nominatim/Photon geocode for other Canadian cities)
2. Warms a Camoufox browser session on Realtor.ca (Imperva-aware)
3. Calls CREA `PropertySearch_Post` from the page context with challenge cookies attached
4. Optionally fetches PropertyDetails in parallel (bounded concurrency) to enrich each row
5. Writes normalized records you can download or push into automations

Apify **Canadian RESIDENTIAL** proxy is always forced at runtime (prefilled, country `CA`).

---

### What data can you extract from Realtor.ca?

| Data point | For sale | For rent |
| --- | :---: | :---: |
| Address / listing name | ✅ | ✅ |
| MLS number & listing ID | ✅ | ✅ |
| List price or rent (CAD) | ✅ | ✅ |
| Beds / baths / size | ✅ | ✅ |
| Property type & ownership | ✅ | ✅ |
| GPS coordinates | ✅ | ✅ |
| Listing URL & main image | ✅ | ✅ |
| Agent / office | ✅ | ✅ |
| Time on Realtor.ca | ✅ | ✅ |
| Public remarks (when enriched) | ✅ | ✅ |

Every Dataset row also includes `scrapedAt`, `country` = `CA`, and `source` = `realtor.ca`. A `RUN_SUMMARY` record in the key-value store reports counts and warnings.

---

### What you can do with it

#### 1. Scrape Canadian homes for sale in a metro

Enter a city like `Toronto, ON`, set listing type to **For sale**, and get structured rows with MLS number, price, beds, baths, size, agent, and a direct listing URL — ready for comps or investor shortlists.

#### 2. Scrape Canadian rentals

Set listing type to **For rent**. Rows include rent/price display, beds/baths, size, and agent/office when present.

#### 3. Cover sale and rent in one run

Set `listingType` to `both`. `maxResults` is split across sale and rent when both are selected.

#### 4. Feed Canadian MLS data into automations

Schedule the Actor and send the Dataset to Sheets, Slack, CRM, Make, n8n, Zapier, or an AI agent via Apify MCP / API.

---

### How to scrape Realtor.ca (no code required)

1. Click **Try for free**
2. Enter a location (`Toronto, ON` or `Vancouver, BC`)
3. Choose **For sale**, **For rent**, or **Both**
4. Optionally set max results and CAD price filters
5. Keep **Apify RESIDENTIAL** proxy enabled (Canada)
6. Click **Start** — open the **Dataset** tab when the run finishes

Start with `maxResults: 5–10` to verify the market, then scale up.

<details>
<summary>For developers: minimal input</summary>

```json
{
  "location": "Toronto, ON",
  "listingType": "sale",
  "maxResults": 10,
  "maxPrice": 1500000,
  "enrichDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "CA"
  }
}
````

</details>

***

### Pricing — how much does it cost to scrape Realtor.ca?

**Pay per event. No subscription.**

| Event | Price | When charged |
| --- | ---: | --- |
| `apify-actor-start` | **$0.005** | When a normal run starts (scaled by allocated memory GB) |
| `apify-default-dataset-item` (`result`) | **$2.50 / 1,000** ($0.0025 each) | Each listing written to the default Dataset |

**User pays platform usage costs: Yes** — compute, residential proxy, and other platform usage are billed to the user in addition to event charges.

**Example product charges (events only):**

| Scenario | Approx. event charge |
| --- | ---: |
| Canary: 10 listings | $0.005 + 10 × $0.0025 = **$0.030** |
| City scan: 100 listings | $0.005 + $0.25 = **$0.255** |
| 1,000 listings | $0.005 + $2.50 = **$2.505** |

Platform usage (especially residential proxy + browser warmup) is separate and depends on run duration and memory.

***

### Input

| Field | Description |
| --- | --- |
| `location` | City and province, e.g. `Toronto, ON` / `Saskatoon, SK`, or a realtor.ca city URL |
| `listingType` | `sale`, `rent`, or `both` |
| `propertyTypeGroup` | `residential`, `commercial`, or `all` (default `residential`) |
| `propertySearchType` | Residential subtype: `any`, `condo`, `vacant_land`, `multi_family`, etc. (default `any`; only with residential) |
| `maxResults` | 1–200 (default 20) |
| `minPrice` / `maxPrice` | Optional CAD filters |
| `enrichDetails` | Fetch PropertyDetails per listing (default `true`) |
| `detailConcurrency` | Parallel detail fetches 1–4 (default 2) |
| `maxDetailFailRatio` | Fail when detail errors exceed this ratio (default 0.5) |
| `applicationId` | Advanced CREA ApplicationId override (optional) |
| `proxyConfiguration` | Apify RESIDENTIAL / CA always forced at runtime |

Open the **Input** tab in Console for the full form and tooltips.

***

### Output example

You can download the Dataset as **JSON, CSV, Excel, or HTML**.

```json
{
  "name": "123 King St W",
  "listingType": "sale",
  "mlsNumber": "C1234567",
  "city": "Toronto",
  "state": "ON",
  "listPrice": 899000,
  "currency": "CAD",
  "beds": "2 + 1",
  "baths": "2",
  "sqft": "900 sqft",
  "agentName": "Jane Smith",
  "listingUrl": "https://www.realtor.ca/real-estate/...",
  "source": "realtor.ca",
  "scrapedAt": "2026-07-17T00:00:00+00:00"
}
```

Core fields include `listingId`, `mlsNumber`, address/price/size/GPS, `listingUrl`, `imageUrl`, agent/office, and detail extras such as `descriptionText` when enrichment is enabled.

***

### Live View endpoints

When Standby / Live View is enabled, the Actor exposes a small OpenAPI surface for readiness and discovery:

| Endpoint | Purpose |
| --- | --- |
| `GET /` | Readiness / service info |
| `GET /health` | Health check |
| `GET /input-example` | Low-cost example input |
| `GET /openapi.json` | Deployed OpenAPI document |

Scraping still runs through a **normal Actor run** — Live View does not scrape Realtor.ca by itself.

***

### Connect from code

Actor ID: `lentic_clockss/realtor-ca-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("lentic_clockss/realtor-ca-scraper").call(
    run_input={
        "location": "Toronto, ON",
        "listingType": "sale",
        "maxResults": 10,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
            "apifyProxyCountry": "CA",
        },
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("name"), item.get("listPrice"), item.get("listingUrl"))
```

Use the same Actor ID in Make, n8n, Zapier, or Apify MCP for AI-agent workflows.

***

### FAQ

#### Is there a free Realtor.ca / CREA API?

CREA / Realtor.ca does not offer a simple public listing API for bulk third-party export. This Actor gives you structured Canadian MLS data through Apify runs, Dataset exports, and integrations.

#### Can I scrape commercial or condo-only inventory?

Yes. Set `propertyTypeGroup` to `residential`, `commercial`, or `all`. For residential subtypes use `propertySearchType` (`condo`, `vacant_land`, `multi_family`, etc.). Commercial and `all` require `propertySearchType: any`. Each dataset row includes the requested `propertyTypeGroup` and `propertySearchType`.

#### Can I scrape both for-sale and rental listings?

Yes. Set `listingType` to `both`. `maxResults` is split across sale and rent when both are selected.

#### Why is a Canadian residential proxy required?

Realtor.ca sits behind Imperva and blocks many datacenter/direct IPs. Apify RESIDENTIAL with country `CA` is required for reliable runs.

#### Why might a dense metro return fewer than maxResults?

CREA search uses a map bounding box with an internal result cap (~600). The Actor paginates within that cap and stops at `maxResults`. Very dense metros may need tighter price filters or smaller areas. If the browser session dies mid-run after emitting some rows, `RUN_SUMMARY.status` is `PARTIAL`.

#### How are unknown Canadian cities resolved?

Major metros use a versioned curated bbox table. Other Canadian cities are geocoded (Nominatim, Photon fallback) and expanded to an approximate map box.

#### Can I schedule daily Realtor.ca scrapes?

Yes. Create an Apify schedule with the same input and send the Dataset to Sheets, Slack, a CRM, or your pipeline.

#### Is it legal to scrape Realtor.ca?

Use this Actor for legitimate research and analysis only. Respect Realtor.ca / CREA terms of use and applicable law. Results may include publicly displayed listing information; do not use personal data without a lawful basis.

***

### Related Actors

- [Realtor.com Scraper](https://apify.com/lentic_clockss/realtor-com-scraper) — US homes for sale and rent
- [Realtor.com Agents Scraper](https://apify.com/lentic_clockss/realtor-com-agents-scraper) — US agent profiles and contact data
- [US Real Estate Scraper](https://apify.com/lentic_clockss/us-real-estate-scraper) — multi-site US aggregation

Browse all Actors: [apify.com/lentic\_clockss](https://apify.com/lentic_clockss)

# Actor input Schema

## `location` (type: `string`):

Canadian city and province, e.g. 'Toronto, ON' or 'Saskatoon, SK'. Also accepts realtor.ca city URLs. Known metros use a curated bbox cache; other Canadian cities are geocoded automatically.

## `listingType` (type: `string`):

Scrape for-sale listings, rentals, or both.

## `propertyTypeGroup` (type: `string`):

Residential, commercial, or both groups (all splits maxResults across residential + commercial).

## `propertySearchType` (type: `string`):

Residential subtype filter (CREA PropertySearchTypeId). Only valid with propertyTypeGroup=residential. Use 'any' for commercial or all.

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

Maximum listings to collect (split evenly across sale and rent when listingType is both).

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

Optional minimum list price or rent in CAD.

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

Optional maximum list price or rent in CAD.

## `enrichDetails` (type: `boolean`):

Fetch PropertyDetails for each listing (remarks, extra photos when available).

## `detailConcurrency` (type: `integer`):

Parallel PropertyDetails fetches (1–4) on shared Camoufox cookies. Keep low under Imperva pressure.

## `maxDetailFailRatio` (type: `number`):

Fail the run when PropertyDetails failures exceed this ratio (after at least 2 attempts).

## `applicationId` (type: `string`):

Advanced: override CREA ApplicationId. Leave empty for default (1).

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

Apify RESIDENTIAL with country CA is always forced at runtime (groups/country in this control are ignored). Sticky session keeps one IP for the whole run. Required for Imperva.

## Actor input object example

```json
{
  "location": "Toronto, ON",
  "listingType": "sale",
  "propertyTypeGroup": "residential",
  "propertySearchType": "any",
  "maxResults": 20,
  "enrichDetails": true,
  "detailConcurrency": 2,
  "maxDetailFailRatio": 0.5,
  "applicationId": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CA"
  }
}
```

# Actor output Schema

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

Normalized Realtor.ca listing records.

## `runSummary` (type: `string`):

Location, listing type, counts, and timestamps for the run.

## `inputEcho` (type: `string`):

Normalized non-secret input for the run.

## `errorSummary` (type: `string`):

Structured failure details when input validation or acquisition fails.

# 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 = {
    "location": "Toronto, ON",
    "listingType": "sale",
    "propertyTypeGroup": "residential",
    "propertySearchType": "any",
    "maxResults": 20,
    "detailConcurrency": 2,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CA"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/realtor-ca-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 = {
    "location": "Toronto, ON",
    "listingType": "sale",
    "propertyTypeGroup": "residential",
    "propertySearchType": "any",
    "maxResults": 20,
    "detailConcurrency": 2,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CA",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/realtor-ca-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 '{
  "location": "Toronto, ON",
  "listingType": "sale",
  "propertyTypeGroup": "residential",
  "propertySearchType": "any",
  "maxResults": 20,
  "detailConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CA"
  }
}' |
apify call lentic_clockss/realtor-ca-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Realtor.ca Scraper - Canadian MLS Listings",
        "description": "Scrape Realtor.ca Canadian MLS listings by city. Extract for-sale and rental prices, beds, baths, sqft, MLS numbers, agents, and photos. A Realtor.ca / CREA API alternative for Excel, CSV, or JSON.",
        "version": "0.2",
        "x-build-id": "bqkRaumk2xTcrlGYP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~realtor-ca-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-realtor-ca-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/lentic_clockss~realtor-ca-scraper/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-realtor-ca-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/lentic_clockss~realtor-ca-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-realtor-ca-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",
                "required": [
                    "location"
                ],
                "properties": {
                    "location": {
                        "title": "Location",
                        "maxLength": 200,
                        "type": "string",
                        "description": "Canadian city and province, e.g. 'Toronto, ON' or 'Saskatoon, SK'. Also accepts realtor.ca city URLs. Known metros use a curated bbox cache; other Canadian cities are geocoded automatically.",
                        "default": "Toronto, ON"
                    },
                    "listingType": {
                        "title": "Listing type",
                        "enum": [
                            "sale",
                            "rent",
                            "both"
                        ],
                        "type": "string",
                        "description": "Scrape for-sale listings, rentals, or both.",
                        "default": "sale"
                    },
                    "propertyTypeGroup": {
                        "title": "Property type group",
                        "enum": [
                            "residential",
                            "commercial",
                            "all"
                        ],
                        "type": "string",
                        "description": "Residential, commercial, or both groups (all splits maxResults across residential + commercial).",
                        "default": "residential"
                    },
                    "propertySearchType": {
                        "title": "Property search type",
                        "enum": [
                            "any",
                            "residential",
                            "recreational",
                            "condo",
                            "agriculture",
                            "parking",
                            "vacant_land",
                            "multi_family"
                        ],
                        "type": "string",
                        "description": "Residential subtype filter (CREA PropertySearchTypeId). Only valid with propertyTypeGroup=residential. Use 'any' for commercial or all.",
                        "default": "any"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum listings to collect (split evenly across sale and rent when listingType is both).",
                        "default": 20
                    },
                    "minPrice": {
                        "title": "Min price ($ CAD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional minimum list price or rent in CAD."
                    },
                    "maxPrice": {
                        "title": "Max price ($ CAD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional maximum list price or rent in CAD."
                    },
                    "enrichDetails": {
                        "title": "Enrich details",
                        "type": "boolean",
                        "description": "Fetch PropertyDetails for each listing (remarks, extra photos when available).",
                        "default": true
                    },
                    "detailConcurrency": {
                        "title": "Detail concurrency",
                        "minimum": 1,
                        "maximum": 4,
                        "type": "integer",
                        "description": "Parallel PropertyDetails fetches (1–4) on shared Camoufox cookies. Keep low under Imperva pressure.",
                        "default": 2
                    },
                    "maxDetailFailRatio": {
                        "title": "Max detail fail ratio",
                        "minimum": 0,
                        "maximum": 1,
                        "type": "number",
                        "description": "Fail the run when PropertyDetails failures exceed this ratio (after at least 2 attempts).",
                        "default": 0.5
                    },
                    "applicationId": {
                        "title": "ApplicationId override",
                        "type": "string",
                        "description": "Advanced: override CREA ApplicationId. Leave empty for default (1).",
                        "default": ""
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify RESIDENTIAL with country CA is always forced at runtime (groups/country in this control are ignored). Sticky session keeps one IP for the whole run. Required for Imperva."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
