# Leroy Merlin Portugal Scraper — DIY & Home Improvement (`studio-amba/leroymerlin-pt-scraper`) Actor

Scrape products, prices, specifications, ratings, and availability from leroymerlin.pt, Portugal's Leroy Merlin DIY and home improvement store. Supports search queries and category browsing.

- **URL**: https://apify.com/studio-amba/leroymerlin-pt-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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/docs.md):

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

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

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

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

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

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

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

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

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


# README

## Leroy Merlin Portugal Scraper -- Portugal's Leroy Merlin DIY & Home Improvement Store

Scrape products, prices, ratings, detailed specifications, and availability from leroymerlin.pt -- Leroy Merlin's Portugal online store for DIY, building materials, and home improvement, part of the pan-European Adeo group.

### What is Leroy Merlin Portugal Scraper?

Leroy Merlin is one of Europe's largest home improvement chains, owned by the Adeo group (also behind Bricoman and Weldom). The leroymerlin.pt storefront carries everything from tiles and paint to plumbing fixtures, power tools, kitchen cabinets, and outdoor furniture for the Portuguese market. This actor is a sibling of our France-focused [Leroy Merlin Scraper](https://apify.com/studio-amba/leroymerlin-scraper), rebuilt for the Portugal catalog, currency, and site structure.

This actor uses Bright Data's Web Unlocker to fetch pages and Cheerio to parse product data from JSON-LD structured data and HTML elements, handling leroymerlin.pt's DataDome anti-bot protection when configured with a Bright Data API key.

- **Price monitoring for the Portuguese market** -- Track pricing on Portugal's Leroy Merlin storefront to benchmark against local competitors or your own catalog
- **Supplier and brand intelligence** -- Analyze which brands dominate specific categories (power tools, paint, flooring, bathroom fixtures)
- **Building materials research** -- Extract specs on tiles, flooring, insulation, and structural materials
- **E-commerce competitive analysis** -- Study product positioning, promotional patterns, and assortment depth
- **Renovation project costing** -- Pull current prices for materials lists to estimate project budgets at scale

### What data does Leroy Merlin Portugal Scraper extract?

- **Product name** -- Full product title in the local language
- **Price & promotions** -- Current price and original price when discounted, in EUR
- **Brand** -- Manufacturer name (Bosch, Dexter, Makita, and other brands sold on leroymerlin.pt)
- **Stock availability** -- InStock status from structured data
- **Ratings & reviews** -- Customer rating value and review count
- **Product images** -- Primary image and full image gallery URLs
- **Technical specifications** -- Detailed specs from product attribute tables (dimensions, materials, weight, finishes)
- **Product description** -- Full product description text
- **Product URL** -- Canonical URL on leroymerlin.pt
- **Category breadcrumbs** -- Full category path from breadcrumb navigation
- **Product identifiers** -- SKU, EAN/GTIN barcode, and internal product ID

### How to scrape Leroy Merlin Portugal data

| Field | Type | Description |
|-------|------|-------------|
| `searchQuery` | String | Search term -- e.g., `"berbequim"`, `"tinta"`, `"azulejos"` |
| `categoryUrl` | String | Category page URL -- e.g., `https://www.leroymerlin.pt/produtos/ferramentas/` |
| `startUrls` | Array | List of specific URLs to scrape (category pages, search results, or product pages) |
| `maxResults` | Integer | Maximum products to return (default: 100, max: 10,000) |
| `proxyConfiguration` | Object | Proxy settings -- **Portuguese (PT) residential proxies strongly recommended** |

**Important: a Bright Data API key is required.** leroymerlin.pt uses DataDome anti-bot protection with geo-IP filtering. Provide your Bright Data Web Unlocker API key as `brightDataApiKey` input (or set the `BRIGHT_DATA_API_KEY` environment variable). Without it, the actor will fail immediately with a clear error instead of burning run time on blocked requests.

**Tips:**
- Start with `categoryUrl` for the most reliable extraction -- leroymerlin.pt blocks its own on-site search endpoint for automated traffic
- Use `startUrls` when you want to scrape specific category pages or individual product URLs
- Keep `maxResults` reasonable (100-500) for your first runs while you dial in proxy settings
- The actor runs at concurrency 1 to minimize bot detection, so large scrapes take proportionally longer

### Output

Each product is returned as a structured JSON object with all available fields:

