# Europages Scraper - European B2B Suppliers & Products (`haketa/europages-scraper`) Actor

Search Europages.com and extract products with prices, MOQ, supplier company, verification and selling points across 35+ European countries for B2B sourcing.

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

## Pricing

from $2.50 / 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.
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

## Europages Scraper – European B2B Suppliers & Products

**Extract supplier and product data from [Europages.com](https://www.europages.com/), Europe's leading B2B marketplace, in minutes.** This Europages scraper turns any keyword into a clean, structured database of European suppliers and products — complete with **product names, price ranges, minimum order quantities (MOQ), company names, verification status, key selling points and company profile links.**

Export everything as **JSON, CSV, Excel, or via API** — perfect for **B2B sourcing, lead generation, price research and CRM enrichment** across 35+ European countries. No coding required.

> 💡 Built for importers, sourcing agents, sales teams and market researchers who need reliable European supplier data at scale.

---

### 🔎 Why scrape Europages?

Europages is Europe's largest B2B marketplace, with over 2 million company listings across 35+ countries and 26 languages. It's the go-to source for finding European manufacturers, wholesalers and distributors — across machinery, components, food, chemicals, packaging, textiles and thousands of other categories.

But Europages has no public bulk export. This scraper automates the whole process: you give it keywords, it returns hundreds of clean supplier-and-product records ready to filter, sort and import anywhere.

**Common reasons people scrape Europages:**

- Build **B2B supplier and prospect lists** across Europe
- Source **European manufacturers and distributors** for procurement
- Compare **price ranges and MOQ** across suppliers
- Enrich a **CRM** with company names, links and product data
- Run **market and competitor research** on the European B2B landscape

---

### ✨ What this Europages scraper does

- ✅ Searches Europages by **any keyword** (e.g. `led lighting`, `cardboard machines`, `olive oil`)
- ✅ Returns **hundreds of products per keyword** with automatic pagination (de-duplicated)
- ✅ Captures **product details** — name, description, price range, MOQ, image, key selling points
- ✅ Captures **supplier details** — company name, company profile URL, verification status
- ✅ **Verified filter** — keep only Europages-verified suppliers
- ✅ Exports to **JSON, CSV, Excel, XML** and integrates with Google Sheets, Make, Zapier, Slack and your apps

---

### 🎯 Use cases

#### 1. European supplier sourcing
Find manufacturers and distributors across Europe for any product. Each record includes the company name, profile link, verification status and key selling points — ideal for building a sourcing shortlist.

#### 2. B2B lead generation
Build targeted prospect lists of European suppliers by product category. Filter to verified suppliers for higher-quality leads, then enrich via the company profile URL.

#### 3. Price & MOQ research
Where suppliers publish them, capture price ranges and minimum order quantities to benchmark and plan procurement.

#### 4. CRM & database enrichment
Append European company names, product offerings, selling points and profile links to your CRM or internal database.

#### 5. Market & competitor research
Map who offers what across Europe, in which categories, with what differentiators (selling points) — for market-entry and competitive analysis.

#### 6. Procurement shortlisting
Procurement teams use the verified flag and selling points to quickly qualify and shortlist European suppliers before reaching out.

---

### 🌍 Pan-European coverage

Europages spans **35+ countries** and 26 languages, so a single keyword surfaces suppliers from Germany, France, Italy, Spain, Poland, Turkey, the Netherlands and beyond. Prices are shown in their local currency (often €). The scraper captures whatever the listing exposes, normalized into clean fields.

---

### 🏭 Popular categories you can scrape

Europages covers nearly every B2B sector — just type any product into `queries`:

- **Lighting & electrical** — LED lighting, components, cabling
- **Machinery & equipment** — packaging machines, CNC, industrial equipment
- **Food & beverage** — olive oil, wine, ingredients, processing
- **Chemicals & plastics** — resins, additives, raw materials
- **Construction & metal** — fittings, profiles, hardware
- **Textiles, packaging, automotive, agriculture** and thousands more

---

### ⚙️ How it works

1. **Enter one or more keywords** — exactly as typed into Europages search.
2. **Set how many results you want** per keyword and apply the optional verified filter.
3. **Run the Actor** — it collects, de-duplicates and structures the data for download or API.

No login, no captcha solving.

---

### 🔧 Input parameters

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `queries` | array | ✅ Yes | Search keywords (e.g. `led lighting`, `cardboard machines`). |
| `maxItemsPerQuery` | integer | No | Max products per keyword. ~30/page, paginated. Default `60`. |
| `onlyVerified` | boolean | No | Keep only verified suppliers. |
| `proxyConfiguration` | object | No | Apify Proxy settings. Datacenter works fine. |

#### Example input — supplier list

```json
{
    "queries": ["led lighting"],
    "maxItemsPerQuery": 200
}
````

#### Example input — verified suppliers, multiple keywords

```json
{
    "queries": ["industrial valves", "cardboard machines"],
    "maxItemsPerQuery": 150,
    "onlyVerified": true
}
```

***

### 📤 Output

One row per product with supplier context. Download as **JSON, CSV, Excel, XML** or via API.

#### Sample output record

```json
{
    "productName": "Bollard Lighting MSL-0001 — Modern Outdoor LED Pathway Light",
    "productUrl": "https://www.europages.co.uk/en/company/redpool-24-...-22325378/products/...",
    "productImage": "https://...",
    "productDescription": "Durable aluminium body with powder-coated finish, IP65 rated...",
    "price": "10,00 - 199,00 €",
    "priceMin": 10,
    "priceMax": 199,
    "currency": "EUR",
    "minOrderQuantity": "Minimum order: 10 units",
    "minOrderQuantityValue": 10,
    "companyName": "Redpool 24 Dış Ticaret A.Ş.",
    "companyUrl": "https://www.europages.co.uk/en/company/redpool-24-...-22325378",
    "isVerified": true,
    "sellPoints": [
        "Durable aluminium body with powder-coated finish",
        "IP65 rated for dust and water resistance",
        "Energy-efficient LED minimizes maintenance"
    ],
    "searchKeyword": "led lighting",
    "scrapedAt": "2026-05-25T20:00:00.000Z"
}
```

#### Output fields reference

| Field | Description |
| --- | --- |
| `productName` | Product title |
| `productUrl` | Link to the product/company page |
| `productImage` | Product image URL |
| `productDescription` | Product description |
| `price` | Price range text (e.g. `10,00 - 199,00 €`) |
| `priceMin` / `priceMax` | Numeric price range |
| `currency` | Currency (EUR, GBP…) |
| `minOrderQuantity` | MOQ text |
| `minOrderQuantityValue` | Numeric MOQ |
| `companyName` | Supplier company name |
| `companyUrl` | Supplier company profile URL |
| `isVerified` | Europages verified supplier flag |
| `sellPoints` | Key product selling points |
| `searchKeyword` | Source keyword |
| `scrapedAt` | Extraction timestamp |

***

### ⭐ What makes this scraper stand out

- **Pan-European reach** — one keyword surfaces suppliers across 35+ countries.
- **Selling points captured** — each product's key differentiators, great for quick qualification.
- **Verified filter** — focus on credible suppliers only.
- **De-duplicated, structured output** ready for spreadsheets, BI tools or your CRM.

***

### ✅ Proven results

A real run for `led lighting` returned 30 products/page with **company name, company URL and selling points filled on 100% of records**, verified status on ~75%, and price/MOQ where suppliers publish them. Verified live.

***

### 🔌 Integrations

Send Europages data anywhere via Apify integrations and webhooks: **Google Sheets, Make, Zapier, Slack, CRMs/databases, or your own app** through the API.

***

### ▶️ How to use (step by step)

1. Click **Try for free** at the top of this page.
2. Add your keywords under `queries` in the Input tab.
3. Set `maxItemsPerQuery` and toggle `onlyVerified` if needed.
4. Click **Start** and wait for the run to finish.
5. Download from the **Output / Dataset** tab as JSON, CSV or Excel, or pull via API.

Schedule the Actor to keep your supplier data fresh.

***

### ❓ FAQ

**Why is price empty on some products?**
Many European suppliers list "price on request" rather than a public price. The scraper captures price and MOQ wherever they're published; other fields are always captured.

**How many products can I get?**
Popular keywords span many pages; set `maxItemsPerQuery` to your target and pagination is automatic.

**Can I filter to verified suppliers?**
Yes — set `onlyVerified` to true.

**Does it cover all of Europe?**
Yes — Europages spans 35+ countries; a keyword surfaces suppliers across the continent.

**What export formats are supported?**
JSON, CSV, Excel (XLSX), XML, RSS, plus API.

**Will I get duplicate products?**
No — results are de-duplicated.

**Does it need a login?**
No. It reads public search results — no account, no captcha.

**Is scraping Europages legal?**
This Actor collects publicly available data. You are responsible for using it in compliance with Europages' terms and applicable laws (including GDPR/data-protection rules where relevant).

**Can I run it on a schedule?**
Yes, via Apify Schedules.

***

### 💡 Tips & best practices

- **Use specific keywords** for relevant results; combine several for coverage.
- **Enable `onlyVerified`** for sourcing-grade supplier lists.
- **Set a realistic `maxItemsPerQuery`** — 100–300 per keyword suits most projects.
- **Use the company URL** to enrich each supplier with further profile data.
- **Export to a spreadsheet** and sort by `priceMin` or filter by `isVerified`.
- **Schedule recurring runs** to catch new suppliers and offers.
- **Start broad, then narrow.** Run a wide keyword first to gauge volume, then add `onlyVerified` or more specific terms to refine.
- **Use selling points** to pre-qualify — they often reveal certifications, materials and capabilities at a glance.
- **Merge with other sources.** Combine Europages results with other supplier datasets (de-duplicated by company) for a complete picture.
- **Map by country** in your spreadsheet to spot the strongest sourcing regions for your product.

### 🔌 Works with your stack

Because output is clean JSON/CSV/Excel with stable field names, it drops directly into Google Sheets, Airtable, HubSpot, Salesforce, BI tools (Looker, Power BI) or a database — via Apify's native integrations, webhooks or API. No transformation step needed: scrape, sync, act.

***

### ⚠️ Limitations

- Price and MOQ appear only where the supplier publishes them.
- Contact details (email/phone) live on the company profile page, not the product listing.
- Result volume per keyword depends on how many products Europages lists.

***

### 🛠️ Example workflows

**Sourcing shortlist.** Run your product keyword with `onlyVerified`, export to a spreadsheet, and shortlist European suppliers by selling points and verification before reaching out via their company profile.

**Lead list across Europe.** Scrape several related keywords, capture company names and profile URLs, and push to Google Sheets or your CRM via Apify integrations — instant pan-European prospect list.

**Price & MOQ benchmark.** Where suppliers publish them, capture `priceMin`/`priceMax` and `minOrderQuantityValue`, export to CSV, and benchmark offers across the continent.

**Competitor map.** Pull a whole category and chart suppliers by verification and selling points to understand who's competing in your space across Europe.

**Profile enrichment pipeline.** Use the `companyUrl` from each record as the seed for deeper company-profile enrichment (contacts, certifications) in a follow-up step.

These run with zero code via Apify Schedules, integrations and webhooks.

### 🌐 About Europages

Europages is Europe's leading B2B marketplace, operated by Visable, connecting buyers with over 2 million suppliers across 35+ countries and 26 languages. It's a primary discovery channel for European manufacturers, wholesalers and distributors. For sourcing and lead generation it's uniquely valuable because it aggregates the fragmented European supplier landscape into one searchable directory. This scraper turns that directory into a clean, structured dataset you can actually work with — filter by verification, sort by price, and pipe straight into your sourcing or sales workflow.

### 📊 Data quality & coverage

- **De-duplicated** across keywords and pages — no duplicate rows.
- **Selling points captured** — each product's key differentiators, ideal for quick supplier qualification.
- **Numeric price & MOQ** parsed alongside the display text, so you can sort and filter without cleanup.
- **Verified flag** lets you focus on credible suppliers instantly.
- **Server-rendered source** — fast, stable extraction without a headless browser.

Every field is documented above and exports cleanly to JSON, CSV and Excel for spreadsheets, BI tools or your CRM.

### 📈 Scale & limits

- Popular keywords span many pages; pagination is automatic.
- Set `maxItemsPerQuery` to control volume and cost — you only pay per result.
- Combine multiple keywords for breadth, or use `onlyVerified` for precision.
- Price and MOQ depend on what each supplier chooses to publish.

### ⚖️ Responsible use

Europages data is publicly available, but you are responsible for using it in line with anti-spam and data-protection laws (e.g. GDPR). Use it for legitimate B2B sourcing, research and outreach — not unsolicited bulk spam.

### ❓ More FAQ

**Can I target a specific country?**
Use country-specific keywords or filter the output by company; Europages aggregates all countries by default.

**Does it return contact email/phone?**
Those live on each supplier's company profile page (`companyUrl`), not the product listing — use the URL for a follow-up enrichment step.

**Can I scrape multiple products at once?**
Yes — add several keywords to `queries`; de-duplication keeps the combined list clean.

**How fresh is the data?**
Every run scrapes Europages live; schedule recurring runs to stay current.

### 🗺️ Countries you can reach

A single keyword on Europages surfaces suppliers from across Europe and beyond. Common origins include:

- **Western Europe** — Germany, France, Netherlands, Belgium, Austria, Switzerland
- **Southern Europe** — Italy, Spain, Portugal, Greece
- **Northern Europe** — UK, Ireland, Sweden, Denmark, Finland, Norway
- **Central & Eastern Europe** — Poland, Czechia, Hungary, Romania, Bulgaria
- **Plus** — Turkey and other trading partners listing on Europages

This breadth makes Europages ideal for buyers who want to compare suppliers across multiple European markets in one search, rather than checking each country's directory separately.

### 🔄 How it compares

- **vs single-country directories** — one search spans 35+ countries instead of one.
- **vs generic search engines** — structured fields (price, MOQ, verification, selling points) instead of unstructured pages.
- **vs manual research** — hundreds of qualified, de-duplicated supplier records in minutes, exportable to your stack.

Pair it with company-profile enrichment (via the `companyUrl`) for a complete sourcing pipeline.

### 📦 Output formats & access

Every run's data is available in multiple ways, so it fits any workflow:

- **JSON** — for developers and API pipelines
- **CSV / Excel** — for analysts and spreadsheets
- **XML / RSS** — for feeds and legacy systems
- **Apify API** — pull results programmatically with a single endpoint
- **Integrations** — Google Sheets, Make, Zapier, Slack, and more

Field names are stable across runs, so your downstream sheets, dashboards and CRM mappings keep working as you scale up keywords and volume.

### 🚀 Get started

Click **Try for free**, enter a keyword like `led lighting`, and get a clean list of European suppliers — with products, prices, MOQ and verification — in minutes. Perfect for **B2B sourcing, lead generation and market research** across Europe.

# Actor input Schema

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

Product or category search terms as typed into Europages (e.g. "led lighting", "cardboard machines", "olive oil").

## `maxItemsPerQuery` (type: `integer`):

Maximum products to collect per keyword. ~30 products per page, paginated automatically.

## `onlyVerified` (type: `boolean`):

Keep only products from suppliers with the Europages verified label.

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

Europages has no aggressive anti-bot; datacenter proxies work fine. A proxy is recommended for large runs.

## Actor input object example

```json
{
  "queries": [
    "led lighting",
    "industrial valves"
  ],
  "maxItemsPerQuery": 30,
  "onlyVerified": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (type: `string`):

Clean JSON array of every scraped product with supplier details.

## `productsCsv` (type: `string`):

Spreadsheet-ready CSV.

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

Default dataset of this run.

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "queries": [
        "led lighting"
    ],
    "maxItemsPerQuery": 30,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("haketa/europages-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": ["led lighting"],
    "maxItemsPerQuery": 30,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("haketa/europages-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": [
    "led lighting"
  ],
  "maxItemsPerQuery": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call haketa/europages-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Europages Scraper - European B2B Suppliers & Products",
        "description": "Search Europages.com and extract products with prices, MOQ, supplier company, verification and selling points across 35+ European countries for B2B sourcing.",
        "version": "1.0",
        "x-build-id": "X8U0bsfj4uqlt5vFP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/haketa~europages-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-haketa-europages-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/haketa~europages-scraper/runs": {
            "post": {
                "operationId": "runs-sync-haketa-europages-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/haketa~europages-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-haketa-europages-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 keywords",
                        "type": "array",
                        "description": "Product or category search terms as typed into Europages (e.g. \"led lighting\", \"cardboard machines\", \"olive oil\").",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItemsPerQuery": {
                        "title": "Max items per query",
                        "minimum": 1,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Maximum products to collect per keyword. ~30 products per page, paginated automatically.",
                        "default": 60
                    },
                    "onlyVerified": {
                        "title": "Only verified suppliers",
                        "type": "boolean",
                        "description": "Keep only products from suppliers with the Europages verified label.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Europages has no aggressive anti-bot; datacenter proxies work fine. A proxy is recommended for large runs.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
