# JetBrains Marketplace Scraper (`automation-lab/jetbrains-marketplace-scraper`) Actor

🔌 Extract JetBrains Marketplace plugin downloads, ratings, pricing, vendors, tags, compatibility, links, and public status flags for monitoring and research.

- **URL**: https://apify.com/automation-lab/jetbrains-marketplace-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 83.3% 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

## JetBrains Marketplace Scraper

Extract the public JetBrains Marketplace plugin catalog into clean, analysis-ready records.

Search by topic or target exact plugin IDs and URLs. Each result can include downloads, rating, pricing model, vendor, tags, IDE family, descriptions, links, dates, and public marketplace status flags.

Use recurring runs to monitor competitors, measure ecosystem trends, maintain plugin directories, or enrich developer-tool research.

### What does JetBrains Marketplace Scraper do?

JetBrains Marketplace Scraper calls the public JSON catalog and plugin-detail endpoints at `plugins.jetbrains.com`.

It turns Marketplace responses into one normalized dataset row per plugin.

The Actor can:

- 🔎 search one or more Marketplace terms
- 🎯 extract exact plugin IDs or URLs
- 📊 collect downloads and ratings where available
- 💳 identify free, freemium, and paid pricing models
- 🏷️ filter records by IDE family or tag
- 🧑‍💻 collect public vendor identity and verification data
- 🔗 preserve plugin, source-code, license, documentation, and support links
- 🛡️ expose public moderation and monetization flags
- 🕐 timestamp every snapshot for longitudinal analysis

### Who is it for?

#### Plugin vendors

Track your listing and comparable plugins over time. Schedule snapshots and load them into a spreadsheet, warehouse, or dashboard.

#### Developer relations teams

Discover extensions around a technology, framework, language, or product and build outreach lists from public vendor information.

#### IDE ecosystem analysts

Compare plugin categories by downloads, ratings, vendors, pricing, and compatibility family.

#### Security researchers

Build an inventory of plugins, source links, vendors, and public blocked or hidden flags for further review.

#### Competitive intelligence teams

Monitor changing marketplace presence and adoption without copying data manually from individual listing pages.

### Why use this Actor?

The Marketplace is easy to browse but manual collection does not scale.

This Actor provides:

- consistent JSON records
- bounded parallel requests
- retries with exponential backoff
- optional Apify Proxy fallback
- CSV, Excel, JSON, XML, and RSS exports through Apify
- scheduling, webhooks, API access, and integrations
- stable field names despite optional upstream fields

### What JetBrains Marketplace data can I extract?

| Field | Description |
|---|---|
| `id` | Numeric Marketplace plugin ID |
| `xmlId` | Stable plugin XML identifier when available |
| `name` | Plugin name |
| `description` | Full public HTML description |
| `preview` | Short listing preview |
| `downloads` | Public cumulative download count |
| `rating` | Public average rating when available |
| `pricingModel` | Marketplace pricing classification |
| `family` | Marketplace IDE family |
| `vendor` | Public vendor identity, country, and verification fields |
| `tags` | Searchable Marketplace tags |
| `createdAt` | Marketplace date converted to ISO 8601 |
| `pluginUrl` | Canonical public listing URL |
| `iconUrl` | Absolute plugin icon URL |
| `urls` | Public source, docs, license, forum, and support links |
| `approved` | Public approval flag when returned |
| `hidden` | Public hidden flag when returned |
| `blocked` | Public blocked flag when returned |
| `monetizationAvailable` | Public monetization availability |
| `sourceAvailable` | Whether Marketplace reports source availability |
| `scrapedAt` | UTC snapshot timestamp |

### How to scrape JetBrains Marketplace plugins

1. Open the Actor input page.
2. Add one or more search terms, plugin IDs, or plugin URLs.
3. Choose a small `maxItems` value for a first run.
4. Optionally enter IDE families or tags.
5. Keep detail enrichment enabled for the richest output.
6. Click **Start**.
7. Open the Dataset tab and export your results.

### Input

A typical search input:

