# Crates.io Scraper (`crawlerbros/crates-io-scraper`) Actor

Scrape Crates.io with the official Rust package registry. Search crates, lookup by exact name, browse by category or keyword, list a user's crates, and pull reverse dependencies. Returns downloads, versions, licenses, repository URLs, categories, keywords, and more.

- **URL**: https://apify.com/crawlerbros/crates-io-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Crates.io Scraper

Scrape **Crates.io** — the official Rust package registry — at scale via the public REST API. Search crates, look up exact names, browse categories or keywords, list a user's published crates, or pull reverse dependencies for any crate. Returns full metadata: downloads, version history, license, repository, categories, keywords, owners, and more.

### What this actor does

- **Six modes:**
  - `search` — free-text query over the crate catalog
  - `byCrates` — exact crate-name lookup (one record per name)
  - `byCategory` — browse a category slug (58 categories supported)
  - `byKeyword` — browse a keyword tag (`cli`, `async`, `wasm`, etc.)
  - `userCrates` — every crate published by a given crates.io user
  - `reverseDeps` — every crate that depends on a given source crate

- **Sort orders:** relevance, alphabetical, recent updates, recent downloads (90-day), all-time downloads, newest

- **Powerful filters:** all-time download range, 90-day download range, version-count range, updated-since-days, substring keyword match

- **Optional enrichments:** full version history (per-crate), owner users + teams

- **Pure HTTP** via the public `crates.io/api/v1` JSON API — no proxy, no cookies, no API key

### Output per crate

| Field | Description |
|---|---|
| `id` | Crate name (same as `name`) |
| `name` | Crate name |
| `description` | Short description from `Cargo.toml` |
| `homepage` | Project homepage URL |
| `documentation` | External docs URL (usually `docs.rs/...`) |
| `repository` | Source repository URL |
| `downloads` | All-time downloads |
| `recentDownloads` | Downloads in the last 90 days |
| `maxVersion` | Highest version published (incl. pre-release) |
| `maxStableVersion` | Highest stable version |
| `newestVersion` | Most recently published version |
| `defaultVersion` | The version shown on the crate page |
| `versionCount` | Total number of published versions |
| `yanked` | `true` if the latest version is yanked |
| `categories[]` | Category slugs |
| `categoryTitles[]` | Human-readable category names (detail mode) |
| `keywords[]` | Keyword tags |
| `createdAt` | First-publish timestamp (ISO 8601) |
| `updatedAt` | Latest-update timestamp (ISO 8601) |
| `exactMatch` | Whether the search query matched this crate's name exactly |
| `badges[]` | Crate badges |
| `links{}` | Absolute URLs to upstream sub-resources (versions, owners, etc.) |
| `crateUrl` | `https://crates.io/crates/{name}` |
| `docsRsUrl` | `https://docs.rs/{name}` |
| `versions[]` | (optional) Per-version detail: `num`, `downloads`, `license`, `crateSize`, `publishedAt`, `publishedBy`, `features`, `rustVersion`, `edition` |
| `owners{}` | (optional) `users[]` + `teams[]` lists |
| `recordType` | `crate` (or `reverseDependency` for that mode) |
| `scrapedAt` | ISO 8601 timestamp |

Empty fields are omitted — every key in the output has a real value.

#### `reverseDeps` mode output

When `mode=reverseDeps`, each record is a *consumer* crate (one that depends on the source crate), with: `name`, `crateUrl`, `versionNum`, `requirement`, `kind` (normal/dev/build), `optional`, `defaultFeatures`, `features[]`, `consumerDownloads`, `license`, `publishedAt`, plus `sourceCrate` for context.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | One of `search`, `byCrates`, `byCategory`, `byKeyword`, `userCrates`, `reverseDeps` |
| `searchQuery` | string | `tokio` | Free-text query (mode=search) |
| `crateNames` | array | – | Exact crate names (mode=byCrates) |
| `category` | enum | – | Category slug (58 options) |
| `keyword` | string | – | Keyword tag |
| `userLogin` | string | – | Crates.io username (mode=userCrates) |
| `sourceCrate` | string | – | Crate name (mode=reverseDeps) |
| `sortBy` | enum | `relevance` | `relevance`, `alphabetical`, `recent-updates`, `recent-downloads`, `downloads`, `new` |
| `minDownloads` / `maxDownloads` | int | – | All-time download bounds |
| `minRecentDownloads` / `maxRecentDownloads` | int | – | 90-day download bounds |
| `minVersionCount` / `maxVersionCount` | int | – | Version-count bounds |
| `updatedSinceDays` | int | – | Only emit crates updated within N days |
| `containsKeyword` | string | – | Case-insensitive substring filter |
| `includeVersions` | bool | `false` | Fetch full version history per crate |
| `includeOwners` | bool | `false` | Fetch owner users + teams per crate |
| `maxItems` | int | `20` | Hard cap (1–5000) |

