# Rightmove Scraper (`silentflow/rightmove-scraper`) Actor

Rightmove scraper for UK real estate data. Extract property listings for sale or rent, sold prices, agent contacts, price history, nearest schools with OFSTED ratings, stations, EPC ratings, floorplans. Paste any Rightmove search URL. Export to JSON, CSV, Excel.

- **URL**: https://apify.com/silentflow/rightmove-scraper.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Rightmove Scraper

**Every UK property listing on Rightmove, structured and ready for analysis.** Pull sale listings, rental stock, sold prices, and overseas properties with full agent details, floorplans, and nearby transport. In seconds, not hours.

### ✨ Why teams choose this over other Rightmove scrapers

Spending hours copying listings into spreadsheets? Running scrapers that only pull half the data you need? Tired of paying extra for fields that should be included?

- 🏡 **Every field, included by default.** Nearest schools with OFSTED ratings, nearest stations, price history, floorplans, virtual tours, key features, highlights (parking, garden, flood risks), council tax band, EPC rating, tenure, ground rent, and service charges. Other scrapers hide these behind paid toggles.
- 📍 **Any Rightmove search URL works.** Paste your browser URL straight from Rightmove for sale, rent, sold prices, or overseas. No filters to rebuild, no location IDs to look up.
- ⚡ **Fast by default.** Pull 500 search cards in under a minute, or 100 fully enriched properties in about two minutes. Parallel detail workers built in, no tuning required.
- 💷 **Complete agent data.** Name, phone, logo, branch address, profile URL, and full description. Everything you need to contact or analyse the agent behind each listing.
- 🗺️ **Coordinates on every listing.** Latitude and longitude included by default so you can map results, compute distances, or feed a GIS pipeline without geocoding.
- 📦 **Clean, predictable output.** 50+ fields per property in one flat JSON structure. No nested surprises, no empty fields pretending to be null.
- 🔁 **Detail-page opt-out.** If you only need the search card data, flip one switch and scrape 10x faster at lower cost.
- 📡 **Monitoring mode.** Schedule the scraper and get charged only for newly listed properties compared to previous runs. A daily watcher on your postcode can cost 90% less than a full re-scrape.
- 🗑️ **Delisting tracker.** Automatically detect when properties disappear from Rightmove. Perfect for tracking time-to-sell or competitor stock churn.

### 🎯 What you can do with Rightmove data

| Team | What they build |
|------|-----------------|
| **Property investors** | Track every new sale listing in a postcode, compute price per square foot, and flag under-market properties the morning they hit Rightmove. |
| **Lettings analysts** | Pull every rental in a city with deposit, let type, furnished status, and council tax band. Compute gross yields against sold prices from the same postcode. |
| **Estate agents** | Monitor competitors' stock by branch, export their listing counts and average asking price, and benchmark your own portfolio against the local market weekly. |
| **Data teams** | Feed a live property dataset into BigQuery, Snowflake, or a custom warehouse with a single scheduled run. |

### 📥 Input parameters

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `startUrls` | array of URLs | Yes (or propertyUrls) | Rightmove search URLs for sale, rent, sold prices, or overseas |
| `propertyUrls` | array of URLs | Yes (or startUrls) | Individual property URLs to scrape directly |
| `maxItems` | integer | No | Maximum properties to save. Default 100. Rightmove caps searches at 1000 per URL. |
| `fullDetails` | boolean | No | Visit each listing's detail page for the full 50+ fields including schools and price history. Default true. Disable for faster search-card-only runs. |
| `monitoringMode` | boolean | No | Save only new listings compared to previous runs. Requires scheduled runs on the same URL. Default false. |
| `enableDelistingTracker` | boolean | No | Track property disappearance over time via the default key-value store. Default false. |

### 📊 Output data

Each property is saved as a flat JSON object:

