# OpenSanctions Entities Scraper (`automation-lab/opensanctions-entities-scraper`) Actor

Stream public OpenSanctions entities for AML/KYC screening. Filter sanctions, PEPs, companies, vessels, and watchlists by dataset, topic, schema, country, or name.

- **URL**: https://apify.com/automation-lab/opensanctions-entities-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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.
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/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

## OpenSanctions Entities Scraper

Export sanctions, PEP, company, vessel, and watchlist entities from public OpenSanctions FollowTheMoney datasets.

OpenSanctions publishes a large public compliance data graph. This Apify Actor streams the official `entities.ftm.json` exports, applies practical filters, and saves normalized records that are ready for AML, KYC, KYB, due-diligence, and monitoring workflows.

### What does OpenSanctions Entities Scraper do?

OpenSanctions Entities Scraper reads public OpenSanctions entity exports over HTTP.

It does not use a browser.

It does not need a login.

It does not download the whole multi-GB export into memory.

Instead, it streams line-delimited FollowTheMoney JSON and stops when your requested result count or scan limit is reached.

Use it to collect:

- 🧾 Sanctions entities
- 🧑‍💼 Politically exposed persons (PEPs)
- 🏢 Companies and organizations
- 🚢 Vessels
- 👁 Watchlist and risk-related entities
- 🔗 Source URLs and provenance metadata

### Who is it for?

Compliance teams use it to export screening data for AML and KYC operations.

Risk analysts use it to collect watchlist candidates for enhanced due diligence.

Data engineers use it to pipe OpenSanctions records into warehouses, screening systems, and graph databases.

Investigators use it to create bounded extracts around a topic, country, schema, dataset, or name.

Developers use it when they need an API-friendly OpenSanctions exporter inside Apify workflows.

### Why use this scraper?

OpenSanctions bulk exports are powerful, but the default aggregated entity file is very large.

A naive script can load too much data, run out of memory, or spend time scanning records that are not relevant.

This actor provides a safer workflow:

- ✅ Stream official public exports
- ✅ Cap saved entities with `maxItems`
- ✅ Cap scanned lines with `maxScanLines`
- ✅ Filter by schema, country, dataset, topic, target flag, or name
- ✅ Keep normalized fields stable for integrations
- ✅ Optionally include raw FollowTheMoney properties

### Data source

The actor uses public OpenSanctions export URLs such as:

`https://data.opensanctions.org/datasets/latest/default/entities.ftm.json`

You can set `datasetSlug` to use another public dataset folder.

You can also provide a full `exportUrl` when you need a specific public OpenSanctions export.

### Input options

| Field | Type | Description |
| --- | --- | --- |
| `datasetSlug` | string | OpenSanctions dataset folder, default `default`. |
| `exportUrl` | string | Optional full HTTPS OpenSanctions export URL. |
| `maxItems` | integer | Maximum matching entities to save. |
| `maxScanLines` | integer | Safety limit for scanned JSON lines. |
| `schemas` | string[] | FollowTheMoney schemas such as `Person`, `Company`, `Vessel`. |
| `countries` | string[] | Country, nationality, citizenship, jurisdiction, or incorporation filters. |
| `datasets` | string[] | Source dataset ids such as `us_ofac_sdn` or `wd_peps`. |
| `topics` | string[] | Inferred topics such as `sanctions`, `peps`, `crime`, `debarment`, `watchlists`. |
| `nameQuery` | string | Case-insensitive caption/name/alias substring. |
| `targetOnly` | boolean | Return only entities marked as screening targets. |
| `includeProperties` | boolean | Include raw FollowTheMoney properties. |

### Example input: PEP people and companies