### Example use cases

#### Find the most-downloaded async runtimes

```json
{
  "mode": "byCategory",
  "category": "asynchronous",
  "sortBy": "downloads",
  "maxItems": 25
}
````

#### Top CLI crates updated in the last 30 days

```json
{
  "mode": "byKeyword",
  "keyword": "cli",
  "sortBy": "recent-updates",
  "updatedSinceDays": 30,
  "maxItems": 50
}
```

#### Lookup specific crates with full version history

```json
{
  "mode": "byCrates",
  "crateNames": ["serde", "tokio", "clap"],
  "includeVersions": true,
  "includeOwners": true
}
```

#### All crates by David Tolnay

```json
{
  "mode": "userCrates",
  "userLogin": "dtolnay",
  "sortBy": "downloads",
  "maxItems": 100
}
```

#### Reverse dependencies of `clap`

```json
{
  "mode": "reverseDeps",
  "sourceCrate": "clap",
  "maxItems": 200
}
```

### Data Source

All data comes from the **public crates.io REST API** (`https://crates.io/api/v1`). The API is rate-limited by user-agent — this actor identifies itself politely per the [crates.io data-access policy](https://crates.io/data-access).

No authentication. No proxy required. No cookies. Works on the Apify free plan.

### Limitations

- The crates.io reverse-dependencies endpoint can 500 for extremely popular crates (e.g. `serde_json`, `tokio`). The actor surfaces this via a status message and asks you to pick a smaller source crate.
- Crates.io paginates search results; this actor stops after 2–3 consecutive empty pages (after filters) or when `maxItems` is hit.
- Versions enrichment is capped at the 50 most recent versions per crate to keep payloads reasonable.

### FAQ

**Q: Do I need an API key?**
No. crates.io's REST API is fully public.

**Q: Does it work without proxy?**
Yes. The actor runs without any proxy configuration.

**Q: How fresh is the data?**
Real-time. Every record is built from a live API call.

**Q: Can I get download stats per day?**
The per-version daily download stats are available via the `/crates/{name}/downloads` upstream endpoint. To keep dataset payloads compact, this actor surfaces aggregated `downloads` (all-time) and `recentDownloads` (90-day) on every record. Daily breakdown is exposed only when needed and is out of scope for this version.

**Q: Why am I missing some fields for some crates?**
Empty fields are dropped from the output (no nulls, no empty strings). If a crate has no `homepage` or no `repository`, those keys won't appear on its record.

# Actor input Schema

## `mode` (type: `string`):

What to fetch. `search` is a free-text query; `byCrates` looks up exact crate names; `byCategory` / `byKeyword` browse a taxonomy slug; `userCrates` lists everything published by a single crates.io user; `reverseDeps` lists crates that depend on a given crate (great for ecosystem analysis).

## `searchQuery` (type: `string`):

Free-text query passed to the crates.io search API.

## `crateNames` (type: `array`):

Exact crate names (e.g. `tokio`, `serde`, `clap`). URLs like `https://crates.io/crates/tokio` are also accepted.

## `category` (type: `string`):

Crates.io category slug. Used as the primary filter in `byCategory` mode; can also narrow `search` results.

## `keyword` (type: `string`):

Crates.io keyword tag. Used as the primary filter in `byKeyword` mode; can also narrow `search` results. Examples: `cli`, `async`, `wasm`, `parser`, `database`, `web`, `ai`, `llm`.

## `userLogin` (type: `string`):

Crates.io / GitHub username whose published crates you want (e.g. `dtolnay`, `seanmonstar`, `carllerche`).

## `sourceCrate` (type: `string`):