```json
{
  "id": "163513427",
  "url": "https://www.rightmove.co.uk/properties/163513427",
  "displayAddress": "Greenwich Peninsula, 4 Cutter Lane, SE10",
  "outcode": "SE10",
  "incode": "0ZS",
  "ukCountry": "England",
  "bedrooms": 1,
  "bathrooms": 1,
  "propertySubType": "Apartment",
  "price": "£585,000",
  "priceNumeric": 585000,
  "type": "sale",
  "transactionType": "buy",
  "tenure": "LEASEHOLD",
  "yearsRemainingOnLease": 229,
  "coordinates": {"latitude": 51.500977, "longitude": 0.008011},
  "agent": "Garrison Estates, London",
  "agentPhone": "020 3910 6752",
  "agentProfileUrl": "https://www.rightmove.co.uk/estate-agents/agent/Garrison-Estates/London-181970.html",
  "keyFeatures": ["13th floor one bedroom", "West facing", "Modern amenities"],
  "images": ["https://media.rightmove.co.uk/..."],
  "floorplans": [{"url": "...", "caption": "Floorplan 1", "type": "IMAGE"}],
  "nearestStations": [
    {"name": "North Greenwich", "types": ["LONDON_UNDERGROUND"], "distance": 0.3, "unit": "miles"}
  ],
  "councilTaxBand": "E",
  "description": "Positioned on the 13th floor...",
  "listingUpdateReason": "Added on 19/06/2025",
  "scrapedAt": "2026-04-10T19:40:53Z"
}
````

### 🗂️ Data fields

| Category | Fields |
|----------|--------|
| Identity | id, url, scrapedAt |
| Address | displayAddress, outcode, incode, ukCountry, countryCode, deliveryPointId |
| Basics | bedrooms, bathrooms, propertyType, propertySubType, summary |
| Price | price, priceNumeric, secondaryPrice, priceQualifier |
| Transaction | type, transactionType, displayStatus, productLabel, tags, archived, published, sold |
| Tenure | tenure, yearsRemainingOnLease |
| Location | coordinates (latitude, longitude) |
| Agent | agent, agentPhone, agentLogo, agentDisplayAddress, agentDescriptionHtml, agentProfileUrl, agentListingsUrl |
| Media | images, floorplans, virtualTours, brochures, epc |
| Description | description, descriptionHtml, keyFeatures |
| Living costs | councilTaxBand, annualGroundRent, annualServiceCharge, groundRentPercentageIncrease, councilTaxExempt, councilTaxIncluded |
| Lettings | letAvailableDate, deposit, minimumTermInMonths, letType, furnishType |
| Size | sizeSqFeetMin, sizeSqFeetMax |
| Nearby | nearestStations (name, type, distance), nearestAirports, nearestSchools (OFSTED rating, age range, pupil count, type, subtype, gender, religion, distance, coordinates, inspection report URL) |
| Price history | priceHistory (year, soldPrice, percentageDifference, detailsUrl) |
| Dates | addedOn, firstVisibleDate, listingUpdateDate, listingUpdateReason |
| Schemes | sharedOwnership, affordableBuyingScheme |
| Highlights | parking, garden, heating, water, sewerage, accessibility, risks, obligations |

### 🚀 Examples

#### Get every London flat for sale

```json
{
  "startUrls": [
    {"url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&propertyTypes=flat"}
  ],
  "maxItems": 1000,
  "fullDetails": true
}
```

#### Pull rental yields for Manchester (search cards only, fastest)

```json
{
  "startUrls": [
    {"url": "https://www.rightmove.co.uk/property-to-rent/find.html?searchType=RENT&locationIdentifier=REGION%5E904"}
  ],
  "maxItems": 500,
  "fullDetails": false
}
```

#### Watch a specific estate agent's stock

```json
{
  "startUrls": [
    {"url": "https://www.rightmove.co.uk/property-for-sale/find/Foxtons/Camden.html?locationIdentifier=BRANCH%5E4152&includeSSTC=true"}
  ],
  "maxItems": 1000,
  "fullDetails": true
}
```

#### Enrich a list of specific properties

```json
{
  "propertyUrls": [
    {"url": "https://www.rightmove.co.uk/properties/163513427"},
    {"url": "https://www.rightmove.co.uk/properties/148711631"}
  ],
  "fullDetails": true
}
```

#### Daily watcher for new listings in a postcode

```json
{
  "startUrls": [
    {"url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=OUTCODE%5E1087"}
  ],
  "maxItems": 1000,
  "fullDetails": true,
  "monitoringMode": true,
  "enableDelistingTracker": true
}
```

First run saves everything. Every subsequent run saves only new listings and logs properties that disappeared since the previous run. Schedule it daily to track a market in real time.

### 💻 Integrations

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("your-username/rightmove-scraper").call(run_input={
    "startUrls": [
        {"url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490"}
    ],
    "maxItems": 500,
    "fullDetails": True,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['displayAddress']} - {item['price']} - {item['bedrooms']} beds")
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('your-username/rightmove-scraper').call({
    startUrls: [
        { url: 'https://www.rightmove.co.uk/property-to-rent/find.html?searchType=RENT&locationIdentifier=REGION%5E87490' }
    ],
    maxItems: 500,
    fullDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(p => console.log(`${p.displayAddress}: ${p.price}`));
```