```json
{
    "name": "Berbequim aparafusadora a bateria Dexter 18V 2Ah, 1 bateria incluída",
    "brand": "Dexter",
    "price": 119.0,
    "currency": "EUR",
    "url": "https://www.leroymerlin.pt/produtos/berbequim-aparafusadora-bateria-dexter-18v-82550081.html",
    "scrapedAt": "2026-07-16T10:30:00.000Z",
    "sku": "82550081",
    "inStock": true,
    "rating": 4.5,
    "reviewCount": 87,
    "imageUrl": "https://media.adeo.com/media/leroymerlin.pt/product-image.jpg",
    "description": "Product description in the local language, extracted from the product page.",
    "specs": {
        "Tensão": "18 V",
        "Bateria incluída": "Sim",
        "Peso": "1.1 kg"
    },
    "category": "Berbequins e aparafusadoras",
    "categories": ["Ferramentas", "Ferramentas elétricas", "Berbequins e aparafusadoras"]
}
````

A building materials example:

```json
{
    "name": "Azulejo pavimento e parede efeito mármore branco Rimini 60x120 cm",
    "brand": "Artens",
    "price": 32.9,
    "originalPrice": 37.9,
    "currency": "EUR",
    "url": "https://www.leroymerlin.pt/produtos/azulejo-pavimento-branco-rimini-83567890.html",
    "scrapedAt": "2026-07-16T10:30:00.000Z",
    "sku": "83567890",
    "inStock": true,
    "rating": 4.3,
    "reviewCount": 62,
    "specs": {
        "Dimensões": "60 x 120 cm",
        "Espessura": "9 mm",
        "Material": "Grés porcelânico esmaltado"
    },
    "category": "Azulejos",
    "categories": ["Pavimentos e paredes", "Azulejos"]
}
```

### How much does it cost?

This actor uses Bright Data's Web Unlocker to bypass DataDome, which is more expensive than plain HTTP scraping but far more reliable than a browser-based approach.

| Scenario | Products | Est. cost |
|----------|----------|-----------|
| Quick category test | 50 | ~$0.50 |
| Category deep dive | 200 | ~$1.50 |
| Brand analysis | 500 | ~$3.00 |
| Large catalog export | 1,000 | ~$5.50 |

Bright Data Web Unlocker costs are additional and billed to your own Bright Data account -- budget roughly $1.50-3.00 per 1,000 requests depending on your plan.

### Can I integrate?

Export data in any format Apify supports:

- **JSON, CSV, Excel** -- Download directly from the dataset
- **Google Sheets** -- Automatic sync via Apify integration
- **Webhooks** -- Trigger your pipeline when a run completes
- **API** -- Fetch results programmatically
- **Zapier / Make** -- Connect to thousands of downstream apps
- **Amazon S3, Google Cloud Storage** -- Push to cloud storage buckets

### Can I use it as an API?

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/leroymerlin-pt-scraper").call(run_input={
    "searchQuery": "berbequim",
    "maxResults": 100,
    "brightDataApiKey": "YOUR_BRIGHT_DATA_KEY",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['name']} - EUR {item['price']}")
```

