# Amazon Scraper (Pay-Per-Event) (`prodiger/amazon-scraper`) Actor

Pay-per-event Amazon search scraper — a cheaper, better drop-in for automation-lab/amazon-scraper. Returns price, discount %, rating, reviews, availability, seller, bestseller rank, Prime, brand, image & URL across 11 marketplaces. Keyword or URL input, sortable.

- **URL**: https://apify.com/prodiger/amazon-scraper.md
- **Developed by:** [Arnas](https://apify.com/prodiger) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

Scrape Amazon search results — prices, list prices, discounts, ratings, reviews, availability, seller, bestseller rank, Prime badge, sponsored flags, brand, image, and direct product URLs — across 11 marketplaces. A cheaper, more capable drop-in for `automation-lab/amazon-scraper`.

### What does Amazon Scraper do?

**Amazon Scraper** extracts product data from [Amazon](https://www.amazon.com) search results. For every keyword (or search URL) you provide, it returns one structured record per unique product — current price, list/original price, discount percent, rating, review count, availability, seller, bestseller rank, Prime badge, sponsored flag, brand, image, and the direct product URL.

Use it for **price monitoring**, **competitive intelligence**, **dropshipping research**, **market analysis**, and **deal tracking** — without managing proxies, captcha gates, or HTML drift yourself.

Run it once on demand or [schedule it](https://docs.apify.com/platform/schedules) to track price changes over time. Results download as **JSON, CSV, or Excel**, or stream live via the [Apify API](https://docs.apify.com/api/v2).

### Why use Amazon Scraper?

- **Cheaper than the reference.** Pay-per-event at **$0.001/run + $0.003/product** — about **25% cheaper** than `automation-lab/amazon-scraper`'s $0.004/product (Free tier), and the gap holds at scale.
- **Keyword OR URL input.** The reference is keyword-only. This actor accepts plain keywords *and* Amazon search/category URLs — paste a URL straight out of the browser if you prefer.
- **11 marketplaces.** US, UK, DE, FR, ES, IT, CA, JP, IN, AU, **MX** — one more than the reference, picked from a dropdown rather than memorizing TLDs.
- **Sortable.** Order results by relevance, price (low→high / high→low), average customer review, or newest arrivals — matching the reference's sort options.
- **Run-level deduplication.** Duplicate ASINs that appear across overlapping keyword searches or sponsored-then-organic placements are written once and **billed once**, not twice.
- **Numeric prices + computed discount.** `price` and `listPriceValue` are returned as numbers (ready for math, including European decimal-comma formats like `1.299,00 €`), and we compute `discountPercent` and `onSale` for you so you can sort by deepest discount directly.
- **Marketplace-aware currency.** `USD`, `GBP`, `EUR`, `CAD`, `JPY`, `INR`, `AUD`, `MXN` populated automatically per row.
- **Residential proxy by default.** Amazon's WAF blocks datacenter IPs within minutes — RESIDENTIAL is the default and captcha-style responses trigger automatic session rotation.
- **Pay-per-event pricing.** No monthly subscription. Only pay for unique products written to the dataset.

### What data can you extract?

Each product in the output includes:

| Field | Description |
|---|---|
| `asin` | Amazon Standard Identification Number (stable across pages — used for deduplication) |
| `title` | Product title |
| `url` | Canonical `/dp/<ASIN>` product URL on the marketplace |
| `price` | Current price as a number (in the marketplace's local currency) |
| `priceString` | Raw price string as shown on the page (e.g., `"$19.99"`, `"1.299,00 €"`) |
| `listPrice` | List/strike-through price as a string |
| `listPriceValue` | List price as a number — easier to math against |
| `discountPercent` | Computed discount percentage (1 decimal place) |
| `onSale` | Whether the product has a list price > current price |
| `currency` | ISO 4217 currency code (`USD`, `GBP`, `EUR`, `CAD`, `JPY`, `INR`, `AUD`, `MXN`) |
| `rating` | Average rating (0–5) |
| `reviewCount` | Number of customer reviews |
| `availability` | Stock status when shown on the card (e.g., `"In Stock"`, `"Only 3 left in stock"`). Best-effort; `null` when not surfaced. |
| `sellerName` | Seller when a "Sold by" fragment is present on the card. Best-effort; usually `null` on search pages (lives on the PDP). |
| `bestsellerRank` | Bestseller rank when a "Best Seller" badge (`#1`) or "#N in Category" text appears. Best-effort; `null` otherwise. |
| `thumbnail` | Product image URL |
| `isPrime` | Whether the listing carries a Prime badge |
| `isSponsored` | Whether the listing is a sponsored placement |
| `brand` | Product brand. Best-effort: inferred from the first token of the title against a generic-word denylist. `null` when uncertain. Follow `url` to the PDP for canonical brand data. |
| `marketplace` | Marketplace enum (`US`, `UK`, `DE`, …) |
| `pageNumber` | Which search result page this product appeared on |
| `searchQuery` | Which keyword surfaced this product. `null` when the seed was a startUrl. |
| `scrapedAt` | ISO 8601 timestamp when the record was extracted |

### Output example

```json
{
  "asin": "B09JQMJHXY",
  "title": "Sony WH-1000XM5 Wireless Industry Leading Noise Canceling Headphones",
  "url": "https://www.amazon.com/dp/B09JQMJHXY",
  "price": 298.00,
  "priceString": "$298.00",
  "listPrice": "$399.99",
  "listPriceValue": 399.99,
  "discountPercent": 25.5,
  "onSale": true,
  "currency": "USD",
  "rating": 4.6,
  "reviewCount": 18421,
  "availability": "In Stock",
  "sellerName": null,
  "bestsellerRank": 1,
  "thumbnail": "https://m.media-amazon.com/images/I/.....jpg",
  "isPrime": true,
  "isSponsored": false,
  "brand": "Sony",
  "marketplace": "US",
  "pageNumber": 1,
  "searchQuery": "wireless headphones",
  "scrapedAt": "2026-06-02T13:40:32.821Z"
}
````

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### How to use Amazon Scraper

1. Click **Try for free** on this page.
2. Enter one or more keywords in **Search keywords** (e.g., `wireless earbuds`, `laptop stand`). Or paste Amazon search URLs into **Start URLs**.
3. Pick the **Marketplace** (defaults to US) and optionally a **Sort** order.
4. Optionally adjust **Max products per search** and **Max search pages**.
5. Click **Start**. Results stream to the Output tab as they are scraped.

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | string\[] | — | Keywords to search on Amazon. One search per keyword. |
| `startUrls` | object\[] | — | Amazon search/category URLs. Marketplace inferred from URL host. |
| `marketplace` | enum | `US` | One of US, UK, DE, FR, ES, IT, CA, JP, IN, AU, MX. Applies to keyword seeds. |
| `sort` | enum | `relevance` | `relevance`, `price_low`, `price_high`, `avg_rating`, `newest`. Applies to keyword seeds; URL seeds keep their own ordering. |
| `maxProductsPerSearch` | integer | `100` | Max unique products per seed (1–1000). |
| `maxSearchPages` | integer | `5` | Max result pages per seed (1–20 accepted for drop-in compatibility; fetching is internally capped at ~7, where Amazon stops returning distinct results). |
| `maxRequestRetries` | integer | `5` | Retries on 429 / 503 / captcha (1–10). |
| `proxyConfiguration` | object | RESIDENTIAL | Apify proxy. Datacenter IPs are blocked within minutes — keep RESIDENTIAL. |

Provide **at least one** of `searchQueries` or `startUrls`.

### How much does it cost to scrape Amazon?

Pay-per-event:

- **Actor start:** $0.001 per run.
- **Product scraped:** $0.003 per unique product written to the dataset (deduplicated by ASIN across the run).

Example: 1,000 products = $0.001 + (1,000 × $0.003) = **$3.001**. Compare against `automation-lab/amazon-scraper`'s $0.004/product (Free tier) → $4.001 for the same 1,000 products. This actor is ~25% cheaper, with no monthly subscription required.

### Tips and advanced options

- **Stick to RESIDENTIAL.** Amazon blocks datacenter IPs almost immediately. The default configuration is correct.
- **Use broader keywords than narrow ones to maximize page coverage.** Amazon caps keyword search at ~7 pages — a narrow query may saturate at page 3.
- **For deeper category coverage**, paste paginated category URLs into `startUrls` (each URL is fetched as page 1 and not paginated further; you control depth by supplying multiple URLs).
- **Mix marketplaces in one run** by combining `startUrls` from different Amazon domains. Each URL infers its own marketplace.
- **Cost ceiling.** Set a maxItems cap in the Apify Console run settings to bound charges. The actor honors `eventChargeLimitReached` and stops cleanly when the cap is reached.
- **Schedule it** with [Apify Schedules](https://docs.apify.com/platform/schedules) to build a daily price-history dataset by keyword.

### Legality and ToS disclaimer

This actor scrapes publicly accessible search-results data from Amazon. Web scraping is legal in most jurisdictions when applied to public data, but you are responsible for ensuring your use complies with Amazon's Terms of Service, applicable laws, and any contractual obligations you have. Do not scrape personal or sensitive data. For commercial use cases, consult legal counsel.

### FAQ

**Does this scraper require an Amazon API key or login?** No — it operates on publicly accessible search-results HTML.

**Does it scrape full product detail pages (PDPs)?** Not in v0.1. This actor extracts the fields visible on the search results page. PDP scraping (feature bullets, variant matrix, A+ content, full seller breakdown) is on the roadmap.

**Why are `availability`, `sellerName`, or `bestsellerRank` sometimes null?** Amazon's search-results HTML exposes these only sporadically — availability and bestseller badges appear on some cards, and seller name almost always lives on the PDP rather than the search card. We parse them when confidently present and return `null` otherwise rather than guessing. Follow `url` to the PDP for canonical values.

**Why is `brand` sometimes null?** Amazon's main-frame search HTML rarely exposes a structured `brand` field. We infer it from the title's first token against a generic-word denylist; when neither the title nor a card attribute is confident, we return `null`. Follow `url` to the PDP for canonical brand data.

**Why does `priceString` sometimes show a different currency than `currency`?** The `currency` field is derived from the marketplace you select (US → USD). The `priceString` preserves Amazon's raw, as-served value. When the residential proxy happens to exit in a different country, Amazon localizes the displayed prices to that country, so `priceString` may read e.g. `"MXN 44.76"` on a US run. The numeric `price` matches `priceString`. To force a single consistent currency, pin the proxy to the marketplace's country via `proxyConfiguration.apifyProxyCountry` (e.g., `"US"`) — note this narrows the IP pool and can slightly raise block rates.

**Can I run this against `amazon.cn` or `amazon.com.br`?** Not in v0.1. The supported marketplaces are US, UK, DE, FR, ES, IT, CA, JP, IN, AU, MX. Open an Issue with your use case and we can prioritize.

**Why does my run produce fewer products than `maxProductsPerSearch`?** Two reasons: (1) Amazon caps keyword search at ~7 pages, so very specific keywords may saturate before reaching the cap. (2) Some sponsored placements duplicate organic ASINs; run-level dedup writes each ASIN once.

### Support

Have a feature request or hitting an issue? Open a ticket on the actor's Issues tab. We respond quickly and treat early-adopter feedback as design input.

# Actor input Schema

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

List of keywords to search on Amazon. Each keyword runs a separate search against the marketplace selected below. Examples: 'wireless earbuds', 'laptop stand', 'kindle paperwhite'.

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

Amazon search or category URLs to scrape directly. The marketplace is inferred from the URL host (amazon.com → US, amazon.co.uk → UK, etc.). Use this when you want to copy a URL straight out of the browser. Non-Amazon URLs are skipped with a warning.

## `marketplace` (type: `string`):

Amazon storefront to query for keyword-based searches. URL-based seeds infer their own marketplace from the URL.

## `sort` (type: `string`):

Ordering applied to keyword searches. URL-based seeds keep whatever ordering the URL already specifies. 'Relevance' is Amazon's default.

## `maxProductsPerSearch` (type: `integer`):

Maximum unique products to return per search seed (one seed = one keyword OR one startUrl). Amazon returns ~16 organic results per page.

## `maxSearchPages` (type: `integer`):

Maximum number of result pages per seed. Values above 7 are accepted for drop-in compatibility but Amazon's keyword search only returns ~7 pages of distinct results before duplicates appear, so fetching is internally capped at 7 (a warning is logged when you request more).

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

Retry budget per request for 429, 5xx, and bot-challenge responses. Sessions are rotated on each failure, so higher values significantly improve completion on residential proxies.

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

Apify proxy. RESIDENTIAL is strongly recommended — Amazon blocks datacenter IPs within minutes. Leaving the default keeps you on RESIDENTIAL.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "marketplace": "US",
  "sort": "relevance",
  "maxProductsPerSearch": 100,
  "maxSearchPages": 5,
  "maxRequestRetries": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Scraped Amazon products. One record per unique ASIN across the run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("prodiger/amazon-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["wireless earbuds"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("prodiger/amazon-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call prodiger/amazon-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon Scraper (Pay-Per-Event)",
        "description": "Pay-per-event Amazon search scraper — a cheaper, better drop-in for automation-lab/amazon-scraper. Returns price, discount %, rating, reviews, availability, seller, bestseller rank, Prime, brand, image & URL across 11 marketplaces. Keyword or URL input, sortable.",
        "version": "0.1",
        "x-build-id": "aVZpu5jq7aDdGMaNa"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/prodiger~amazon-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-prodiger-amazon-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/prodiger~amazon-scraper/runs": {
            "post": {
                "operationId": "runs-sync-prodiger-amazon-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/prodiger~amazon-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-prodiger-amazon-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "List of keywords to search on Amazon. Each keyword runs a separate search against the marketplace selected below. Examples: 'wireless earbuds', 'laptop stand', 'kindle paperwhite'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Amazon search or category URLs to scrape directly. The marketplace is inferred from the URL host (amazon.com → US, amazon.co.uk → UK, etc.). Use this when you want to copy a URL straight out of the browser. Non-Amazon URLs are skipped with a warning.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "marketplace": {
                        "title": "Marketplace",
                        "enum": [
                            "US",
                            "UK",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "CA",
                            "JP",
                            "IN",
                            "AU",
                            "MX"
                        ],
                        "type": "string",
                        "description": "Amazon storefront to query for keyword-based searches. URL-based seeds infer their own marketplace from the URL.",
                        "default": "US"
                    },
                    "sort": {
                        "title": "Sort results by",
                        "enum": [
                            "relevance",
                            "price_low",
                            "price_high",
                            "avg_rating",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Ordering applied to keyword searches. URL-based seeds keep whatever ordering the URL already specifies. 'Relevance' is Amazon's default.",
                        "default": "relevance"
                    },
                    "maxProductsPerSearch": {
                        "title": "Max products per search",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum unique products to return per search seed (one seed = one keyword OR one startUrl). Amazon returns ~16 organic results per page.",
                        "default": 100
                    },
                    "maxSearchPages": {
                        "title": "Max search pages",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Maximum number of result pages per seed. Values above 7 are accepted for drop-in compatibility but Amazon's keyword search only returns ~7 pages of distinct results before duplicates appear, so fetching is internally capped at 7 (a warning is logged when you request more).",
                        "default": 5
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Retry budget per request for 429, 5xx, and bot-challenge responses. Sessions are rotated on each failure, so higher values significantly improve completion on residential proxies.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy. RESIDENTIAL is strongly recommended — Amazon blocks datacenter IPs within minutes. Leaving the default keeps you on RESIDENTIAL.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