```json
{
  "searchTerms": ["AI assistant", "code review"],
  "maxItems": 100,
  "includeDetails": true,
  "maxConcurrency": 8
}
````

A direct-plugin input:

```json
{
  "pluginIds": [164],
  "pluginUrls": ["https://plugins.jetbrains.com/plugin/7322-sonarlint"],
  "maxItems": 10
}
```

A filtered input:

```json
{
  "searchTerms": ["editor"],
  "families": ["intellij"],
  "tags": ["Editor"],
  "maxItems": 250
}
```

Direct IDs and URLs are processed before search results. Duplicate IDs are emitted once.

Family and tag filters use exact case-insensitive matching against detail records.

### Output example

```json
{
  "id": 164,
  "xmlId": "IdeaVIM",
  "name": "IdeaVim",
  "downloads": 21436506,
  "rating": 4.47,
  "pricingModel": "FREE",
  "family": "intellij",
  "vendor": {
    "name": "JetBrains",
    "publicName": "JetBrains s.r.o.",
    "isVerified": true
  },
  "tags": ["Editor", "Keymap"],
  "pluginUrl": "https://plugins.jetbrains.com/plugin/164",
  "sourceUrl": "https://plugins.jetbrains.com/api/plugins/164",
  "blocked": false,
  "hidden": false,
  "scrapedAt": "2026-07-13T00:00:00.000Z"
}
```

Optional fields are omitted when JetBrains does not return them. This avoids misleading `null` values.

Set `includeDetails` to `false` for a faster catalog-only run. In that mode the Actor makes **zero** `/api/plugins/{id}` detail requests and emits only fields available in search results, such as name, preview, downloads, rating, pricing, basic vendor identity, tags, and source availability. Detail-only fields (`description`, `family`, expanded vendor metadata, `urls`, and moderation/monetization flags) are omitted. A direct ID or URL that was not discovered through search produces a minimal identity/link record. IDE family filtering therefore requires `includeDetails: true`; tag filtering works in either mode.

### How much does it cost to scrape JetBrains Marketplace plugins?

The Actor uses pay-per-event pricing:

- a small one-time Actor start charge
- a charge for each plugin record saved
- automatic volume discounts on supported Apify plans

The Console displays the exact price for your account before a run starts.

Use `maxItems` to control the maximum number of chargeable records. Searches that return fewer matching records only save and charge for those records.

### Search behavior and pagination

Each search term is paginated through JetBrains' public catalog endpoint.

Results are deduplicated by numeric plugin ID across terms, IDs, and URLs.

The global `maxItems` limit applies across all sources.

Filters can reduce the final saved count. IDE family filters are evaluated against enriched detail records and require `includeDetails: true`; tag filters also work with catalog-only records.

### Plugin IDs and URLs

Use IDs for the most stable direct extraction.

The Actor also recognizes standard URLs such as:

`https://plugins.jetbrains.com/plugin/164-ideavim`

Invalid or unavailable plugin IDs are retried and then skipped with a warning. Other valid plugins continue processing.

### IDE family and tag filters

`families` matches the Marketplace `family` value, for example `intellij`.

`tags` matches at least one tag name, for example `Editor` or `Keymap`.

Filters are optional. Leave them empty for broad market discovery.

### Monitoring plugin downloads and ratings

Create a scheduled Actor task with a fixed list of plugin IDs.

Run it daily, weekly, or monthly.

Store each result with its `scrapedAt` timestamp in a warehouse or append-only dataset.

Calculate changes between snapshots to identify adoption momentum.

Ratings are optional upstream data, so analytics should handle plugins without a rating.

### Integrations

#### Google Sheets

Use the Google Sheets integration to send each completed dataset to a reporting workbook.

#### Slack and email alerts

Connect a webhook or automation platform. Alert when downloads cross a threshold or a public status flag changes.

#### Data warehouses

Download JSON or call the dataset API from BigQuery, Snowflake, PostgreSQL, or another ETL pipeline.

#### Make and Zapier

Trigger downstream workflows after a run succeeds. Filter records by pricing, tag, vendor, or download count.