### 📈 Performance & limits

| Metric | Value |
|--------|-------|
| Search cards per page | 24 |
| Rightmove cap per search URL | 1000 properties (42 pages) |
| Speed (search cards only) | ~11 properties per second (500 in 44s on Apify) |
| Speed (full details + schools + history) | ~3 properties per second (100 in 30s on Apify) |
| Memory | 512 MB per run |
| Cost per 1K properties (full details) | ~$2 (compute + proxy included) |
| Cost per 1K properties (search cards) | ~$0.07 (compute + proxy included) |

### 💡 Tips for best results

- **Split large cities into outcodes.** Rightmove caps each search URL at 1000 results. To scrape every London flat, use multiple outcode URLs (`SE10`, `E14`, `NW1`, etc.) instead of one regional URL.
- **Disable `fullDetails` when you only need basics.** Search card data (address, price, beds, agent, coordinates) is already rich, 10x faster to collect, and costs under $0.10 per 1,000.
- **Use `propertyUrls` to re-enrich a watchlist.** Keep a list of property IDs from a prior run and pass them directly to pull updated prices and status.
- **Combine sale and sold-price URLs for yield analysis.** One run gets current asking prices, a second gets historical sold prices in the same postcode. Join on outcode.
- **Schedule runs for fresh data.** Rightmove updates continuously. A daily schedule keeps your dataset current. Pair it with `monitoringMode` to pay only for new listings each day.

### ❓ FAQ

**Do I need a Rightmove account?**
No. The scraper extracts publicly available listing data with no login, cookies, or API key required.

**Can I scrape sold prices and price history?**
Yes, two ways. For active listings, price history (previous sale prices for the address) is included automatically when `fullDetails` is enabled. For historical sold-prices by postcode, paste a `/house-prices/...` URL as a start URL.

**Why does Rightmove cap searches at 1000 results?**
This is a hard limit imposed by Rightmove itself (42 pages of 24 results). For bigger areas, split your search into smaller regions or outcodes and the scraper deduplicates across them.

**Can I track new listings over time?**
Yes, natively. Enable `monitoringMode` and schedule the actor daily on the same URL. Each run saves only the new listings compared to previous runs, cutting your cost by up to 90% on scheduled watchers. Enable `enableDelistingTracker` on top of that and the actor also logs properties that have disappeared from Rightmove.

**Does it work for overseas properties?**
Yes. Overseas URLs like `https://www.rightmove.co.uk/overseas-property-for-sale/Mallorca.html` are supported and return the same field structure.

**What if Rightmove changes their page structure?**
The scraper uses the same data sources Rightmove exposes to their own apps and search engines. If something breaks, we ship a fix within 24 hours.

### 💸 Pricing

This scraper uses **pay-per-event** pricing. You pay only for the properties you get, not for compute time or proxy traffic. Everything is included.

| Volume (monthly) | Price per 1,000 properties |
|---|---|
| First 25,000 | $2.00 |
| 25,000 to 50,000 | $1.50 |
| 50,000 to 200,000 | $1.20 |
| Above 200,000 | $1.00 |

All fields are included at every tier. No hidden surcharges for schools, price history, or full details. The same price covers search cards and enriched listings.

With `monitoringMode` enabled, you only pay for newly listed properties. A daily watcher on a postcode with 500 listings and 10 new properties per day costs about $0.02/day.

### 📬 Support

Need something this scraper doesn't do yet? We ship features fast.

- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations

