# UK Planning Applications Scraper — All Councils (`memo23/uk-planning-applications-scraper`) Actor

Get every UK planning application in one run — all ~420 councils, no API key. Filter by council, type, status, size or date and export address, decision, dates, coordinates and the architect firm behind each project. Ideal for construction leads. Billed per result.

- **URL**: https://apify.com/memo23/uk-planning-applications-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Real estate, AI, Agents
- **Stats:** 13 total users, 12 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

## UK Planning Applications Scraper

Scrape UK planning applications from **all ~420 local planning authorities at once** — one API, no council-by-council setup. Filter by council, application type, status, size, keyword or date, and get one clean row per application with address, description, decision, all key dates, **map coordinates**, and the **agent (architect) company** where the council publishes it. Powered by the [PlanIt](https://www.planit.org.uk) aggregator — **no API key, no login**. Billed per result.

#### How it works

![How UK Planning Applications Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-planning.png)

#### ✨ Why use this scraper?

- **Every UK council in one run** — PlanIt already aggregates all ~420 local planning authorities, so you don't integrate 420 different council portals.
- **No API key required** — reads the public PlanIt API directly; works the moment you hit Run.
- **Map coordinates on most rows** — latitude/longitude for mapping, territory analysis and GIS.
- **Architect-firm leads** — the agent (architect) company is included where the council publishes it (coverage varies by council — strong in some, absent in others; see FAQ). Filter to only applications that carry one.
- **Rich filters** — application type, decision status, size band, minimum dwellings, council, keyword and date range, combined in one run.
- **Clean, stable fields** — placeholders like "See source" are normalised to `null`, dates kept as-is from the register, one row per application.

#### 🎯 Use cases

| Who | What they do with it |
|---|---|
| Construction & trades | Find live projects by area, type and size; reach the architect firm behind them |
| Property developers | Track approvals and refusals by council, spot sites and competitor activity |
| Suppliers & subcontractors | Build pipelines of permitted developments in their region |
| Researchers / analysts | Map planning activity and approval rates by council, type or date |
| PropTech / GIS teams | Feed structured, geocoded planning data into their own products |

#### 📥 Supported inputs

| Input | Example | Behaviour |
|---|---|---|
| Search keyword | `solar` | Free-text search on the application description |
| Council filter | `Cornwall` | Restrict to one or more local planning authorities |
| Application URL | `.../planapplic/Wiltshire/PL/2026/04272/` | That application is scraped directly |
| Filters | type / status / size / dates / dwellings | Combined server-side |

**Not supported:** downloading the application's PDF documents, and the full comment/objection threads — this actor covers the structured application record and its published agent/applicant company.

#### 🔄 How it works

1. **Classify input** — keywords, council names, filters and application URLs are assembled into PlanIt queries.
2. **Query** — PlanIt's aggregator API is called per keyword × council partition.
3. **Page** — results are streamed via offset pagination until `maxItems` or the result set is exhausted.
4. **Normalise** — each record is mapped to a stable row; placeholder values are nulled; coordinates and dates are extracted.
5. **Push** — the row lands in the dataset; export as JSON, CSV, Excel or via API. Optionally enrich the agent firm with a contact email.

#### ⚙️ Input parameters

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `[]` | Free-text terms matched on the application description |
| `startUrls` | array | `[]` | PlanIt application URLs (or search URLs) |
| `authorities` | array | `[]` (all) | Council names, e.g. Cornwall, Wiltshire, Leeds |
| `appType` | string | — | Full, Outline, Trees, Conditions, Advertising, Heritage, Listed, Telecoms, … |
| `appState` | string | — | Undecided, Permitted, Rejected, Withdrawn, Conditions, … |
| `appSize` | string | — | Small, Medium, Large |
| `recentDays` | integer | `7`* | Only applications from the last N days (*default when no other filter is set) |
| `startDate` / `endDate` | string | — | Date range, YYYY-MM-DD |
| `minDwellings` | integer | — | Minimum dwellings (target larger residential schemes) |
| `onlyWithAgentContact` | boolean | `false` | Only return applications that carry an agent (architect) name/company |
| `enrichEmails` | boolean | `false` | Best-effort email lookup for the agent firm |
| `maxItems` | integer | `1000` | Hard cap on rows collected |
| `maxConcurrency` | integer | `10` | Applications processed in parallel |
| `proxy` | object | Apify residential | Proxy settings |

#### 📊 Output overview

One row per planning application. Every row carries the core record (council, reference, address, postcode, coordinates, description, type/state/size, decision, all key dates, ward, case officer where published, document count and URLs, plus PlanIt and source-council links). The agent (architect) and applicant company are included when the council publishes them via PlanIt. Fields the source doesn't provide are `null`, so your column layout is stable across runs.

#### 📦 Output sample

```json
{
  "type": "planning-application",
  "source": "planit",
  "uid": "PA23/10208",
  "reference": "PA23/10208",
  "council": "Cornwall",
  "address": "Land At Truro, Cornwall, TR1",
  "postcode": "TR1",
  "coordinates": { "latitude": 50.2632, "longitude": -5.0510 },
  "description": "Construction of a single storey rear extension and associated works.",
  "appType": "Full",
  "appState": "Permitted",
  "appSize": "Small",
  "decision": "Approved",
  "receivedDate": "2023-07-03",
  "validatedDate": "2023-07-10",
  "decidedDate": "2023-08-14",
  "agentName": null,
  "agentCompany": "Ascent Architecture",
  "applicantName": null,
  "caseOfficer": "See planning portal",
  "ward": "Truro Boscawen",
  "documentsUrl": "https://planning.cornwall.gov.uk/...",
  "planitUrl": "https://www.planit.org.uk/planapplic/Cornwall/PA23/10208/",
  "sourceUrl": "https://planning.cornwall.gov.uk/...",
  "scrapedAt": "2026-07-18T05:05:00.000Z"
}
````

#### 🗂 Key output fields

| Group | Fields |
|---|---|
| Identity | `uid`, `reference`, `council`, `planitUrl`, `sourceUrl` |
| Location | `address`, `postcode`, `coordinates.{latitude,longitude}`, `ward`, `parish` |
| Application | `description`, `appType`, `appState`, `appSize`, `decision`, `nDwellings` |
| Dates | `receivedDate`, `validatedDate`, `consultationEndDate`, `targetDecisionDate`, `decidedDate` |
| People / leads | `agentCompany`, `agentName`, `agentAddress`, `applicantName`, `caseOfficer` (each where published) |
| Documents | `documentsCount`, `documentsUrl`, `commentUrl`, `mapUrl` |
| Meta | `scrapedAt` |

#### ❓ FAQ

**Which councils are covered?**
All ~420 UK local planning authorities that PlanIt aggregates — England, Scotland, Wales and Northern Ireland. Filter to specific councils with `authorities`, or leave it empty for the lot.

**Do I get the architect / agent contact?**
You get the **agent (architect) company** where the council publishes it through PlanIt — coverage varies a lot by council (strong in some, e.g. Cornwall; absent in others). The individual agent's **personal name and phone are not exposed by PlanIt** (they sit only on each council's own portal), so this actor does not claim them. Use `onlyWithAgentContact` to keep just the rows that carry a real agent company.

**Do I need a PlanIt or Companies House API key?**
No. This actor reads PlanIt's public API directly — no key, no account.

**How fresh is the data?**
PlanIt re-scrapes councils continuously; each row includes `lastScraped`. Use `recentDays` for daily-monitoring runs that only pick up new/changed applications.

**Can I get map coordinates?**
Yes — most rows include latitude/longitude. A few older or partially-scraped records may not.

#### 💬 Support

- Found a bug or need a field added? Open an issue on the actor's [Issues tab](https://apify.com/memo23/uk-planning-applications-scraper/issues).
- Direct contact: <muhamed.didovic@gmail.com>

#### 🛠 Additional services

- Custom output shape, per-council agent/phone enrichment, or one-off datasets: <muhamed.didovic@gmail.com>
- Need a similar scraper for another public dataset? Drop an email.
- For API access (no Apify fee, just a usage fee for the API): <muhamed.didovic@gmail.com>

#### 🔎 Explore more scrapers

If this Planning Applications Scraper was useful, see other scrapers at [memo23's Apify profile](https://apify.com/memo23). Pairs well with the [Companies House Scraper](https://apify.com/memo23/companies-house-scraper) and [Europages Scraper](https://apify.com/memo23/europages-scraper) for a full UK B2B / construction data stack.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by PlanIt, GOV.UK, the Planning Portal, or any UK local authority. All trademarks mentioned are the property of their respective owners.

The scraper accesses only the publicly available PlanIt aggregator API, which itself republishes public planning-register data from UK local planning authorities. No authenticated endpoints or content behind a login are accessed. Users are responsible for ensuring their use complies with PlanIt's terms, the source authorities' terms, applicable data-protection law (UK GDPR, etc.) — particularly when processing agent/applicant personal data — and any contractual obligations of their own organisation.

***

### SEO Keywords

uk planning applications scraper, planning application data, planit scraper, uk planning permission data, construction leads uk, planning applications api, local planning authority data, building project leads, architect leads uk, planning decisions scraper, uk council planning data, development pipeline data, planning application search, permitted development data, planning portal scraper, property development leads, planning applications by postcode, construction sales leads, planning data export, uk planning monitoring

# Actor input Schema

## `searchQueries` (type: `array`):

Free-text terms matched against the application description (e.g. 'solar', 'extension', 'demolition', 'wind turbine'). Each keyword runs its own search.

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

PlanIt application-page URLs like https://www.planit.org.uk/planapplic/Wiltshire/PL/2026/04272/ — scraped directly. Search URLs are also accepted (their search term is folded into keywords).

## `authorities` (type: `array`):

Restrict to these local planning authorities by name (e.g. Cornwall, Wiltshire, Birmingham, Leeds). Each runs as its own search. Leave empty for all ~420 UK councils.

## `appType` (type: `string`):

One application type. Allowed: Full, Outline, Amendment, Conditions, Trees, Advertising, Heritage, Listed, Telecoms, Certificate, Other. Leave empty for all.

## `appState` (type: `string`):

One decision state. Allowed: Undecided, Permitted, Rejected, Withdrawn, Conditions, Referred, Unresolved, Other. Leave empty for all.

## `appSize` (type: `string`):

One size band. Allowed: Small, Medium, Large. Leave empty for all.

## `recentDays` (type: `integer`):

Fast path for daily monitoring — only applications changed in the last N days. Leave empty to use a date range or return everything.

## `startDate` (type: `string`):

Only applications on/after this date. Format YYYY-MM-DD.

## `endDate` (type: `string`):

Only applications on/before this date. Format YYYY-MM-DD.

## `minDwellings` (type: `integer`):

Only applications proposing at least this many dwellings — useful for targeting larger residential developments. Leave empty for all.

## `onlyWithAgentContact` (type: `boolean`):

When enabled, only applications that carry an agent name or company are returned — a focused construction-leads list. Applications with no published agent are skipped (and not billed).

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email + website for the agent's company (or the applicant) by discovering their website. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.

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

Hard cap on the number of applications collected. Use this to limit billing.

## `maxConcurrency` (type: `integer`):

Maximum number of applications processed in parallel.

## `minConcurrency` (type: `integer`):

Minimum number of requests processed in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

PlanIt is a public API reachable without a proxy. A proxy is optional; residential is the safe default for large runs.

## Actor input object example

```json
{
  "searchQueries": [],
  "startUrls": [],
  "authorities": [],
  "recentDays": 7,
  "onlyWithAgentContact": false,
  "enrichEmails": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQueries": [],
    "startUrls": [],
    "authorities": [],
    "recentDays": 7,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/uk-planning-applications-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 = {
    "searchQueries": [],
    "startUrls": [],
    "authorities": [],
    "recentDays": 7,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/uk-planning-applications-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 '{
  "searchQueries": [],
  "startUrls": [],
  "authorities": [],
  "recentDays": 7,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/uk-planning-applications-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "UK Planning Applications Scraper — All Councils",
        "description": "Get every UK planning application in one run — all ~420 councils, no API key. Filter by council, type, status, size or date and export address, decision, dates, coordinates and the architect firm behind each project. Ideal for construction leads. Billed per result.",
        "version": "0.0",
        "x-build-id": "Tz81U0xli9NK8T9Du"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~uk-planning-applications-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-uk-planning-applications-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/memo23~uk-planning-applications-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-uk-planning-applications-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/memo23~uk-planning-applications-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-uk-planning-applications-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": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Free-text terms matched against the application description (e.g. 'solar', 'extension', 'demolition', 'wind turbine'). Each keyword runs its own search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "PlanIt application URLs (optional)",
                        "type": "array",
                        "description": "PlanIt application-page URLs like https://www.planit.org.uk/planapplic/Wiltshire/PL/2026/04272/ — scraped directly. Search URLs are also accepted (their search term is folded into keywords).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "authorities": {
                        "title": "Councils / planning authorities",
                        "type": "array",
                        "description": "Restrict to these local planning authorities by name (e.g. Cornwall, Wiltshire, Birmingham, Leeds). Each runs as its own search. Leave empty for all ~420 UK councils.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "appType": {
                        "title": "Application type",
                        "type": "string",
                        "description": "One application type. Allowed: Full, Outline, Amendment, Conditions, Trees, Advertising, Heritage, Listed, Telecoms, Certificate, Other. Leave empty for all."
                    },
                    "appState": {
                        "title": "Application state",
                        "type": "string",
                        "description": "One decision state. Allowed: Undecided, Permitted, Rejected, Withdrawn, Conditions, Referred, Unresolved, Other. Leave empty for all."
                    },
                    "appSize": {
                        "title": "Application size",
                        "type": "string",
                        "description": "One size band. Allowed: Small, Medium, Large. Leave empty for all."
                    },
                    "recentDays": {
                        "title": "Only applications from the last N days",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Fast path for daily monitoring — only applications changed in the last N days. Leave empty to use a date range or return everything."
                    },
                    "startDate": {
                        "title": "Date from (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Only applications on/after this date. Format YYYY-MM-DD."
                    },
                    "endDate": {
                        "title": "Date to (YYYY-MM-DD)",
                        "type": "string",
                        "description": "Only applications on/before this date. Format YYYY-MM-DD."
                    },
                    "minDwellings": {
                        "title": "Minimum dwellings",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Only applications proposing at least this many dwellings — useful for targeting larger residential developments. Leave empty for all."
                    },
                    "onlyWithAgentContact": {
                        "title": "Only applications with an agent (architect) contact",
                        "type": "boolean",
                        "description": "When enabled, only applications that carry an agent name or company are returned — a focused construction-leads list. Applications with no published agent are skipped (and not billed).",
                        "default": false
                    },
                    "enrichEmails": {
                        "title": "Enrich agent/applicant with contact emails (experimental)",
                        "type": "boolean",
                        "description": "If enabled, tries to find a contact email + website for the agent's company (or the applicant) by discovering their website. Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Maximum items to scrape",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on the number of applications collected. Use this to limit billing.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of applications processed in parallel.",
                        "default": 10
                    },
                    "minConcurrency": {
                        "title": "Min concurrency",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Minimum number of requests processed in parallel.",
                        "default": 1
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Number of retries before a failed request is given up.",
                        "default": 5
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "PlanIt is a public API reachable without a proxy. A proxy is optional; residential is the safe default for large runs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
