# RockAuto Parts Scraper (`crawlerbros/rockauto-parts-scraper`) Actor

Search RockAuto.com, the largest free public US auto-parts catalogue by keyword or part number. Returns manufacturer, part number, category, price, core charge, pack size, and Info-page URL per listing. HTTP-only, no proxy, no API key, no login.

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

## Pricing

from $1.00 / 1,000 results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## RockAuto Parts Scraper

Search [RockAuto.com](https://www.rockauto.com) — the largest free public US auto-parts catalogue — by keyword or part number. Each query returns up to ~50 listings with manufacturer, part number, category, price, core charge, total, pack size, and Info-page URL. HTTP-only with automatic Apify residential-proxy fallback when RockAuto's bot-protection CAPTCHA fires (no proxy input needed).

### What it does

You provide one or more search queries; the actor:

1. Submits each query to `rockauto.com/en/partsearch/` and parses the result page.
2. Auto-detects RockAuto's CAPTCHA challenge page and retries the request through Apify residential proxy with a fresh session — eliminates the false-empty results that would otherwise come from datacenter-IP throttling.
3. Filters by manufacturer / category / price range (client-side).
4. Dedupes across queries by `(manufacturer, partNumber)` so no part appears twice.

Each part is one record. Empty fields are omitted (no nulls).

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `queries` | array of strings (required) | `["brake pads"]` | Search terms — part numbers, brand names, category keywords. E.g. `BREMBO P28004`, `oil filter`, `brake pads`. Each runs as a separate RockAuto search. |
| `manufacturerFilter` | string | – | Only emit records whose manufacturer matches this substring (case-insensitive). E.g. `BOSCH`. |
| `categoryFilter` | string | – | Only emit records whose category matches this substring (case-insensitive). E.g. `Brake Pad`, `Oil Filter`. |
| `minPrice` | number | – | Drop records with price below this amount (USD). Records without a parsed price are kept. |
| `maxPrice` | number | – | Drop records with price above this amount. Records without a parsed price are kept. |
| `maxResults` | integer | `50` (1–500) | Hard cap on parts emitted across all queries (after dedup + filtering). |
| `enrichWithPartDetails` | boolean | `false` | When true, fetch each part's RockAuto detail page (`moreInfoUrl`) and add a `details` block (specs, fitment notes, image URLs). Adds ~1 extra HTTP request per part — slower but richer. |
| `vehicleMake` | string | – | Vehicle-mode: append a make to each query (e.g. `Toyota`). |
| `vehicleModel` | string | – | Vehicle-mode: model (e.g. `Camry`). |
| `vehicleYear` | integer | – | Vehicle-mode: model year (e.g. `2020`). |
| `vehicleEngine` | string | – | Vehicle-mode: engine spec (e.g. `2.5L L4`, `5.7L V8`). |
| `startUrls` | array of strings | `[]` | Paste full RockAuto partsearch URLs (e.g. `https://www.rockauto.com/en/partsearch/?partnum=brake+pads`). Each URL's `partnum` becomes a query. |

#### Example input

```json
{
  "queries": ["brake pads", "oil filter"],
  "manufacturerFilter": "BOSCH",
  "categoryFilter": "Brake",
  "minPrice": 5,
  "maxPrice": 100,
  "maxResults": 100
}
````

### Output

One record per unique part. Empty fields are omitted (no nulls).

```json
{
  "manufacturer": "BETTER BRAKE PARTS",
  "partNumber": "5473K",
  "category": "Brake Pad Retaining Clip / Spring",
  "priceUSD": 2.15,
  "totalUSD": 2.15,
  "packSize": 1,
  "moreInfoUrl": "https://www.rockauto.com/en/moreinfo.php?pk=12345&cc=0",
  "notes": "For 2018-2020 Toyota Camry, Front, OEM 5473K",
  "inputQuery": "brake pads",
  "scrapedAt": "2024-12-16T14:23:11+00:00"
}
```

#### Output fields

- **`manufacturer`** — brand / manufacturer (e.g. `BREMBO`, `BOSCH`, `MOTORCRAFT`).
- **`partNumber`** — manufacturer's part number.
- **`category`** — RockAuto's part-category label (e.g. `Brake Pad`, `Oil Filter`, `ABS Wheel Speed Sensor`).
- **`priceUSD`** — listing price in USD; absent when RockAuto hides the price (rare).
- **`coreChargeUSD`** — core charge / refundable deposit (USD); absent when 0.
- **`totalUSD`** — `priceUSD + coreChargeUSD`. Always present alongside `priceUSD`.
- **`packSize`** — units per listing (e.g. `4` for a "pack of 4 brake pads"). Defaults to `1` when not specified.
- **`moreInfoUrl`** — direct link to the part's RockAuto detail page (specs, fitment, warranty).
- **`notes`** — fitment / position / OEM cross-reference notes (e.g. `"For 2020 Toyota Camry, Front Left"`).
- **`details`** — (only when `enrichWithPartDetails: true`) nested `{specs, images[], notes}` block parsed from the moreinfo page. Specs is a snake\_cased key/value dict (e.g. `{position: "Front", material: "Ceramic", oem_part_number: "5L8Z-2001-AA"}`); `images` is up to 10 product image URLs.
- **`inputQuery`** — the search query that surfaced this part.
- **`scrapedAt`** — ISO-8601 UTC timestamp.

### Use cases

- **Price comparison** — pull every brake-pad listing for a query and compare across brands.
- **Inventory enrichment** — feed your retail / repair-shop tool with RockAuto's catalogue (price, brand, category) for cross-reference.
- **Brand sourcing** — find every part by a specific manufacturer (e.g. `BREMBO`, `MOTORCRAFT`).
- **Category audits** — pull all `Oil Filter` results and analyse price distribution across brands.
- **Part-number lookup** — bulk-resolve 100+ exact part numbers to find current pricing on RockAuto.

### FAQ

**Does it need a proxy?**
Not as input — the actor automatically uses Apify residential proxy as a CAPTCHA fallback. Strategy:

1. **Direct fetch** with realistic Chrome headers (Referer, Accept-Language, Sec-Fetch-\*) from Apify's datacenter.
2. **User-supplied premium proxies** (`customProxyUrls` input) — tried sequentially BEFORE Apify's pool. Most useful when RockAuto's WAF has flagged Apify's shared residential IPs for high-traffic keywords.
3. **Apify residential proxy** with up to 5 fresh sessions, each with its own per-session warmup and a jittered 1.5–4.0s delay between attempts.

**Why does my keyword (`headlight`, `alternator`, etc.) sometimes return zero results?**
RockAuto's WAF aggressively CAPTCHAs certain high-traffic single-token keywords across the entire request fingerprint — IP, headers, timing — regardless of how realistic the request looks. The actor tries plural + suffixed variants (`headlight` → `headlights` → `headlight assembly` → `headlight kit` → `headlight bulb`) and rotates through 5 fresh proxy sessions per variant. Some keywords still fail because RockAuto has flagged the entire shared residential block.

**Workarounds when a keyword consistently fails:**

1. **Use a 2-token query directly.** `brake pads`, `oil filter`, `BOSCH headlight assembly`, `air filter` — all reliable.
2. **Supply your own residential proxy** via `customProxyUrls` (premium services like BrightData, Oxylabs, SmartProxy that aren't on RockAuto's blocklist).
3. **Use vehicle-mode** with `vehicleMake` set — appends a make to your query so it's always 2+ tokens.

The actor emits a diagnostic sentinel `{type: "rockauto_scraper_error", reason: "no_results", variantsAttempted: [...]}` listing every variant it tried, so you can see exactly what was attempted.

**How many results per query?**
Up to ~50 per query — RockAuto caps the per-search-page count. For more results, run multiple narrower queries (e.g. `brake pads BMW`, `brake pads Toyota`) instead of one broad one.

**Can I search by vehicle (make / model / year)?**
Yes — set `vehicleMake`, `vehicleModel`, `vehicleYear`, and/or `vehicleEngine`. The actor appends those values to each query in `queries` and tries the most-specific search first, **automatically falling back to progressively shorter queries** if the full query CAPTCHAs or returns no results.

Example with `queries=["brake pads"]`, `vehicleMake="Toyota"`, `vehicleModel="Camry"`, `vehicleYear=2020`, `vehicleEngine="2.5L L4"` — fallback chain:

1. `"brake pads Toyota Camry 2020 2.5L L4"` (full)
2. `"brake pads Toyota Camry 2020"` (drop engine)
3. `"brake pads Toyota Camry"` (drop year)
4. `"brake pads Toyota"` (drop model)
5. `"brake pads"` (drop make — last resort)

The first variant that returns a parseable result page wins. RockAuto's keyword search frequently CAPTCHAs 3+ token queries, so the fallback typically lands at variant 4 (`brake pads Toyota`). The record's `inputQuery` field shows which variant actually matched. This is a keyword-search overlay, not a catalog walker; it works HTTP-only and reuses our partsearch endpoint.

**Why is the price sometimes missing?**
RockAuto hides the price on a small fraction of listings (often discontinued or special-order parts). The `priceUSD` field is omitted in those cases (omit-empty contract).

**What if zero parts match?**
The actor emits a single sentinel record `{type: "rockauto_scraper_error", reason: "no_results"}` so the dataset is non-empty. The run still completes successfully.

**Can I scrape the part detail page?**
This actor focuses on search results. Use the `moreInfoUrl` field with a downstream actor for the part's detail page (specs, photos, warranty terms).

**Are prices in USD?**
Yes. RockAuto's US site (`/en/`) is USD-only. International variants would require a different scraper.

# Actor input Schema

## `queries` (type: `array`):

One or more search terms. Each runs as a separate RockAuto search; results are merged and deduped by part number across queries. Use part numbers, brand names, or category keywords (e.g. `BREMBO P28004`, `oil filter`, `brake pads`).

## `manufacturerFilter` (type: `string`):

Optional: only emit records whose manufacturer matches this substring (case-insensitive). E.g. `BOSCH`.

## `categoryFilter` (type: `string`):

Optional: only emit records whose category matches this substring (case-insensitive). E.g. `Brake Pad`, `Oil Filter`.

## `maxPrice` (type: `number`):

Optional: drop records with price above this amount. Records without a parsed price are kept.

## `minPrice` (type: `number`):

Optional: drop records with price below this amount. Records without a parsed price are kept.

## `maxResults` (type: `integer`):

Hard cap on parts emitted across all queries (after dedup + filtering).

## `enrichWithPartDetails` (type: `boolean`):

When true, fetch the part's RockAuto detail page (moreinfo URL) for each result and add a `details` block (extra specs, fitment notes, image URLs). Adds ~1 extra HTTP request per part — slower but richer.

## `vehicleMake` (type: `string`):

Vehicle-mode: filter `queries` to a specific make (e.g. `Toyota`, `Ford`, `Honda`). Used to narrow keyword search to vehicle-specific parts.

## `vehicleModel` (type: `string`):

Vehicle-mode: filter to a specific model (e.g. `Camry`, `F-150`, `Civic`).

## `vehicleYear` (type: `integer`):

Vehicle-mode: model year (e.g. `2020`).

## `vehicleEngine` (type: `string`):

Vehicle-mode: engine spec (e.g. `2.5L L4`, `5.7L V8 Hemi`).

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

Paste full RockAuto partsearch URLs (e.g. `https://www.rockauto.com/en/partsearch/?partnum=brake+pads`). Each URL's `partnum` becomes a query.

## `customProxyUrls` (type: `array`):

Premium / alternative residential-proxy URLs (e.g. from BrightData, Oxylabs, SmartProxy). Format: `http://user:pass@host:port`. The actor rotates through these BEFORE falling back to Apify's residential pool. Useful when RockAuto's WAF has flagged Apify's shared residential IPs for high-traffic keywords like `headlight` or `alternator`.

## Actor input object example

```json
{
  "queries": [
    "brake pads"
  ],
  "maxResults": 50,
  "enrichWithPartDetails": false,
  "startUrls": []
}
```

# 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 = {
    "queries": [
        "brake pads"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/rockauto-parts-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 = { "queries": ["brake pads"] }

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/rockauto-parts-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 '{
  "queries": [
    "brake pads"
  ]
}' |
apify call crawlerbros/rockauto-parts-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "RockAuto Parts Scraper",
        "description": "Search RockAuto.com, the largest free public US auto-parts catalogue by keyword or part number. Returns manufacturer, part number, category, price, core charge, pack size, and Info-page URL per listing. HTTP-only, no proxy, no API key, no login.",
        "version": "0.1",
        "x-build-id": "56sWXKdAunj5LMY2h"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~rockauto-parts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-rockauto-parts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/crawlerbros~rockauto-parts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-rockauto-parts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/crawlerbros~rockauto-parts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-rockauto-parts-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "One or more search terms. Each runs as a separate RockAuto search; results are merged and deduped by part number across queries. Use part numbers, brand names, or category keywords (e.g. `BREMBO P28004`, `oil filter`, `brake pads`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "manufacturerFilter": {
                        "title": "Manufacturer filter",
                        "type": "string",
                        "description": "Optional: only emit records whose manufacturer matches this substring (case-insensitive). E.g. `BOSCH`."
                    },
                    "categoryFilter": {
                        "title": "Category filter",
                        "type": "string",
                        "description": "Optional: only emit records whose category matches this substring (case-insensitive). E.g. `Brake Pad`, `Oil Filter`."
                    },
                    "maxPrice": {
                        "title": "Max price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "number",
                        "description": "Optional: drop records with price above this amount. Records without a parsed price are kept."
                    },
                    "minPrice": {
                        "title": "Min price (USD)",
                        "minimum": 0,
                        "maximum": 100000,
                        "type": "number",
                        "description": "Optional: drop records with price below this amount. Records without a parsed price are kept."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Hard cap on parts emitted across all queries (after dedup + filtering).",
                        "default": 50
                    },
                    "enrichWithPartDetails": {
                        "title": "Enrich with part-detail data",
                        "type": "boolean",
                        "description": "When true, fetch the part's RockAuto detail page (moreinfo URL) for each result and add a `details` block (extra specs, fitment notes, image URLs). Adds ~1 extra HTTP request per part — slower but richer.",
                        "default": false
                    },
                    "vehicleMake": {
                        "title": "Vehicle make (optional)",
                        "type": "string",
                        "description": "Vehicle-mode: filter `queries` to a specific make (e.g. `Toyota`, `Ford`, `Honda`). Used to narrow keyword search to vehicle-specific parts."
                    },
                    "vehicleModel": {
                        "title": "Vehicle model (optional)",
                        "type": "string",
                        "description": "Vehicle-mode: filter to a specific model (e.g. `Camry`, `F-150`, `Civic`)."
                    },
                    "vehicleYear": {
                        "title": "Vehicle year (optional)",
                        "minimum": 1900,
                        "maximum": 2030,
                        "type": "integer",
                        "description": "Vehicle-mode: model year (e.g. `2020`)."
                    },
                    "vehicleEngine": {
                        "title": "Vehicle engine (optional)",
                        "type": "string",
                        "description": "Vehicle-mode: engine spec (e.g. `2.5L L4`, `5.7L V8 Hemi`)."
                    },
                    "startUrls": {
                        "title": "Start URLs (optional)",
                        "type": "array",
                        "description": "Paste full RockAuto partsearch URLs (e.g. `https://www.rockauto.com/en/partsearch/?partnum=brake+pads`). Each URL's `partnum` becomes a query.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "customProxyUrls": {
                        "title": "Custom proxy URLs (optional, advanced)",
                        "type": "array",
                        "description": "Premium / alternative residential-proxy URLs (e.g. from BrightData, Oxylabs, SmartProxy). Format: `http://user:pass@host:port`. The actor rotates through these BEFORE falling back to Apify's residential pool. Useful when RockAuto's WAF has flagged Apify's shared residential IPs for high-traffic keywords like `headlight` or `alternator`."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