### API usage with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/jetbrains-marketplace-scraper').call({
  searchTerms: ['Kotlin'],
  maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### API usage with Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/jetbrains-marketplace-scraper').call(run_input={
    'searchTerms': ['Kotlin'],
    'maxItems': 100,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### API usage with cURL

```bash
curl -X POST \
  'https://api.apify.com/v2/acts/automation-lab~jetbrains-marketplace-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"searchTerms":["Kotlin"],"maxItems":100}'
```

Use the returned dataset ID to fetch results after the run finishes.

### Use with Apify MCP

Connect the Actor to AI assistants through the actor-scoped Apify MCP endpoint:

`https://mcp.apify.com/?tools=automation-lab/jetbrains-marketplace-scraper`

Authenticate with your Apify account when your MCP client opens the authorization flow.

#### Claude Code MCP setup

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

Confirm the server is available with `claude mcp list`, then start Claude Code and ask it to run the Actor.

#### Claude Desktop MCP setup

Add this server to the `mcpServers` object in your Claude Desktop configuration, then restart Claude Desktop:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=automation-lab/jetbrains-marketplace-scraper"
    }
  }
}
```

#### Cursor MCP setup

Create or update `.cursor/mcp.json` in your project:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com/?tools=automation-lab/jetbrains-marketplace-scraper"
    }
  }
}
```

#### VS Code MCP setup

Create or update `.vscode/mcp.json`, and start the server from VS Code's MCP servers view:

```json
{
  "servers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com/?tools=automation-lab/jetbrains-marketplace-scraper"
    }
  }
}
```

Example prompts:

- “Find 50 JetBrains plugins related to database development and rank them by downloads.”
- “Extract these Marketplace plugin URLs and compare vendors, pricing, ratings, and source availability.”
- “Build a weekly snapshot of IntelliJ editor plugins.”

### Tips for reliable runs

- Start with 10–25 records while testing a workflow.
- Prefer plugin IDs for repeat monitoring.
- Keep concurrency at the default unless rate limiting occurs.
- Lower concurrency before enabling a proxy.
- Use exact Marketplace family and tag values.
- Remember that filters may produce fewer rows than `maxItems`.
- Preserve `id`, `xmlId`, and `scrapedAt` in historical datasets.

### Error handling

Temporary rate limits and server errors use bounded exponential retries.

One unavailable detail record does not stop the whole run.

If direct access is restricted from your environment, enable Apify Proxy in the Network section.

The Actor logs discovered and saved counts at completion.

### Data quality and schema drift

JetBrains' endpoints are public but not guaranteed to return every optional field for every plugin.

Identity fields are normalized consistently. Optional fields are emitted only when available.

Absolute plugin, icon, and API source URLs make records traceable.

Public HTML descriptions are preserved as returned so users can retain formatting or sanitize them downstream.

### Legality and responsible use

This Actor accesses public, anonymous Marketplace data.

You are responsible for using outputs in accordance with applicable laws, JetBrains' terms, and your intended jurisdiction.

Avoid collecting more data than necessary. Do not use the Actor to circumvent authentication or access private vendor analytics.

### Limitations

V1 does not extract plugin reviews.

V1 does not access private vendor download histories, sales, customer identities, or account analytics.

Public download totals and ratings may change between runs.

Search ranking belongs to JetBrains and may change without notice.

### FAQ

#### Does the Actor require a JetBrains account?

No. It uses public anonymous catalog and detail endpoints.

#### Can I scrape one exact plugin?

Yes. Enter its numeric ID or Marketplace URL.

#### Why did I receive fewer records than `maxItems`?

The search may contain fewer results, duplicate plugins may be removed, or family/tag filters may exclude records.

#### Why is rating missing?

JetBrains does not expose a rating for every plugin. Missing optional fields are omitted rather than guessed.

#### What should I do if requests are rate-limited?

Reduce `maxConcurrency`. If direct requests remain restricted, enable Apify Proxy as a fallback.

#### Can I schedule download monitoring?

Yes. Save a task with fixed plugin IDs and use Apify Scheduler. Compare `downloads` across `scrapedAt` timestamps.

#### Are descriptions plain text?