**JavaScript:**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('studio-amba/leroymerlin-pt-scraper').call({
    searchQuery: 'berbequim',
    maxResults: 100,
    brightDataApiKey: 'YOUR_BRIGHT_DATA_KEY',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQ

**Why do I get blocked or empty results?**
leroymerlin.pt uses DataDome anti-bot protection with geo-IP checks. This actor routes requests through Bright Data's Web Unlocker, which needs a valid API key (input field `brightDataApiKey` or the `BRIGHT_DATA_API_KEY` environment variable). Without a working key, every request fails and the actor exits with a clear error rather than returning empty data.

**Why does `categoryUrl` work better than `searchQuery`?**
leroymerlin.pt's on-site search endpoint (`/search?q=`) is blocked for automated traffic in the site's own crawl policy. Category pages are not, and return the same product cards. The default input already points at a working category page.

**Can I scrape specific store inventory?**
No. The scraper extracts online catalog data. Store-level stock varies by location and is not available through the public website in a structured way.

**What categories does Leroy Merlin Portugal cover?**
The full range: tools and power tools, paint, tiles and flooring, bathroom, kitchen, garden, electrical, plumbing, heating, insulation, and more. Use `categoryUrl` to target specific departments.

**Is the data in the local language only?**
Yes. leroymerlin.pt is a Portuguese-language site. All product names, descriptions, and specs are extracted as published on the site.

**How long does a typical scrape take?**
Due to the single-concurrency requirement (to avoid DataDome blocks), expect roughly 3-5 seconds per product. A 100-product run takes about 5-8 minutes. A 500-product run may take 25-40 minutes.

### Limitations

- Requires a Bright Data Web Unlocker API key -- the actor will not run without one
- Concurrency is limited to 1 to reduce detection risk, so large scrapes are slower
- Product detail page specs depend on how each product is structured -- some items have fewer technical attributes than others
- Product URLs must match Leroy Merlin's pattern (ending with a reference number, e.g. `-82550081.html`)
- The site occasionally updates its page structure, which may temporarily affect extraction accuracy
- Discount/original-price detection depends on matching the exact on-site wording for "was" pricing, which can vary between promotional campaigns

### Other Leroy Merlin & DIY scrapers

Track the wider European home improvement market with these companion scrapers:

- **[Leroy Merlin Scraper (France)](https://apify.com/studio-amba/leroymerlin-scraper)** -- leroymerlin.fr, the original French storefront
- **[Leroy Merlin Spain Scraper](https://apify.com/studio-amba/leroymerlin-es-scraper)** -- leroymerlin.es
- **[Leroy Merlin Italy Scraper](https://apify.com/studio-amba/leroymerlin-it-scraper)** -- leroymerlin.it
- **[Leroy Merlin Poland Scraper](https://apify.com/studio-amba/leroymerlin-pl-scraper)** -- leroymerlin.pl
- **[Leroy Merlin Portugal Scraper](https://apify.com/studio-amba/leroymerlin-pt-scraper)** -- leroymerlin.pt
- **[Castorama Scraper](https://apify.com/studio-amba/castorama-scraper)** -- France, Kingfisher group (Leroy Merlin's main French competitor)
- **[GAMMA Scraper](https://apify.com/studio-amba/gamma-scraper)** -- Belgium, Intergamma group
- **[Hornbach Scraper](https://apify.com/studio-amba/hornbach-scraper)** -- German/EU DIY megastore
- **[Bauhaus Scraper](https://apify.com/studio-amba/bauhaus-scraper)** -- German/EU hardware & DIY
- **[Praxis Scraper](https://apify.com/studio-amba/praxis-scraper)** -- Netherlands, Maxeda DIY Group

### Your feedback

Found a bug? Need a feature? Questions about proxy configuration? Open an issue on the actor's page or contact us through Apify. Your feedback helps us keep this scraper running smoothly.

### Need this data on a schedule, or a custom version?

We run this scraper as a managed service for businesses: scheduled runs,
deduplication, delta detection, and delivery to your inbox, Google Sheets,
or API -- maintenance included. We can also build a custom version with your
exact fields and filters, or combine multiple sources into one feed.

See [studioamba.dev/services](https://studioamba.dev/services/) or email
<hello@studioamba.dev> for a free data sample.
We maintain 300+ European web scrapers and answer within one business day.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by name or keyword (e.g., 'berbequim', 'tinta', 'azulejos'). Note: category URLs work more reliably than search.

## `categoryUrl` (type: `string`):

A Leroy Merlin Portugal category page URL (recommended). Example: https://www.leroymerlin.pt/produtos/ferramentas/

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

List of Leroy Merlin Portugal URLs to scrape (category pages or individual product pages).

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

Maximum number of products to return.

## `brightDataApiKey` (type: `string`):

Your Bright Data API key for the Web Unlocker zone. Required to bypass Leroy Merlin Portugal's anti-bot protection (DataDome + geo-IP). Get one at https://brightdata.com

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

Select proxies to be used by this actor.

## Actor input object example

```json
{
  "categoryUrl": "https://www.leroymerlin.pt/produtos/ferramentas/",
  "startUrls": [
    {
      "url": "https://www.leroymerlin.pt/produtos/ferramentas/"
    }
  ],
  "maxResults": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PT"
  }
}
```

# 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 = {
    "categoryUrl": "https://www.leroymerlin.pt/produtos/ferramentas/",
    "startUrls": [
        {
            "url": "https://www.leroymerlin.pt/produtos/ferramentas/"
        }
    ],
    "maxResults": 3,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "PT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/leroymerlin-pt-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 = {
    "categoryUrl": "https://www.leroymerlin.pt/produtos/ferramentas/",
    "startUrls": [{ "url": "https://www.leroymerlin.pt/produtos/ferramentas/" }],
    "maxResults": 3,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "PT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/leroymerlin-pt-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 '{
  "categoryUrl": "https://www.leroymerlin.pt/produtos/ferramentas/",
  "startUrls": [
    {
      "url": "https://www.leroymerlin.pt/produtos/ferramentas/"
    }
  ],
  "maxResults": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "PT"
  }
}' |
apify call studio-amba/leroymerlin-pt-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Leroy Merlin Portugal Scraper — DIY & Home Improvement",
        "description": "Scrape products, prices, specifications, ratings, and availability from leroymerlin.pt, Portugal's Leroy Merlin DIY and home improvement store. Supports search queries and category browsing.",
        "version": "0.1",
        "x-build-id": "rymeJLjcc0nLeDu1k"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~leroymerlin-pt-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-leroymerlin-pt-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/studio-amba~leroymerlin-pt-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-leroymerlin-pt-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/studio-amba~leroymerlin-pt-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-leroymerlin-pt-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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search for products by name or keyword (e.g., 'berbequim', 'tinta', 'azulejos'). Note: category URLs work more reliably than search."
                    },
                    "categoryUrl": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "A Leroy Merlin Portugal category page URL (recommended). Example: https://www.leroymerlin.pt/produtos/ferramentas/"
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "List of Leroy Merlin Portugal URLs to scrape (category pages or individual product pages).",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of products to return.",
                        "default": 100
                    },
                    "brightDataApiKey": {
                        "title": "Bright Data API Key",
                        "type": "string",
                        "description": "Your Bright Data API key for the Web Unlocker zone. Required to bypass Leroy Merlin Portugal's anti-bot protection (DataDome + geo-IP). Get one at https://brightdata.com"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select proxies to be used by this actor."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