Response time: usually under 24 hours.

# Actor input Schema

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

Any Rightmove search URL: sale listings, rentals, sold prices, or overseas. Examples: https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490 or https://www.rightmove.co.uk/property-to-rent/find.html?searchType=RENT\&locationIdentifier=OUTCODE%5E1859

## `propertyUrls` (type: `array`):

Individual Rightmove property URLs to scrape directly. Example: https://www.rightmove.co.uk/properties/163513427

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

Maximum number of properties to save across all URLs. Rightmove caps search results at 1000 per URL.

## `fullDetails` (type: `boolean`):

Visit each listing's detail page to extract the full 50+ fields: keyFeatures, floorplans, nearestStations, nearestSchools with OFSTED ratings, price history, livingCosts, tenure, agent contacts, and more. Disable for faster listing-only scraping at lower cost.

## `monitoringMode` (type: `boolean`):

When enabled, only newly listed properties compared to previous runs are saved. Ideal for scheduled runs that track a specific search URL over time. First run saves everything, subsequent runs save only fresh listings.

## `enableDelistingTracker` (type: `boolean`):

When enabled, tracks every property ID with its last-seen timestamp in the default key-value store. On subsequent runs, properties that disappear from Rightmove are logged as delisted.

## Actor input object example

```json
{
  "maxItems": 100,
  "fullDetails": true,
  "monitoringMode": false,
  "enableDelistingTracker": false
}
```

# Actor output Schema

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

Complete property data including: address, price, bedrooms, agent contacts, key features, images, floorplans, nearest stations, council tax, tenure, and more.

## `resultsCSV` (type: `string`):

Data in CSV format.

## `resultsExcel` (type: `string`):

Data in Excel format.

# 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": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/rightmove-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": 100 }

# Run the Actor and wait for it to finish
run = client.actor("silentflow/rightmove-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": 100
}' |
apify call silentflow/rightmove-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove Scraper",
        "description": "Rightmove scraper for UK real estate data. Extract property listings for sale or rent, sold prices, agent contacts, price history, nearest schools with OFSTED ratings, stations, EPC ratings, floorplans. Paste any Rightmove search URL. Export to JSON, CSV, Excel.",
        "version": "1.0",
        "x-build-id": "ec6qDUEhGSkiISncG"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/silentflow~rightmove-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-silentflow-rightmove-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/silentflow~rightmove-scraper/runs": {
            "post": {
                "operationId": "runs-sync-silentflow-rightmove-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/silentflow~rightmove-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-silentflow-rightmove-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": {
                    "startUrls": {
                        "title": "Rightmove search URLs",
                        "type": "array",
                        "description": "Any Rightmove search URL: sale listings, rentals, sold prices, or overseas. Examples: https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490 or https://www.rightmove.co.uk/property-to-rent/find.html?searchType=RENT&locationIdentifier=OUTCODE%5E1859",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "propertyUrls": {
                        "title": "Individual property URLs",
                        "type": "array",
                        "description": "Individual Rightmove property URLs to scrape directly. Example: https://www.rightmove.co.uk/properties/163513427",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum properties",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of properties to save across all URLs. Rightmove caps search results at 1000 per URL.",
                        "default": 100
                    },
                    "fullDetails": {
                        "title": "Scrape detail pages",
                        "type": "boolean",
                        "description": "Visit each listing's detail page to extract the full 50+ fields: keyFeatures, floorplans, nearestStations, nearestSchools with OFSTED ratings, price history, livingCosts, tenure, agent contacts, and more. Disable for faster listing-only scraping at lower cost.",
                        "default": true
                    },
                    "monitoringMode": {
                        "title": "Monitoring mode (new listings only)",
                        "type": "boolean",
                        "description": "When enabled, only newly listed properties compared to previous runs are saved. Ideal for scheduled runs that track a specific search URL over time. First run saves everything, subsequent runs save only fresh listings.",
                        "default": false
                    },
                    "enableDelistingTracker": {
                        "title": "Delisting tracker",
                        "type": "boolean",
                        "description": "When enabled, tracks every property ID with its last-seen timestamp in the default key-value store. On subsequent runs, properties that disappear from Rightmove are logged as delisted.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