Crate name whose reverse dependencies you want to list (e.g. `clap`, `rand`, `regex`). Note: a few extremely popular crates (e.g. `serde`, `serde_json`, `tokio`) cause the upstream reverse\_dependencies endpoint to return 500 / time out; pick a smaller crate.

## `sortBy` (type: `string`):

How to order results returned by the crates.io API.

## `minDownloads` (type: `integer`):

Drop crates with fewer all-time downloads than this.

## `maxDownloads` (type: `integer`):

Drop crates with more all-time downloads than this.

## `minRecentDownloads` (type: `integer`):

Drop crates whose 90-day download count is below this.

## `maxRecentDownloads` (type: `integer`):

Drop crates whose 90-day download count is above this.

## `minVersionCount` (type: `integer`):

Drop crates with fewer published versions than this.

## `maxVersionCount` (type: `integer`):

Drop crates with more published versions than this.

## `updatedSinceDays` (type: `integer`):

Drop crates whose latest update is older than this many days. Useful for `recently maintained` searches.

## `containsKeyword` (type: `string`):

Case-insensitive substring filter applied to name / description / id / keywords.

## `includeVersions` (type: `boolean`):

Fetch and emit the full version list per crate (up to 50 versions). Adds one extra API call per crate.

## `includeOwners` (type: `boolean`):

