# Rightmove, Zoopla & OnTheMarket UK Property Scraper (`jungle_synthesizer/rightmove-zoopla-onthemarket-uk-scraper`) Actor

Scrapes UK property listings from Rightmove, Zoopla, and OnTheMarket in one run. Returns unified records with price, bedrooms, EPC rating, council tax band, tenure, leasehold details, agent info, and coordinates. Cross-portal coverage with price history from Zoopla.

- **URL**: https://apify.com/jungle\_synthesizer/rightmove-zoopla-onthemarket-uk-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Real estate, Lead generation
- **Stats:** 3 total users, 2 monthly users, 60.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Rightmove, Zoopla & OnTheMarket UK Property Scraper

Scrapes UK property listings from [Rightmove](https://www.rightmove.co.uk), [Zoopla](https://www.zoopla.co.uk), and [OnTheMarket](https://www.onthemarket.com) in a single run. Returns unified records with price, bedrooms, EPC rating, council tax band, tenure, leasehold details, agent info, coordinates, and price history — across all three portals from one actor.

---

### Rightmove, Zoopla & OnTheMarket Scraper Features

- Extracts listings from all three UK property portals with a single run and a single output schema
- Collects 30+ fields per listing including price, bedrooms, bathrooms, postcode, coordinates, and agent contact
- Returns EPC rating, council tax band, tenure type, and remaining lease years for properties where available
- Retrieves Zoopla price history and Land Registry last-sold data — the field that most scrapers skip
- Accepts any search URL from any of the three portals, or falls back to sensible London defaults
- Filters by listing type (sale, rent, or both) across all portals simultaneously
- Returns clean, flat JSON — no nested objects, no arrays, just columns that load straight into a spreadsheet or database

---

### Who Uses UK Property Portal Data?

- **PropTech developers** — Build valuation models, automated alerts, or comparison tools that need real-time listings from all three portals at once
- **BTL investors** — Track yield opportunities across regions, compare listing prices to sold prices, filter by EPC rating before viewing
- **Estate agent intel firms** — Monitor competitor stock levels, pricing strategy, and time-on-market across portals simultaneously
- **Mortgage lead generators** — Match active buyers to pre-qualified listings, trigger outreach when price reductions appear
- **Academic researchers** — Build price trend datasets with the sold-price history that Zoopla surfaces but most scrapers ignore
- **Data brokers** — Maintain a unified UK property database without running three separate scrapers and reconciling the output

---

### How the Rightmove, Zoopla & OnTheMarket Scraper Works

1. Paste a search URL from Rightmove, Zoopla, or OnTheMarket — or use the defaults. The actor detects the portal from the URL and routes accordingly.
2. The scraper pages through search results, collecting property IDs and detail URLs. Zoopla's Cloudflare challenge is solved automatically; Rightmove and OnTheMarket require no bypass.
3. Each detail page is fetched and parsed. Rightmove data lives in the server-rendered HTML. OnTheMarket uses Next.js with a full Redux state dump in the page. Zoopla follows the same pattern once the challenge clears.
4. All three portals are mapped to the same output schema. The `platform` field tells you where each record came from. `maxItems` caps the total across all portals combined.

---

### Input

```json
{
  "searchUrls": [
    { "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&numberOfPropertiesPerPage=24&index=0&includeSSTC=false&viewType=LIST&channel=BUY" },
    { "url": "https://www.onthemarket.com/for-sale/property/london/?max-price=500000" }
  ],
  "listingType": "sale",
  "maxItems": 50
}
````

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchUrls` | array | London defaults | Search result URLs from Rightmove, Zoopla, or OnTheMarket. Use the search form on each site to filter by location, price, bedrooms, and property type, then paste the URL here. |
| `listingType` | string | `both` | Filter by listing type. Options: `sale`, `rent`, `both`. |
| `maxItems` | integer | 15 | Maximum total records to return across all portals in the run. |

***

### Rightmove, Zoopla & OnTheMarket Output Fields

```json
{
  "listing_id": "88574661",
  "platform": "rightmove",
  "url": "https://www.rightmove.co.uk/properties/88574661",
  "listing_type": "sale",
  "property_type": "apartment",
  "title": "2 bedroom apartment for sale in Pullman Court, Streatham Hill, London, SW2",
  "price_gbp": 500000,
  "price_qualifier": null,
  "rental_frequency": null,
  "bedrooms": 2,
  "bathrooms": 1,
  "reception_rooms": null,
  "area_sqft": null,
  "tenure": "Leasehold",
  "lease_years": 108,
  "ground_rent": null,
  "service_charge": null,
  "council_tax_band": "D",
  "epc_rating": "B",
  "address": "Pullman Court, Streatham Hill, London, SW2",
  "postcode": "SW2 4ST",
  "town": null,
  "region": null,
  "latitude": 51.4498,
  "longitude": -0.1256,
  "agent_name": "Barnard Marcus",
  "agent_branch": "Barnard Marcus, Streatham",
  "agent_phone": "020 8769 0000",
  "agency_url": "https://www.barnardmarcus.co.uk",
  "images": "https://media.rightmove.co.uk/property-photo/88574661/image-0.jpeg,https://media.rightmove.co.uk/property-photo/88574661/image-1.jpeg",
  "floorplan": "https://media.rightmove.co.uk/floorplan/88574661/floorplan-0.jpeg",
  "description": "A well-proportioned two-bedroom apartment in the iconic Pullman Court development...",
  "features": "Porter service, Residents parking, Private garden",
  "listed_at": "2024-11-03",
  "price_history": "[{\"date\":\"2024-11-03\",\"price\":510000},{\"date\":\"2025-01-15\",\"price\":500000}]",
  "last_sold_price": 425000,
  "last_sold_date": "2019-06-14",
  "scrapedAt": "2026-05-15T23:38:32.337Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `listing_id` | string | Portal-native listing ID |
| `platform` | string | Source portal: `rightmove`, `zoopla`, or `onthemarket` |
| `url` | string | Canonical listing URL on the source portal |
| `listing_type` | string | `sale` or `rent` |
| `property_type` | string | Property type — Flat, Detached house, Semi-detached house, Terraced house, etc. |
| `title` | string | Full listing title |
| `price_gbp` | integer | Asking price in GBP |
| `price_qualifier` | string | Guide price, Offers over, Fixed price, etc. |
| `rental_frequency` | string | `pcm` or `pw` for rental listings |
| `bedrooms` | integer | Number of bedrooms |
| `bathrooms` | integer | Number of bathrooms |
| `reception_rooms` | integer | Number of reception/sitting rooms |
| `area_sqft` | number | Floor area in square feet, where available |
| `tenure` | string | Freehold, Leasehold, Share of freehold, or Commonhold |
| `lease_years` | integer | Remaining lease years for leasehold properties |
| `ground_rent` | number | Annual ground rent in GBP |
| `service_charge` | number | Annual service charge in GBP |
| `council_tax_band` | string | UK council tax band (A–H) |
| `epc_rating` | string | Energy Performance Certificate rating (A–G) |
| `address` | string | Full display address |
| `postcode` | string | UK postcode |
| `town` | string | Town or city |
| `region` | string | UK region or county |
| `latitude` | number | Latitude coordinate |
| `longitude` | number | Longitude coordinate |
| `agent_name` | string | Estate agent company name |
| `agent_branch` | string | Agent branch name or location |
| `agent_phone` | string | Agent contact phone |
| `agency_url` | string | Agent website or profile URL |
| `images` | string | Comma-separated list of property image URLs |
| `floorplan` | string | Floorplan image URL |
| `description` | string | Full property description |
| `features` | string | Comma-separated key property features |
| `listed_at` | string | Date first listed (ISO date) |
| `price_history` | string | JSON array of price changes with date and amount (Zoopla) |
| `last_sold_price` | integer | Last sold price from Land Registry in GBP (Zoopla) |
| `last_sold_date` | string | Date of last sale (ISO date, Zoopla) |
| `scrapedAt` | string | ISO-8601 timestamp when the record was scraped |

***

### 🔍 FAQ

#### How do I scrape Rightmove, Zoopla, and OnTheMarket at the same time?

The actor handles all three in one run. Provide search URLs from any combination of the three portals in `searchUrls`. If you only provide Rightmove URLs, only Rightmove is scraped — and that is fine.

#### How much does this actor cost to run?

The actor charges $0.10 per start and $0.001 per record. A run returning 100 listings costs roughly $0.20. Zoopla adds overhead from the Cloudflare bypass, but it is baked into the pricing.

#### Does the scraper handle Zoopla's Cloudflare protection?

Yes. Zoopla uses a managed Cloudflare Turnstile challenge that blocks most plain HTTP scrapers. This actor solves it automatically using a residential proxy and a captcha solver. You do not configure anything — it works, or logs a warning and skips Zoopla seeds if the solve fails.

#### Can I get price history and sold prices?

Price history and last-sold data come from Zoopla, which surfaces Land Registry data on listing detail pages. Rightmove and OnTheMarket do not expose this. Include at least one Zoopla search URL in your input to capture these fields.

#### Do I need to supply search URLs?

No. If `searchUrls` is empty, the actor falls back to default London for-sale searches on Rightmove and OnTheMarket. Useful for testing. For production, paste the exact search URL from the portal's own search interface with your preferred filters applied.

***

### Need More Features?

Need additional portals, custom field extraction, or region-specific coverage? [File an issue](https://console.apify.com/actors/xwXMthpapDMzrdUGk/issues) or get in touch.

### Why Use the Rightmove, Zoopla & OnTheMarket Scraper?

- **Tri-portal coverage** — One actor, one run, one schema. Most scrapers pick one portal and stop. This one does all three and hands you a consistent output regardless of source.
- **Leasehold detail** — Returns tenure type, remaining lease years, ground rent, and service charge. The fields that matter when evaluating a flat purchase, and the ones most scrapers leave blank.
- **Price history from Zoopla** — Captures the Land Registry sold-price integration that Zoopla surfaces on detail pages, giving you a trail of price changes that Rightmove does not offer.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

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

List of Rightmove, Zoopla, or OnTheMarket search result URLs to scrape. Each URL should be a property search results page from any of the three portals. If omitted, a default UK-wide search is used.

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

Filter by listing type: 'sale', 'rent', or 'both'.

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

Maximum number of property records to return (across all portals combined). Default: 15.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "searchUrls": [
    {
      "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&numberOfPropertiesPerPage=24&index=0&includeSSTC=false&viewType=LIST&channel=BUY"
    },
    {
      "url": "https://www.onthemarket.com/for-sale/property/london/?max-price=500000"
    }
  ],
  "listingType": "both",
  "maxItems": 15
}
```

# 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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "searchUrls": [
        {
            "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&numberOfPropertiesPerPage=24&index=0&includeSSTC=false&viewType=LIST&channel=BUY"
        },
        {
            "url": "https://www.onthemarket.com/for-sale/property/london/?max-price=500000"
        }
    ],
    "listingType": "both",
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/rightmove-zoopla-onthemarket-uk-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "searchUrls": [
        { "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&numberOfPropertiesPerPage=24&index=0&includeSSTC=false&viewType=LIST&channel=BUY" },
        { "url": "https://www.onthemarket.com/for-sale/property/london/?max-price=500000" },
    ],
    "listingType": "both",
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/rightmove-zoopla-onthemarket-uk-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "searchUrls": [
    {
      "url": "https://www.rightmove.co.uk/property-for-sale/find.html?locationIdentifier=REGION%5E87490&sortType=6&numberOfPropertiesPerPage=24&index=0&includeSSTC=false&viewType=LIST&channel=BUY"
    },
    {
      "url": "https://www.onthemarket.com/for-sale/property/london/?max-price=500000"
    }
  ],
  "listingType": "both",
  "maxItems": 15
}' |
apify call jungle_synthesizer/rightmove-zoopla-onthemarket-uk-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Rightmove, Zoopla & OnTheMarket UK Property Scraper",
        "description": "Scrapes UK property listings from Rightmove, Zoopla, and OnTheMarket in one run. Returns unified records with price, bedrooms, EPC rating, council tax band, tenure, leasehold details, agent info, and coordinates. Cross-portal coverage with price history from Zoopla.",
        "version": "0.1",
        "x-build-id": "srv2i48666FCSE8Su"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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/jungle_synthesizer~rightmove-zoopla-onthemarket-uk-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-rightmove-zoopla-onthemarket-uk-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": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "searchUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "List of Rightmove, Zoopla, or OnTheMarket search result URLs to scrape. Each URL should be a property search results page from any of the three portals. If omitted, a default UK-wide search is used.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "sale",
                            "rent",
                            "both"
                        ],
                        "type": "string",
                        "description": "Filter by listing type: 'sale', 'rent', or 'both'.",
                        "default": "both"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of property records to return (across all portals combined). Default: 15.",
                        "default": 15
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