No. Full descriptions may contain safe Marketplace HTML formatting. Use `preview` for a short text-oriented summary.

### Related scrapers

Explore other marketplace and catalog automation from [automation-lab](https://apify.com/automation-lab), including the [Apple App Store Scraper](https://apify.com/automation-lab/apple-app-store-scraper) for mobile application intelligence.

Combine marketplace sources in a warehouse when your research spans developer tools and mobile apps.

### Support

If a valid public plugin does not appear, include the input and run URL in an Actor issue.

For schema requests, describe the public Marketplace field and the downstream workflow it enables.

Private vendor analytics and authenticated surfaces remain outside this Actor's scope.

# Actor input Schema

## `searchTerms` (type: `array`):

Marketplace queries such as AI assistant, Docker, or Vim.

## `pluginIds` (type: `array`):

Numeric JetBrains Marketplace plugin IDs (for example 164 for IdeaVim).

## `pluginUrls` (type: `array`):

Full Marketplace plugin URLs to extract.

## `families` (type: `array`):

Optional exact family filters returned by Marketplace, such as intellij.

## `tags` (type: `array`):

Only keep plugins matching at least one exact tag, such as Editor or AI.

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

Maximum plugin records to save across all searches and direct IDs.

## `includeDetails` (type: `boolean`):

When enabled, request each plugin detail endpoint to add HTML description, full vendor data, links, IDE family, and public flags. Disable to use search-catalog data only and avoid all detail requests.

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

Parallel detail requests when Include full details is enabled. Lower this if the API rate-limits requests.

## `proxyConfiguration` (type: `object`):

Optional Apify Proxy fallback. Direct requests work by default.

## Actor input object example

```json
{
  "searchTerms": [
    "AI assistant"
  ],
  "maxItems": 20,
  "includeDetails": true,
  "maxConcurrency": 8
}
```

# 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 = {
    "searchTerms": [
        "AI assistant"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/jetbrains-marketplace-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 = {
    "searchTerms": ["AI assistant"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/jetbrains-marketplace-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 '{
  "searchTerms": [
    "AI assistant"
  ],
  "maxItems": 20
}' |
apify call automation-lab/jetbrains-marketplace-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "JetBrains Marketplace Scraper",
        "description": "🔌 Extract JetBrains Marketplace plugin downloads, ratings, pricing, vendors, tags, compatibility, links, and public status flags for monitoring and research.",
        "version": "0.1",
        "x-build-id": "MZg1iOkXNjVMfJdW6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~jetbrains-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-jetbrains-marketplace-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~jetbrains-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-jetbrains-marketplace-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~jetbrains-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-jetbrains-marketplace-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": {
                    "searchTerms": {
                        "title": "🔎 Search terms",
                        "type": "array",
                        "description": "Marketplace queries such as AI assistant, Docker, or Vim.",
                        "default": [
                            "AI assistant"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "pluginIds": {
                        "title": "Plugin IDs",
                        "type": "array",
                        "description": "Numeric JetBrains Marketplace plugin IDs (for example 164 for IdeaVim).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "pluginUrls": {
                        "title": "Plugin URLs",
                        "type": "array",
                        "description": "Full Marketplace plugin URLs to extract.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "families": {
                        "title": "IDE families",
                        "type": "array",
                        "description": "Optional exact family filters returned by Marketplace, such as intellij.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "tags": {
                        "title": "Tags",
                        "type": "array",
                        "description": "Only keep plugins matching at least one exact tag, such as Editor or AI.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum plugins",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum plugin records to save across all searches and direct IDs.",
                        "default": 20
                    },
                    "includeDetails": {
                        "title": "Include full details",
                        "type": "boolean",
                        "description": "When enabled, request each plugin detail endpoint to add HTML description, full vendor data, links, IDE family, and public flags. Disable to use search-catalog data only and avoid all detail requests.",
                        "default": true
                    },
                    "maxConcurrency": {
                        "title": "Detail request concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel detail requests when Include full details is enabled. Lower this if the API rate-limits requests.",
                        "default": 8
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional Apify Proxy fallback. Direct requests work by default."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