```json
{
  "datasetSlug": "default",
  "maxItems": 100,
  "maxScanLines": 50000,
  "schemas": ["Person", "Company"],
  "topics": ["peps"],
  "targetOnly": false,
  "includeProperties": false
}
````

### Example input: sanctions targets

```json
{
  "datasetSlug": "default",
  "maxItems": 250,
  "maxScanLines": 200000,
  "topics": ["sanctions"],
  "targetOnly": true
}
```

### Example input: name search

```json
{
  "datasetSlug": "default",
  "nameQuery": "gazprom",
  "maxItems": 50,
  "maxScanLines": 500000,
  "includeProperties": true
}
```

### Output data

Each dataset item is one OpenSanctions entity.

| Field | Description |
| --- | --- |
| `id` | OpenSanctions entity id. |
| `caption` | Human-readable entity caption. |
| `schema` | FollowTheMoney schema. |
| `entityType` | Same schema value, optimized for table exports. |
| `target` | Whether OpenSanctions marks the entity as a screening target. |
| `datasets` | Source OpenSanctions dataset ids. |
| `referents` | Referent identifiers attached to the entity. |
| `countries` | Country and jurisdiction-like values. |
| `topics` | Inferred topics such as sanctions or PEPs. |
| `names` | Name properties. |
| `aliases` | Alias and weak alias properties. |
| `identifiers` | Tax, registration, LEI, ISIN, IMO, passport, and id values where present. |
| `birthDates` | Birth dates and birth places where present. |
| `sanctionsPrograms` | Program, authority, publisher, or classification fields where present. |
| `sourceUrls` | Source URLs embedded in the OpenSanctions properties. |
| `firstSeen` | First seen timestamp from OpenSanctions. |
| `lastSeen` | Last seen timestamp from OpenSanctions. |
| `lastChange` | Last changed timestamp from OpenSanctions. |
| `datasetSlug` | Dataset slug used for this run. |
| `exportUrl` | Export URL streamed by the actor. |
| `matchedBy` | Filters that matched the record. |
| `scannedLine` | Line number in the streamed export. |
| `properties` | Optional raw properties object. |
| `scrapedAt` | Actor scrape timestamp. |

### How much does it cost to export OpenSanctions entities?

The actor uses pay-per-event pricing.

There is a small start charge per run.

There is a per-entity charge for every saved dataset item.

Current bootstrap pricing is configured in the actor package and will be calibrated from cloud cost runs before Store publication.

Use lower `maxItems` and targeted filters for small ad-hoc checks.

Use larger `maxScanLines` for narrow searches that may appear later in the export.

### How to run it

1. Open the actor on Apify.
2. Choose an OpenSanctions `datasetSlug` or provide an `exportUrl`.
3. Set `maxItems` to the number of entities you need.
4. Add filters for schemas, topics, countries, source datasets, or names.
5. Start the run.
6. Download results as JSON, CSV, Excel, or via the Apify API.

### Tips for better results

Start broad with a low `maxItems` value.

Increase `maxScanLines` when you use narrow filters.

Use `targetOnly=true` for screening-target exports.

Use `includeProperties=true` only when your downstream system needs raw FollowTheMoney fields.

Use `datasets` when you know the exact OpenSanctions source list id.

Use `topics` for faster business-friendly filtering.

### Integrations

Send results to an AML screening queue.

Load entities into a data warehouse.

Create recurring Apify schedules for watchlist monitoring.

Send dataset items to Make, Zapier, Airbyte, or a webhook.

Join entity ids with your internal counterparty records.

Store raw `properties` for graph enrichment.

### API usage with Node.js

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/opensanctions-entities-scraper').call({
  datasetSlug: 'default',
  maxItems: 100,
  maxScanLines: 50000,
  topics: ['peps'],
  schemas: ['Person', 'Company']
});
console.log(run.defaultDatasetId);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient()
run = client.actor('automation-lab/opensanctions-entities-scraper').call(run_input={
    'datasetSlug': 'default',
    'maxItems': 100,
    'maxScanLines': 50000,
    'topics': ['peps'],
    'schemas': ['Person', 'Company'],
})
print(run['defaultDatasetId'])
```

### API usage with cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~opensanctions-entities-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"datasetSlug":"default","maxItems":100,"maxScanLines":50000,"topics":["peps"],"schemas":["Person","Company"]}'
```

### MCP usage

Use the Apify MCP server when you want AI tools to run this actor.

MCP URL for hosted HTTP clients:

`https://mcp.apify.com/?tools=automation-lab/opensanctions-entities-scraper`

Claude Code setup:

```bash
claude mcp add --transport http apify-opensanctions \
  "https://mcp.apify.com/?tools=automation-lab/opensanctions-entities-scraper"
```

Claude Desktop setup:

1. Open **Settings → Developer → Edit Config**.
2. Add the server below.
3. Restart Claude Desktop and ask for the OpenSanctions tool.

Cursor setup:

