# Waitrose Product Scraper (`trev0n/waitrose-scraper`) Actor

Extract grocery products from Waitrose.com — names, prices, unit prices, offers, reviews, categories, and images. Search, category browse, and offers modes with optional price-change monitoring.

- **URL**: https://apify.com/trev0n/waitrose-scraper.md
- **Developed by:** [Paweł](https://apify.com/trev0n) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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

## 🛒 Coles Product Search Scraper

🎯 **Pull every product, price, and promotion off Coles.com.au — Australia's #1 supermarket — in seconds.**

Scrape product listings from Coles search and category pages with names, brands, sizes, current and was prices, unit pricing, multi-buy promotions, availability, images, and merchandise hierarchy. Built for price monitoring, market research, and competitive intelligence in the Australian grocery sector.

---

### 🚀 What Does It Do?

This scraper automatically opens any Coles search or category URL and pulls every product it finds into **structured, ready-to-use data**. No manual browsing, no copy-paste, no login required.

💡 **Two modes of operation:**

1. **🔍 Keyword Mode** — Drop in a list of search terms (e.g. `milk`, `tim tams`, `gluten free bread`) and the scraper builds the search URLs for you.
2. **📋 Direct URL Mode** — Paste any Coles search, category, or filtered-results URL and the scraper walks every page until it hits your limit.

🔁 You can also combine both — provide some URLs and some keywords in one run.

---

### 👥 Who Is This For?

| 🏢 Use Case                        | 💬 How It Helps                                                                                                |
| ---------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| 💰 **Price Comparison Platforms**  | Build a live AU grocery price feed alongside Woolworths, IGA, and Aldi — full SKU coverage with promo tracking |
| 📊 **FMCG Brands & Suppliers**     | Monitor where your products sit on Coles, what specials they run, and which brands are out-pricing you         |
| 🛍️ **Retail Analysts**             | Track category-level pricing, basket-style promotions, and seasonal pricing rhythms across all categories      |
| 🍞 **Private-Label Manufacturers** | Benchmark Coles "Coles Brand" pricing against name brands in real time                                         |
| 📰 **Cost-of-Living Reporters**    | Measure shrinkflation, weekly specials, and trolley-cost shifts with hard data                                 |
| 🤖 **AI / Data Teams**             | Feed structured grocery data into pricing models, recommendation engines, and demand-forecasting pipelines     |

---

### ✨ Features

- 🌐 **Any Coles URL Works** — Search results, category browses, brand filters, "On Special" pages. Just paste, hit Start.
- 🔎 **Keyword Search Mode** — Drop in a list of search terms; the scraper turns each one into a search URL automatically.
- 💸 **Full Pricing Breakdown** — Current price, was price, savings amount, and unit price (e.g. `$1.20 per 100g`) for every item.
- 🏷️ **Promotion Detection** — Catches "1/2 Price", "Save $X", "Down Down", multi-buy bundles, and member-only specials.
- 🏪 **Coles Brand vs Name Brand** — Brand field is normalised so private-label vs branded analysis is one filter away.
- 📦 **Pack Sizes & Unit Prices** — See `1L`, `500g`, `12pk` next to the price for accurate cost-per-unit comparisons.
- 🗂️ **Merchandise Hierarchy** — Every product carries its full Coles category breadcrumb (e.g. Dairy & Eggs → Milk → Full Cream).
- 📍 **Availability Status** — Know whether a product is in stock, out of stock, or location-restricted.
- 🖼️ **Product Images** — Full-resolution image URLs ready to plug into your catalog or BI dashboard.
- 🔄 **Auto Pagination** — Walks every results page until the limit you set or the very last page.
- 🛡️ **Anti-Blocking** — Stealth browser fingerprints + Australian residential proxies built in.
- ⚡ **Fast & Scalable** — Run thousands of queries per day; concurrency is fully configurable.
- 📤 **Export Anywhere** — Download results as JSON, CSV, Excel, or push to Google Sheets, Zapier, Make, or your CRM.

---

### 🎛️ Filters & Options

| Option                     | What It Does                                                                    |
| -------------------------- | ------------------------------------------------------------------------------- |
| 🔗 **URLs**                | Direct Coles search, category, or filtered URLs to scrape                       |
| 🔎 **Search Queries**      | Plain keywords — the scraper builds the search URL for each one                 |
| 🔢 **Max Items Per URL**   | Cap how many products to extract per URL or query (set 0 for unlimited)         |
| 🔁 **Max Retries Per URL** | How many times to retry a failed page load before giving up                     |
| 🛟 **Ignore URL Failures** | Keep going on errors instead of halting the whole run — perfect for bulk jobs   |
| ⚙️ **Max Concurrency**     | How many pages to load in parallel — keep it modest, Coles is heavily protected |
| 🌏 **Proxy Configuration** | Defaults to Apify residential proxies in Australia for best results             |

---

### 📦 What You Get (Output Fields)

Every product includes:

#### Identity

| Field       | Example                                                               |
| ----------- | --------------------------------------------------------------------- |
| productId   | `"5051077"`                                                           |
| name        | `"Coles Full Cream Milk 2L"`                                          |
| brand       | `"Coles"`                                                             |
| size        | `"2L"`                                                                |
| description | `"Coles full cream milk in a 2 litre bottle."`                        |
| url         | `"https://www.coles.com.au/product/coles-full-cream-milk-2l-5051077"` |

#### Pricing

| Field          | Example          |
| -------------- | ---------------- |
| price.current  | `3.10`           |
| price.was      | `3.40`           |
| price.savings  | `0.30`           |
| price.currency | `"AUD"`          |
| pricePerUnit   | `"$1.55 per 1L"` |

#### Promotions

| Field               | Example        |
| ------------------- | -------------- |
| promotion.label     | `"Save $0.30"` |
| promotion.type      | `"PRICE_DROP"` |
| promotion.startDate | `"2026-04-30"` |
| promotion.endDate   | `"2026-05-06"` |

#### Categorisation

| Field                | Example                                          |
| -------------------- | ------------------------------------------------ |
| category.breadcrumbs | `["Dairy, Eggs & Fridge", "Milk", "Full Cream"]` |
| category.category    | `"Dairy, Eggs & Fridge"`                         |
| category.subCategory | `"Milk"`                                         |
| category.aisle       | `"Aisle 12"`                                     |

#### Availability & Media

| Field              | Example                                                                        |
| ------------------ | ------------------------------------------------------------------------------ |
| availability       | `"In Stock"`                                                                   |
| locationRestricted | `false`                                                                        |
| images             | `["https://shop.coles.com.au/wcsstore/Coles-CAS/images/5/0/5/5051077-th.jpg"]` |
| featured           | `false`                                                                        |
| adId               | `null`                                                                         |
| adSource           | `null`                                                                         |
| scrapedAt          | `"2026-05-02T19:48:00.000Z"`                                                   |

---

### 📊 Example Output

```json
{
    "productId": "5051077",
    "name": "Coles Full Cream Milk 2L",
    "brand": "Coles",
    "size": "2L",
    "description": null,
    "price": {
        "current": 3.1,
        "was": 3.4,
        "savings": 0.3,
        "currency": "AUD"
    },
    "pricePerUnit": "$1.55 per 1L",
    "promotion": {
        "label": "Save $0.30",
        "type": "PRICE_DROP",
        "startDate": "2026-04-30",
        "endDate": "2026-05-06"
    },
    "availability": "In Stock",
    "category": {
        "breadcrumbs": ["Dairy, Eggs & Fridge", "Milk", "Full Cream"],
        "category": "Dairy, Eggs & Fridge",
        "subCategory": "Milk",
        "aisle": "Aisle 12"
    },
    "url": "https://www.coles.com.au/product/coles-full-cream-milk-2l-5051077",
    "images": ["https://shop.coles.com.au/wcsstore/Coles-CAS/images/5/0/5/5051077-th.jpg"],
    "featured": false,
    "adId": null,
    "adSource": null,
    "locationRestricted": false,
    "scrapedAt": "2026-05-02T19:48:00.000Z"
}
````

***

### 📋 Dataset Views

The Apify Console gives you **2 ready-made table views** to quickly browse your results:

| View            | What It Shows                                                                            |
| --------------- | ---------------------------------------------------------------------------------------- |
| 📊 **Overview** | Product name, brand, size, current price, was price, promotion, availability, URL, image |
| 💰 **Pricing**  | Price-focused view with current, was, savings, unit price, and promotion label per row   |

***

### ❓ FAQ

**🤔 Why are Australian residential proxies recommended?**
Coles aggressively blocks data-center IPs and non-AU traffic. Residential AU proxies look like real shoppers and dramatically reduce blocks. They're enabled by default.

**🤔 Does it handle promotions and "1/2 Price" specials?**
Yes — every product carries a `promotion` object with the label, type, and start/end dates whenever a special is active.

**🤔 Can I scrape an entire category?**
Yes — paste any Coles category URL (e.g. `/browse/dairy-eggs-fridge/milk`) and set `max_items_per_url` to 0 for unlimited. The scraper walks every page automatically.

**🤔 Can I export the data?**
Yes — JSON, CSV, Excel, XML, HTML, RSS. You can also push data directly to Google Sheets, Zapier, Make, or any webhook/API endpoint.

**🤔 How often should I run this?**
For fresh price data, run daily. For weekly specials tracking, run every Wednesday morning when Coles refreshes its catalogue. You can schedule automatic runs on Apify with just a few clicks.

**🤔 Does it work with proxies?**
Yes — residential proxies are recommended for the best results. The scraper works with Apify's built-in proxy service and is preconfigured for Australia.

**🤔 What about Woolworths, IGA, and Aldi?**
I can build a scraper for any of those — see the next section.

***

### 🛠️ Need Custom Filters or Features?

**I'm happy to customize this scraper for your specific needs!** 🤝

Whether you need:

- 🎯 Additional filters (price range, "On Special" only, brand-specific, location-specific stock)
- 📊 Extra data fields (full ingredients, nutrition panel, allergen info, ratings & reviews)
- 🔄 Integration with your CRM, Google Sheets, BigQuery, or in-house database
- ⏰ Scheduled scraping with automatic deduplication and price-change alerts
- 🌐 Scraping from other Australian grocery platforms alongside Coles (Woolworths, IGA, Aldi, Harris Farm, Costco)

👉 **Don't hesitate to reach out via private message** — I respond quickly and I'm always open to building exactly what you need. No request is too small or too specific!

***

### ⚖️ Legal & Ethical Use

This scraper collects **only publicly available information** from Coles.com.au. It does not access private customer data, bypass authentication, or collect anything that isn't openly visible on the public website. Please use the data responsibly and in compliance with applicable laws and platform terms of service.

# Actor input Schema

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

Keywords to search Waitrose for. Each keyword is scraped as a separate search. Example: \["whole milk", "sourdough", "olive oil"].

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

Waitrose search, category, offers, or product URLs to scrape directly. Category URLs are expanded automatically into their sub-categories. Example: https://www.waitrose.com/ecom/shop/browse/groceries/fresh\_and\_chilled/milk\_butter\_and\_eggs/milk

## `scrapeOffers` (type: `boolean`):

Also scrape the Waitrose Offers page (products currently on promotion).

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

Maximum number of products to collect across the whole run (0 = unlimited).

## `descendCategories` (type: `boolean`):

When scraping a category, automatically descend into its sub-categories to cover the full catalogue (Waitrose shows only ~48 products per category page).

## `maxCategoryDepth` (type: `integer`):

How many levels deep to descend the category tree when expanding sub-categories.

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

Maximum number of pages fetched in parallel.

## `incremental` (type: `boolean`):

Track changes across runs. The first run is a baseline; later runs emit only products that are new, changed (e.g. price drop), or back in stock — cutting the cost of recurring monitoring by 80–95%.

## `stateKey` (type: `string`):

Optional name for the monitoring baseline. Leave empty to derive one from your search configuration. Use distinct keys to track different searches independently.

## `emitUnchanged` (type: `boolean`):

In incremental mode, also output products whose price and details are unchanged.

## `emitExpired` (type: `boolean`):

In incremental mode, also output products that disappeared from results since the last run.

## `skipReposts` (type: `boolean`):

Drop products that are the same as a recently expired one relisted under a new id.

## `notify` (type: `object`):

Optional webhook / Telegram / Discord / Slack notifications for new and changed products (used with incremental monitoring).

## `proxy` (type: `object`):

Waitrose is geo-gated to the UK and bot-protected — a GB residential proxy is strongly recommended.

## Actor input object example

```json
{
  "searchTerms": [
    "whole milk",
    "sourdough"
  ],
  "startUrls": [],
  "scrapeOffers": false,
  "maxResults": 500,
  "descendCategories": true,
  "maxCategoryDepth": 6,
  "maxConcurrency": 8,
  "incremental": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "skipReposts": false,
  "notify": {},
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "GB"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "searchTerms": [
        "whole milk",
        "sourdough"
    ],
    "startUrls": [],
    "notify": {}
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "searchTerms": [
        "whole milk",
        "sourdough",
    ],
    "startUrls": [],
    "notify": {},
}

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "whole milk",
    "sourdough"
  ],
  "startUrls": [],
  "notify": {}
}' |
apify call trev0n/waitrose-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Waitrose Product Scraper",
        "description": "Extract grocery products from Waitrose.com — names, prices, unit prices, offers, reviews, categories, and images. Search, category browse, and offers modes with optional price-change monitoring.",
        "version": "1.0",
        "x-build-id": "emoJ4mPLkCZN9pMWd"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/trev0n~waitrose-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-trev0n-waitrose-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/trev0n~waitrose-scraper/runs": {
            "post": {
                "operationId": "runs-sync-trev0n-waitrose-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/trev0n~waitrose-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-trev0n-waitrose-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchTerms": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search Waitrose for. Each keyword is scraped as a separate search. Example: [\"whole milk\", \"sourdough\", \"olive oil\"].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Waitrose search, category, offers, or product URLs to scrape directly. Category URLs are expanded automatically into their sub-categories. Example: https://www.waitrose.com/ecom/shop/browse/groceries/fresh_and_chilled/milk_butter_and_eggs/milk",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "scrapeOffers": {
                        "title": "Scrape current offers",
                        "type": "boolean",
                        "description": "Also scrape the Waitrose Offers page (products currently on promotion).",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum products",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of products to collect across the whole run (0 = unlimited).",
                        "default": 500
                    },
                    "descendCategories": {
                        "title": "Expand sub-categories",
                        "type": "boolean",
                        "description": "When scraping a category, automatically descend into its sub-categories to cover the full catalogue (Waitrose shows only ~48 products per category page).",
                        "default": true
                    },
                    "maxCategoryDepth": {
                        "title": "Max category depth",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "How many levels deep to descend the category tree when expanding sub-categories.",
                        "default": 6
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrency",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Maximum number of pages fetched in parallel.",
                        "default": 8
                    },
                    "incremental": {
                        "title": "Incremental monitoring",
                        "type": "boolean",
                        "description": "Track changes across runs. The first run is a baseline; later runs emit only products that are new, changed (e.g. price drop), or back in stock — cutting the cost of recurring monitoring by 80–95%.",
                        "default": false
                    },
                    "stateKey": {
                        "title": "Monitoring state key",
                        "type": "string",
                        "description": "Optional name for the monitoring baseline. Leave empty to derive one from your search configuration. Use distinct keys to track different searches independently."
                    },
                    "emitUnchanged": {
                        "title": "Emit unchanged products",
                        "type": "boolean",
                        "description": "In incremental mode, also output products whose price and details are unchanged.",
                        "default": false
                    },
                    "emitExpired": {
                        "title": "Emit expired products",
                        "type": "boolean",
                        "description": "In incremental mode, also output products that disappeared from results since the last run.",
                        "default": false
                    },
                    "skipReposts": {
                        "title": "Skip reposts",
                        "type": "boolean",
                        "description": "Drop products that are the same as a recently expired one relisted under a new id.",
                        "default": false
                    },
                    "notify": {
                        "title": "Notifications",
                        "type": "object",
                        "description": "Optional webhook / Telegram / Discord / Slack notifications for new and changed products (used with incremental monitoring)."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Waitrose is geo-gated to the UK and bot-protected — a GB residential proxy is strongly recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "GB"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