Fetch and emit owner users + teams per crate. Adds two extra API calls per crate.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "tokio",
  "crateNames": [
    "tokio",
    "serde",
    "clap"
  ],
  "category": "",
  "sortBy": "relevance",
  "includeVersions": false,
  "includeOwners": false,
  "maxItems": 20
}
```

# Actor output Schema

## `crates` (type: `string`):

Dataset containing all scraped Crates.io records.

# 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 = {
    "mode": "search",
    "searchQuery": "tokio",
    "crateNames": [
        "tokio",
        "serde",
        "clap"
    ],
    "sortBy": "relevance",
    "includeVersions": false,
    "includeOwners": false,
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/crates-io-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 = {
    "mode": "search",
    "searchQuery": "tokio",
    "crateNames": [
        "tokio",
        "serde",
        "clap",
    ],
    "sortBy": "relevance",
    "includeVersions": False,
    "includeOwners": False,
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/crates-io-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 '{
  "mode": "search",
  "searchQuery": "tokio",
  "crateNames": [
    "tokio",
    "serde",
    "clap"
  ],
  "sortBy": "relevance",
  "includeVersions": false,
  "includeOwners": false,
  "maxItems": 20
}' |
apify call crawlerbros/crates-io-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Crates.io Scraper",
        "description": "Scrape Crates.io with the official Rust package registry. Search crates, lookup by exact name, browse by category or keyword, list a user's crates, and pull reverse dependencies. Returns downloads, versions, licenses, repository URLs, categories, keywords, and more.",
        "version": "1.0",
        "x-build-id": "2P97GwkNEbm6Uakol"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~crates-io-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-crates-io-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/crawlerbros~crates-io-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-crates-io-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/crawlerbros~crates-io-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-crates-io-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "byCrates",
                            "byCategory",
                            "byKeyword",
                            "userCrates",
                            "reverseDeps"
                        ],
                        "type": "string",
                        "description": "What to fetch. `search` is a free-text query; `byCrates` looks up exact crate names; `byCategory` / `byKeyword` browse a taxonomy slug; `userCrates` lists everything published by a single crates.io user; `reverseDeps` lists crates that depend on a given crate (great for ecosystem analysis).",
                        "default": "search"
                    },
                    "searchQuery": {
                        "title": "Search query (mode=search)",
                        "type": "string",
                        "description": "Free-text query passed to the crates.io search API.",
                        "default": "tokio"
                    },
                    "crateNames": {
                        "title": "Crate names (mode=byCrates)",
                        "type": "array",
                        "description": "Exact crate names (e.g. `tokio`, `serde`, `clap`). URLs like `https://crates.io/crates/tokio` are also accepted.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "category": {
                        "title": "Category (mode=byCategory or filter)",
                        "enum": [
                            "",
                            "accessibility",
                            "aerospace",
                            "algorithms",
                            "api-bindings",
                            "artificial-intelligence",
                            "asynchronous",
                            "authentication",
                            "automotive",
                            "caching",
                            "command-line-interface",
                            "command-line-utilities",
                            "compilers",
                            "compression",
                            "computer-vision",
                            "concurrency",
                            "config",
                            "cryptography",
                            "data-structures",
                            "database",
                            "database-implementations",
                            "date-and-time",
                            "development-tools",
                            "email",
                            "embedded",
                            "emulators",
                            "encoding",
                            "external-ffi-bindings",
                            "filesystem",
                            "finance",
                            "game-development",
                            "game-engines",
                            "games",
                            "graphics",
                            "gui",
                            "hardware-support",
                            "internationalization",
                            "localization",
                            "mathematics",
                            "memory-management",
                            "multimedia",
                            "network-programming",
                            "no-std",
                            "os",
                            "parser-implementations",
                            "parsing",
                            "rendering",
                            "rust-patterns",
                            "science",
                            "security",
                            "simulation",
                            "template-engine",
                            "text-editors",
                            "text-processing",
                            "value-formatting",
                            "virtualization",
                            "visualization",
                            "wasm",
                            "web-programming"
                        ],
                        "type": "string",
                        "description": "Crates.io category slug. Used as the primary filter in `byCategory` mode; can also narrow `search` results.",
                        "default": ""
                    },
                    "keyword": {
                        "title": "Keyword (mode=byKeyword or filter)",
                        "type": "string",
                        "description": "Crates.io keyword tag. Used as the primary filter in `byKeyword` mode; can also narrow `search` results. Examples: `cli`, `async`, `wasm`, `parser`, `database`, `web`, `ai`, `llm`."
                    },
                    "userLogin": {
                        "title": "User login (mode=userCrates)",
                        "type": "string",
                        "description": "Crates.io / GitHub username whose published crates you want (e.g. `dtolnay`, `seanmonstar`, `carllerche`)."
                    },
                    "sourceCrate": {
                        "title": "Source crate (mode=reverseDeps)",
                        "type": "string",
                        "description": "Crate name whose reverse dependencies you want to list (e.g. `clap`, `rand`, `regex`). Note: a few extremely popular crates (e.g. `serde`, `serde_json`, `tokio`) cause the upstream reverse_dependencies endpoint to return 500 / time out; pick a smaller crate."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "alphabetical",
                            "recent-updates",
                            "recent-downloads",
                            "downloads",
                            "new"
                        ],
                        "type": "string",
                        "description": "How to order results returned by the crates.io API.",
                        "default": "relevance"
                    },
                    "minDownloads": {
                        "title": "Min all-time downloads",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Drop crates with fewer all-time downloads than this."
                    },
                    "maxDownloads": {
                        "title": "Max all-time downloads",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Drop crates with more all-time downloads than this."
                    },
                    "minRecentDownloads": {
                        "title": "Min recent downloads (90 days)",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Drop crates whose 90-day download count is below this."
                    },
                    "maxRecentDownloads": {
                        "title": "Max recent downloads (90 days)",
                        "minimum": 0,
                        "maximum": 10000000000,
                        "type": "integer",
                        "description": "Drop crates whose 90-day download count is above this."
                    },
                    "minVersionCount": {
                        "title": "Min version count",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Drop crates with fewer published versions than this."
                    },
                    "maxVersionCount": {
                        "title": "Max version count",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Drop crates with more published versions than this."
                    },
                    "updatedSinceDays": {
                        "title": "Updated since (days)",
                        "minimum": 1,
                        "maximum": 3650,
                        "type": "integer",
                        "description": "Drop crates whose latest update is older than this many days. Useful for `recently maintained` searches."
                    },
                    "containsKeyword": {
                        "title": "Contains keyword (substring)",
                        "type": "string",
                        "description": "Case-insensitive substring filter applied to name / description / id / keywords."
                    },
                    "includeVersions": {
                        "title": "Include version history",
                        "type": "boolean",
                        "description": "Fetch and emit the full version list per crate (up to 50 versions). Adds one extra API call per crate.",
                        "default": false
                    },
                    "includeOwners": {
                        "title": "Include owners",
                        "type": "boolean",
                        "description": "Fetch and emit owner users + teams per crate. Adds two extra API calls per crate.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Hard cap on emitted records.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