1. Open **Cursor Settings → MCP → Add new server**.
2. Choose **HTTP** transport.
3. Paste `https://mcp.apify.com/?tools=automation-lab/opensanctions-entities-scraper`.

VS Code setup:

1. Install an MCP-compatible assistant extension.
2. Add a new **HTTP** MCP server.
3. Use `https://mcp.apify.com/?tools=automation-lab/opensanctions-entities-scraper` as the server URL.

Local stdio fallback for desktop clients that do not support HTTP MCP:

```json
{
  "mcpServers": {
    "apify-opensanctions": {
      "command": "npx",
      "args": [
        "-y",
        "@apify/actors-mcp-server",
        "--actors",
        "automation-lab/opensanctions-entities-scraper"
      ],
      "env": {
        "APIFY_TOKEN": "YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

Example prompts:

- "Export 100 PEP-related OpenSanctions entities and summarize the countries represented."
- "Find OpenSanctions entities whose caption contains Gazprom and include raw properties."
- "Create a sanctions target extract with source URLs and identifiers."

### Performance notes

The default OpenSanctions export can be several GB.

The actor streams it instead of buffering it.

A run can still take longer when filters are rare.

`maxScanLines` is the main safety control for scan time.

`maxItems` is the main cost and output control.

### Troubleshooting: no results

If the run succeeds with zero items, your filters may be too narrow for the scanned section of the export.

Try one of these changes:

- Remove `countries` or `datasets` filters.
- Increase `maxScanLines`.
- Use a broader `topics` value.
- Disable `targetOnly`.
- Run a small unfiltered sample to inspect available schemas and datasets.

### Troubleshooting: large rows

If rows are too large, set `includeProperties=false`.

The normalized fields usually cover common analytics workflows.

Raw properties are useful for engineering pipelines but can significantly increase export size.

### Legality and responsible use

OpenSanctions publishes public datasets for transparency, compliance, research, and public-interest use cases.

You are responsible for complying with applicable laws, OpenSanctions terms, privacy requirements, sanctions-screening obligations, and internal compliance policies.

Do not use exported data to make automated decisions without appropriate review and controls.

### Related scrapers

Related automation-lab actors may help when you need a narrower official list instead of the OpenSanctions aggregate.

- https://apify.com/automation-lab/ofac-sanctions-list-scraper
- https://apify.com/automation-lab/eu-sanctions-scraper

Use this OpenSanctions scraper when you need the broader aggregated entity graph.

### FAQ

#### Does this actor require an OpenSanctions API key?

No. It reads public OpenSanctions export files.

#### Does it use a browser?

No. It is an HTTP streaming actor.

#### Can I select a specific OpenSanctions dataset?

Yes. Use `datasetSlug` or provide a full public `exportUrl`.

#### Can I export raw FollowTheMoney properties?

Yes. Set `includeProperties=true`.

#### Why is there a scan-line limit?

The default export is very large. The limit prevents accidental long scans and makes costs predictable.

#### Can I schedule this actor?

Yes. Use Apify schedules to create recurring OpenSanctions monitoring exports.

### Changelog

Initial version streams public OpenSanctions entity exports, filters records, and saves normalized compliance-ready dataset rows.

# Actor input Schema

## `datasetSlug` (type: `string`):

Dataset folder from data.opensanctions.org. Use default for the aggregated OpenSanctions export, or values such as sanctions, peps, wikidata, or another public dataset slug.

## `exportUrl` (type: `string`):

Optional full HTTPS OpenSanctions export URL. Leave empty to use datasetSlug with the latest public export.

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

Maximum matching entity records to push to the dataset.

## `maxScanLines` (type: `integer`):

Safety cap for streaming large OpenSanctions exports. Increase when narrow filters do not appear near the beginning of the file.

## `schemas` (type: `array`):

Optional FollowTheMoney schemas to include, e.g. Person, Company, Organization, Vessel, LegalEntity, Sanction.

## `countries` (type: `array`):

Optional country, nationality, citizenship, jurisdiction, or incorporation country codes/names to include.

## `datasets` (type: `array`):

Optional source dataset ids to include, e.g. us\_ofac\_sdn, eu\_fsf, wd\_peps. Matches the entity datasets array.

## `topics` (type: `array`):

Optional inferred topics to include: sanctions, peps, crime, debarment, watchlists.

## `nameQuery` (type: `string`):

Optional case-insensitive substring matched against caption, names, and aliases.

## `targetOnly` (type: `boolean`):

When enabled, only return entities marked as OpenSanctions screening targets.

## `includeProperties` (type: `boolean`):

Include the raw FollowTheMoney properties object for downstream mapping. This can make dataset rows much larger.

## Actor input object example

```json
{
  "datasetSlug": "default",
  "maxItems": 10,
  "maxScanLines": 20,
  "schemas": [
    "Person",
    "Company"
  ],
  "countries": [],
  "datasets": [],
  "topics": [],
  "targetOnly": false,
  "includeProperties": false
}
```

# Actor output Schema

## `overview` (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 = {
    "datasetSlug": "default",
    "maxItems": 10,
    "maxScanLines": 20,
    "schemas": [
        "Person",
        "Company"
    ],
    "countries": [],
    "datasets": [],
    "topics": [],
    "targetOnly": false,
    "includeProperties": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/opensanctions-entities-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 = {
    "datasetSlug": "default",
    "maxItems": 10,
    "maxScanLines": 20,
    "schemas": [
        "Person",
        "Company",
    ],
    "countries": [],
    "datasets": [],
    "topics": [],
    "targetOnly": False,
    "includeProperties": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/opensanctions-entities-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 '{
  "datasetSlug": "default",
  "maxItems": 10,
  "maxScanLines": 20,
  "schemas": [
    "Person",
    "Company"
  ],
  "countries": [],
  "datasets": [],
  "topics": [],
  "targetOnly": false,
  "includeProperties": false
}' |
apify call automation-lab/opensanctions-entities-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OpenSanctions Entities Scraper",
        "description": "Stream public OpenSanctions entities for AML/KYC screening. Filter sanctions, PEPs, companies, vessels, and watchlists by dataset, topic, schema, country, or name.",
        "version": "0.1",
        "x-build-id": "y0RY4rKZ6myF5A1Au"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~opensanctions-entities-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-opensanctions-entities-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/automation-lab~opensanctions-entities-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-opensanctions-entities-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/automation-lab~opensanctions-entities-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-opensanctions-entities-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": {
                    "datasetSlug": {
                        "title": "OpenSanctions dataset slug",
                        "type": "string",
                        "description": "Dataset folder from data.opensanctions.org. Use default for the aggregated OpenSanctions export, or values such as sanctions, peps, wikidata, or another public dataset slug.",
                        "default": "default"
                    },
                    "exportUrl": {
                        "title": "Custom entities.ftm.json URL",
                        "type": "string",
                        "description": "Optional full HTTPS OpenSanctions export URL. Leave empty to use datasetSlug with the latest public export."
                    },
                    "maxItems": {
                        "title": "Maximum entities to save",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum matching entity records to push to the dataset.",
                        "default": 10
                    },
                    "maxScanLines": {
                        "title": "Maximum export lines to scan",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Safety cap for streaming large OpenSanctions exports. Increase when narrow filters do not appear near the beginning of the file.",
                        "default": 20
                    },
                    "schemas": {
                        "title": "Entity schemas",
                        "type": "array",
                        "description": "Optional FollowTheMoney schemas to include, e.g. Person, Company, Organization, Vessel, LegalEntity, Sanction.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Countries / jurisdictions",
                        "type": "array",
                        "description": "Optional country, nationality, citizenship, jurisdiction, or incorporation country codes/names to include.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "datasets": {
                        "title": "OpenSanctions source datasets",
                        "type": "array",
                        "description": "Optional source dataset ids to include, e.g. us_ofac_sdn, eu_fsf, wd_peps. Matches the entity datasets array.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "topics": {
                        "title": "Topics",
                        "type": "array",
                        "description": "Optional inferred topics to include: sanctions, peps, crime, debarment, watchlists.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "nameQuery": {
                        "title": "Name / caption contains",
                        "type": "string",
                        "description": "Optional case-insensitive substring matched against caption, names, and aliases."
                    },
                    "targetOnly": {
                        "title": "Only target entities",
                        "type": "boolean",
                        "description": "When enabled, only return entities marked as OpenSanctions screening targets.",
                        "default": false
                    },
                    "includeProperties": {
                        "title": "Include raw properties",
                        "type": "boolean",
                        "description": "Include the raw FollowTheMoney properties object for downstream mapping. This can make dataset rows much larger.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
