# Amazon  Scraper - US, SG, CA, GB, AU (`lentic_clockss/amazon-search-results-collector`) Actor

Use this Amazon scraper to collect data based on URL and country from the Amazon website. Extract product information without using the Amazon API, including reviews, prices, descriptions, and Amazon Standard Identification Numbers (ASINs). Download data in various structured formats.

- **URL**: https://apify.com/lentic\_clockss/amazon-search-results-collector.md
- **Developed by:** [kane liu](https://apify.com/lentic_clockss) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.90 / 1,000 result items

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

## Amazon Search Results Collector - US, SG, CA, GB, AU

<p align="center">
  HTTP-based Amazon search-results scraper for <b>US, SG, CA, GB, AU</b><br/>
  with <b>normalized dataset output</b>, <b>market-matched Apify residential proxy rules</b>, and <b>run/debug summaries</b>.
</p>

<p align="center">
  <img alt="markets" src="https://img.shields.io/badge/Markets-US%20%7C%20SG%20%7C%20CA%20%7C%20GB%20%7C%20AU-0F172A?style=for-the-badge&logo=apify" />
  <img alt="billing" src="https://img.shields.io/badge/Pricing-PAY__PER__EVENT%20result--item-14532D?style=for-the-badge" />
  <img alt="proxy" src="https://img.shields.io/badge/Proxy-Apify%20Residential%20for%20remote-1D4ED8?style=for-the-badge" />
</p>

### Overview

This actor collects **Amazon search result listings** from these storefronts:

- United States (`US`) → `www.amazon.com`
- Singapore (`SG`) → `www.amazon.sg`
- Canada (`CA`) → `www.amazon.ca`
- United Kingdom (`GB`) → `www.amazon.co.uk`
- Australia (`AU`) → `www.amazon.com.au`

The current implementation is an **HTTP + HTML parser** workflow:

1. build the Amazon search URL for each keyword and page
2. fetch the HTML with `httpx`
3. detect and follow Amazon `bm-verify` meta-refresh pages when present
4. parse search cards from HTML
5. normalize rows, deduplicate by ASIN, push to dataset, and write summaries

This actor currently targets **search-result pages only**. It does **not** crawl product detail pages, seller pages, reviews, category trees, or ads APIs.

### What this actor actually supports

Based on the current code, schemas, and tests, the actor supports:

- search keywords via `keywords`
- one selected market per run: `US`, `SG`, `CA`, `GB`, or `AU`
- up to `5` pages per keyword
- global output cap via `maxItems`
- per-keyword cap via `maxItemsPerKeyword`
- deduplication by `asin`
- optional raw card HTML in dataset rows via `includeRawHtml=true`
- optional debug metadata in key-value store via `debug=true`
- local deterministic runs via `fixtureHtmlPath`
- Apify Store event charging using `result-item`

### Pricing

This actor is intended for **Apify Store PAY_PER_EVENT billing**.

#### Billing unit

- **Pricing model:** `PAY_PER_EVENT`
- **Event name:** `result-item`
- **Price:** **$0.0019 per item**

#### What counts as a billable item

The runtime charges **after output deduplication**, using the number of dataset rows actually emitted.

In code, charging happens with:

- event name: `result-item`
- count: `len(dataset_rows)`

For local runs, the actor writes a `CHARGE_SUMMARY.json` record so you can verify the counted items.

### Why use this actor

- **Search monitoring:** track titles, ASINs, prices, ratings, and rank position.
- **Cross-market comparison:** run the same keyword across US / SG / CA / GB / AU with one consistent schema.
- **Debuggable runs:** inspect `RUN_SUMMARY`, `INPUT_ECHO`, `CHARGE_SUMMARY`, and optional debug entries.
- **Fixture-based QA:** validate parsing offline with local HTML fixtures before remote runs.

### Supported markets

| Market | Country | Host | Currency code |
| --- | --- | --- | --- |
| `US` | United States | `www.amazon.com` | `USD` |
| `SG` | Singapore | `www.amazon.sg` | `SGD` |
| `CA` | Canada | `www.amazon.ca` | `CAD` |
| `GB` | United Kingdom | `www.amazon.co.uk` | `GBP` |
| `AU` | Australia | `www.amazon.com.au` | `AUD` |

### Input

#### Main input fields

| Field | Type | Runtime behavior |
| --- | --- | --- |
| `keywords` | `string[]` | Required. Empty/blank values are removed. Runtime allows up to **10** keywords. |
| `market` | `string` | One of `US`, `SG`, `CA`, `GB`, `AU`. Runtime default is `SG`. |
| `pages` | `integer` | Pages per keyword. Allowed range: `1-5`. Default `1`. |
| `maxItems` | `integer` | Global emitted-row cap after parsing/dedupe flow. Runtime range: `1-100`. Default `40`. |
| `maxItemsPerKeyword` | `integer` | Per-keyword cap. Runtime range: `1-100`. Default `40`. |
| `requestTimeoutSecs` / `timeoutSecs` | `integer` | Request timeout. Runtime accepts either field name. Range: `5-180`. Default `30`. |
| `userAgent` | `string` | Optional override for HTTP requests. |
| `debug` | `boolean` | When true, writes per-keyword debug metadata to KVS. |
| `includeRawHtml` | `boolean` | When true, each dataset row may include `rawHtml` for the parsed card. |
| `proxyConfiguration` | `object` | Apify proxy settings for remote runs. See proxy rules below. |
| `fixtureHtmlPath` | `string` | Optional local HTML fixture path for deterministic offline runs. |

#### Example input

```json
{
  "keywords": ["usb hub", "wireless mouse"],
  "market": "US",
  "pages": 2,
  "maxItems": 20,
  "maxItemsPerKeyword": 10,
  "requestTimeoutSecs": 60,
  "debug": true,
  "includeRawHtml": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyCountry": "US"
  }
}
````

#### Fixture-mode example

```json
{
  "keywords": ["phone case"],
  "market": "SG",
  "pages": 1,
  "maxItems": 10,
  "maxItemsPerKeyword": 10,
  "fixtureHtmlPath": "fixtures/amazon_search_sample.html",
  "debug": true,
  "includeRawHtml": true
}
```

### Output

The actor writes normalized rows to the Apify dataset.

#### Core fields

- `keyword`
- `market`
- `marketName`
- `marketHost`
- `country`
- `page`
- `rank`
- `absoluteRank`
- `itemId`
- `asin`
- `title`
- `productUrl`
- `searchUrl`
- `sourceUrl`
- `price`
- `priceValue`
- `currency`
- `currencyCode`
- `capturedAt`
- `source`

#### Additional fields currently produced

- `image`
- `imageUrl`
- `rating`
- `ratingScore`
- `ratingCount`
- `reviewCount`
- `sponsored`
- `isSponsored`
- `rawHtml` when `includeRawHtml=true`

#### Example output

```json
{
  "market": "SG",
  "marketName": "Singapore",
  "marketHost": "www.amazon.sg",
  "country": "SG",
  "keyword": "phone case",
  "page": 1,
  "rank": 1,
  "absoluteRank": 1,
  "itemId": "B0TEST1234",
  "asin": "B0TEST1234",
  "title": "Sample Phone Case",
  "price": "S$19.90",
  "priceValue": 19.9,
  "currency": "S$",
  "currencyCode": "SGD",
  "rating": 4.6,
  "ratingScore": 4.6,
  "ratingCount": 123,
  "reviewCount": 123,
  "image": "https://images.example.com/1.jpg",
  "imageUrl": "https://images.example.com/1.jpg",
  "productUrl": "https://www.amazon.sg/dp/B0TEST1234",
  "searchUrl": "https://www.amazon.sg/s?k=phone+case&page=1",
  "sourceUrl": "https://www.amazon.sg/dp/B0TEST1234",
  "sponsored": false,
  "isSponsored": false,
  "capturedAt": "2026-06-27T01:41:39.679709+00:00",
  "source": "amazonSearchHtml"
}
```

### Key-value store artifacts

The actor may write these keys:

- `INPUT_ECHO` - normalized public input snapshot
- `RUN_SUMMARY` - run-level counters, duplicates, and error list
- `CHARGE_SUMMARY` - local charge count record for `result-item`
- `ERROR_SUMMARY` - top-level failure summary when the run fails
- `DEBUG_<keyword>` - per-keyword page metadata when `debug=true`

#### `RUN_SUMMARY` fields

Current code writes:

- `market`
- `keywordsRequested`
- `keywordsSucceeded`
- `keywordsFailed`
- `pagesRequested`
- `pagesSucceeded`
- `rawItems`
- `dedupedItems`
- `duplicateRate`
- `startedAt`
- `finishedAt`
- `errors`
- `chargedItems`
- `chargeEventName`

### Proxy rules

The runtime has strict proxy behavior for remote runs.

#### Remote Apify runs

For remote runs, the actor expects **Apify Proxy residential routing**:

- proxy group is normalized to include `RESIDENTIAL`
- proxy country is matched to the selected market country
- `proxyConfiguration.proxyUrls` is rejected
- `proxyConfiguration.useApifyProxy=false` is rejected
- if `apifyProxyCountry` is provided, it must equal the market country

Examples:

- `US` run -> proxy country `US`
- `SG` run -> proxy country `SG`
- `CA` run -> proxy country `CA`
- `GB` run -> proxy country `GB`
- `AU` run -> proxy country `AU`

#### Local / fixture runs

Proxy can be skipped when:

- running with `--local`
- using `fixtureHtmlPath`

In that case the actor runs with `proxyMode: "none"`.

### How it works

1. Validate and normalize the input.
2. Resolve market host, language, and currency metadata.
3. Resolve proxy selection rules.
4. Request the search page HTML.
5. Follow Amazon `bm-verify` meta refresh when encountered.
6. Parse `div[data-component-type="s-search-result"][data-asin]` cards.
7. Extract ASIN, title, price, rating, review count, image, and URL fields.
8. Deduplicate rows by `asin`.
9. Push dataset rows and charge `result-item` events.
10. Save run and debug summaries.

### Local development

#### Install

```bash
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
```

#### Run tests

```bash
PYTHONPATH=. .venv/bin/pytest -q
```

#### Run locally with fixture HTML

```bash
APIFY_LOCAL_STORAGE_DIR=./storage \
APIFY_INPUT_FILE=./remote_run_input_sg.json \
PYTHONPATH=. .venv/bin/python -m src.main --local
```

To make that local run deterministic, point `fixtureHtmlPath` to one of the HTML files in `fixtures/`.

### Test and verification commands

These commands are present in the repository and are appropriate for verification:

#### Unit/integration tests

```bash
PYTHONPATH=. .venv/bin/pytest -q
```

#### Single scenario gate

```bash
python3 apify_actor_dynamic_test.py --config dynamic_test_config.json
```

#### Multi-scenario gate

```bash
python3 apify_actor_dynamic_multiscenario.py --config dynamic_multiscenario_config.json
```

#### Quality gate

```bash
python3 apify_actor_quality_gate.py --config quality_gate_config.json
```

#### Release gate

```bash
python3 apify_actor_release_gate.py --config release_gate_config.json
```

### Limitations

- This actor only parses **search-result HTML cards**.
- It does not visit product detail pages for extra enrichment.
- It does not support markets outside `US`, `SG`, `CA`, `GB`, `AU`.
- It depends on Amazon's current HTML structure for search cards.
- If Amazon returns a captcha/block page, the run can fail with `amazon_block_or_captcha`.
- If Amazon returns a page without parseable search cards, parsing can fail with `amazon_no_search_cards` or `amazon_no_parseable_products`.
- `maxItems` and `maxItemsPerKeyword` are runtime-limited to `100`, even though schema metadata may be more permissive.
- Runtime keyword count is limited to `10`.

### Troubleshooting

#### Dataset is empty or run fails with no rows

Check:

- keyword is valid and not blank after trimming
- `market` is one of `US`, `SG`, `CA`, `GB`, `AU`
- fixture HTML really contains Amazon search cards
- `RUN_SUMMARY` or `ERROR_SUMMARY` for parse/block details

#### Remote run rejects proxy settings

Check:

- `useApifyProxy` is enabled
- `proxyUrls` is not used
- `apifyProxyCountry` matches the selected market country
- Apify Proxy group resolves to include `RESIDENTIAL`

#### Amazon returns block/captcha behavior

Look for errors such as:

- `amazon_block_or_captcha`
- failed fetch errors from `httpx`

Then try:

- matching the market and proxy country correctly
- using Apify residential proxy routing
- reducing run size while validating with one keyword and one page first

#### Debugging parser behavior

Use:

- `fixtureHtmlPath` for deterministic local parsing
- `includeRawHtml=true` to inspect row-level card HTML
- `debug=true` to save `DEBUG_<keyword>` page metadata

# Actor input Schema

## `keywords` (type: `array`):

Amazon search keywords. Empty strings should be filtered before execution.

## `market` (type: `string`):

Amazon storefront to query. Supports United States, Singapore, Canada, United Kingdom, and Australia.

## `pages` (type: `integer`):

Maximum number of search-result pages to request for each keyword.

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

Global cap for total emitted dataset items across all keywords.

## `maxItemsPerKeyword` (type: `integer`):

Per-keyword cap applied before the global maxItems limit.

## `requestTimeoutSecs` (type: `integer`):

HTTP timeout for each Amazon request.

## `userAgent` (type: `string`):

Optional HTTP User-Agent override for local debugging.

## `debug` (type: `boolean`):

Enable verbose diagnostic logging and extra debugging artifacts.

## `includeRawHtml` (type: `boolean`):

Persist raw HTML snapshots to the default key-value store for debugging.

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

Apify proxy settings used for remote runs.

## `fixtureHtmlPath` (type: `string`):

Optional local HTML fixture path for deterministic offline validation and gate runs.

## Actor input object example

```json
{
  "keywords": [
    "usb hub"
  ],
  "market": "SG",
  "pages": 1,
  "maxItems": 40,
  "maxItemsPerKeyword": 40,
  "requestTimeoutSecs": 30,
  "debug": false,
  "includeRawHtml": false
}
```

# Actor output Schema

## `results` (type: `string`):

Normalized Amazon search result items from the default dataset.

## `runSummary` (type: `string`):

Structured summary record stored in the default key-value store.

## `inputEcho` (type: `string`):

Normalized input saved at run start.

## `errorSummary` (type: `string`):

Present when a failed run stores structured terminal error information.

# 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 = {
    "keywords": [
        "usb hub"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/amazon-search-results-collector").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 = { "keywords": ["usb hub"] }

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/amazon-search-results-collector").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 '{
  "keywords": [
    "usb hub"
  ]
}' |
apify call lentic_clockss/amazon-search-results-collector --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Amazon  Scraper - US, SG, CA, GB, AU",
        "description": "Use this Amazon scraper to collect data based on URL and country from the Amazon website. Extract product information without using the Amazon API, including reviews, prices, descriptions, and Amazon Standard Identification Numbers (ASINs). Download data in various structured formats.",
        "version": "0.1",
        "x-build-id": "siwygK6yO4eiPUD4C"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lentic_clockss~amazon-search-results-collector/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lentic_clockss-amazon-search-results-collector",
                "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/lentic_clockss~amazon-search-results-collector/runs": {
            "post": {
                "operationId": "runs-sync-lentic_clockss-amazon-search-results-collector",
                "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/lentic_clockss~amazon-search-results-collector/run-sync": {
            "post": {
                "operationId": "run-sync-lentic_clockss-amazon-search-results-collector",
                "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": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "Keywords",
                        "minItems": 1,
                        "maxItems": 10,
                        "type": "array",
                        "description": "Amazon search keywords. Empty strings should be filtered before execution.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "market": {
                        "title": "Market",
                        "enum": [
                            "US",
                            "SG",
                            "CA",
                            "GB",
                            "AU"
                        ],
                        "type": "string",
                        "description": "Amazon storefront to query. Supports United States, Singapore, Canada, United Kingdom, and Australia.",
                        "default": "SG"
                    },
                    "pages": {
                        "title": "Pages per keyword",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Maximum number of search-result pages to request for each keyword.",
                        "default": 1
                    },
                    "maxItems": {
                        "title": "Maximum output items",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Global cap for total emitted dataset items across all keywords.",
                        "default": 40
                    },
                    "maxItemsPerKeyword": {
                        "title": "Maximum output items per keyword",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Per-keyword cap applied before the global maxItems limit.",
                        "default": 40
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 180,
                        "type": "integer",
                        "description": "HTTP timeout for each Amazon request.",
                        "default": 30
                    },
                    "userAgent": {
                        "title": "User-Agent override",
                        "type": "string",
                        "description": "Optional HTTP User-Agent override for local debugging."
                    },
                    "debug": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Enable verbose diagnostic logging and extra debugging artifacts.",
                        "default": false
                    },
                    "includeRawHtml": {
                        "title": "Save raw HTML",
                        "type": "boolean",
                        "description": "Persist raw HTML snapshots to the default key-value store for debugging.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings used for remote runs."
                    },
                    "fixtureHtmlPath": {
                        "title": "Local fixture HTML path",
                        "type": "string",
                        "description": "Optional local HTML fixture path for deterministic offline validation and gate runs."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
