# Gelbe Seiten Scraper - German Business Directory (`automation-lab/gelbeseiten-scraper`) Actor

Scrape business listings from Gelbe Seiten (gelbeseiten.de), Germany's largest Yellow Pages directory. Extract contact details, addresses, phone numbers, websites, ratings, and opening hours.

- **URL**: https://apify.com/automation-lab/gelbeseiten-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## Gelbe Seiten Scraper — German Business Directory

Extract business listings from [Gelbe Seiten](https://www.gelbeseiten.de), Germany's largest Yellow Pages directory with ~5 million business entries. Search by keyword and location to build targeted lead lists with contact details, addresses, phone numbers, websites, ratings, and opening hours.

### What Does This Actor Do?

This actor scrapes the Gelbe Seiten (Yellow Pages Germany) business directory. It accepts one or more search terms (e.g. `restaurant`, `zahnarzt`, `klempner`) combined with one or more German cities or regions (e.g. `Berlin`, `München`, `Hamburg`). For each combination it fetches up to 50 business listings from the search results page.

With the **Extract full details** option enabled, it additionally visits each business's detail page to retrieve structured address, phone, opening hours, geo-coordinates, and the business website URL from structured JSON-LD data.

### Who Is It For?

- **Sales & BD teams** prospecting German businesses by category and region
- **Marketing agencies** building local outreach lists for German markets
- **Recruiters** mapping companies in specific sectors across German cities
- **Market researchers** analysing business density, contact coverage, and review trends
- **Data providers** enriching CRM or sales intelligence databases with German business data

### Features

- 🔍 **Multi-term × multi-location** — combine any number of search queries with any number of locations
- 📞 **Contact data** — phone numbers, website URLs
- 🗺️ **Address data** — street, postal code, city; structured fields when detail pages are fetched
- ⭐ **Ratings & reviews** — star rating value and review count from search listings
- 🕐 **Opening hours** — available with detail page extraction
- 📍 **Geo-coordinates** — latitude/longitude from structured data
- 🏢 **Business type** — e.g. Dentist, Restaurant, Plumber from Schema.org types
- 💡 **HTTP+Cheerio** — fast, lightweight; no browser required
- 🔒 **Apify Proxy** — optional datacenter or residential proxies

### Use Cases

- **B2B lead generation** — build prospect lists of German businesses by category and region
- **Sales outreach** — extract phone and email data for German sales campaigns
- **Market research** — map business density, contact coverage, and ratings by area
- **Local SEO audits** — check competitor presence in a specific German city
- **Data enrichment** — add address and contact data to an existing business list
- **Recruitment** — find companies in a specific sector and region to target

### How to Use This Actor

1. **Open the actor** on Apify and click **Try for free**.
2. **Enter search terms** — e.g. `zahnarzt`, `restaurant`, `klempner` (German keywords work best).
3. **Enter locations** — German city names such as `Berlin`, `München`, `Hamburg`, or regions like `Bayern`.
4. **Set a result limit** — default is 50 per term+location combination (the maximum per page).
5. **Enable detail extraction** (optional) — toggle on to fetch structured address, coordinates, and opening hours from each business profile page.
6. **Configure proxy** (optional) — Apify datacenter proxies are sufficient; residential is rarely needed.
7. **Click Start** — the run completes in seconds for small searches, minutes for large-scale extractions.
8. **Download results** — export as JSON, CSV, Excel, or NDJSON from the dataset view.

### Integrations

#### CRM / Sales Pipeline
Push extracted business contacts directly into your CRM using [Apify's Zapier integration](https://zapier.com/apps/apify/integrations) or the HTTP webhook. Example workflow: `gelbeseiten-scraper` → Zapier → HubSpot / Salesforce contact creation.

#### Google Sheets Export
Use the [Apify → Google Sheets integration](https://apify.com/apify/google-sheets-import-export) to stream results into a spreadsheet for review, deduplication, or sharing with sales teams.

#### Automated Lead Enrichment
Combine with [automation-lab/imprint-contact-scraper](https://apify.com/automation-lab/imprint-contact-scraper): run this actor to gather business website URLs from Gelbe Seiten, then pass those URLs to the imprint scraper to enrich with legal contact emails from German impressum pages.

#### Scheduled Monitoring
Schedule weekly runs via Apify's cron scheduler to monitor new businesses entering a category or track rating changes in a target city — useful for competitive intelligence or franchise mapping.

### MCP (Claude + AI Assistant Usage)

Connect this actor to Claude or other AI assistants via the [Apify MCP server](https://mcp.apify.com) and extract Gelbe Seiten data using natural language.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/gelbeseiten-scraper"
````

#### Claude Desktop / Cursor / VS Code

Add to your MCP config file (`claude_desktop_config.json` or `.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/gelbeseiten-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

#### Example Prompts

- *"Find all dentists in München and export their phone numbers to a CSV."*
- *"Scrape the top 20 restaurants in Hamburg with ratings, addresses, and website URLs."*
- *"Get a list of plumbers in Berlin with full contact details including opening hours."*

### Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchTerms` | string\[] | ✅ | Keywords to search (e.g. `["restaurant", "zahnarzt"]`) |
| `locations` | string\[] | ✅ | German cities or regions (e.g. `["Berlin", "München"]`) |
| `maxResultsPerSearch` | integer | ❌ | Max listings per term+location pair (1–50, default 50) |
| `extractDetails` | boolean | ❌ | Fetch detail page for structured address, hours, coords (default false) |
| `maxRequestRetries` | integer | ❌ | Retry attempts for failed requests (default 3) |
| `proxyConfiguration` | object | ❌ | Apify proxy settings (datacenter is sufficient) |

#### Example Input

```json
{
    "searchTerms": ["zahnarzt", "restaurant"],
    "locations": ["Berlin", "Hamburg"],
    "maxResultsPerSearch": 50,
    "extractDetails": true,
    "proxyConfiguration": { "useApifyProxy": true }
}
```

This will search 4 combinations (2 terms × 2 cities) and fetch up to 50 businesses each = up to 200 listings.

### Output

Each item in the output dataset represents one business listing.

| Field | Type | Description |
|-------|------|-------------|
| `businessId` | string | Gelbe Seiten internal UUID |
| `name` | string | Business name |
| `category` | string | Primary business category |
| `snippet` | string | Short description from search result |
| `phone` | string | Phone number |
| `website` | string | Business website URL |
| `addressText` | string | Full address as a single string |
| `streetAddress` | string | Street and house number (detail only) |
| `postalCode` | string | Postal code (detail only) |
| `addressLocality` | string | City (detail only) |
| `addressCountry` | string | Country code (e.g. `DE`) (detail only) |
| `latitude` | number | Geographic latitude (detail only) |
| `longitude` | number | Geographic longitude (detail only) |
| `ratingValue` | number | Average star rating |
| `reviewCount` | number | Number of reviews |
| `openingHours` | string\[] | Opening hours (e.g. `["Mo-Fr 09:00-18:00"]`) (detail only) |
| `businessTypes` | string\[] | Schema.org business types (detail only) |
| `description` | string | Business description |
| `detailUrl` | string | URL to the Gelbe Seiten profile page |
| `searchTerm` | string | Search term that produced this result |
| `location` | string | Location that produced this result |

#### Example Output Item

```json
{
    "businessId": "8037cc6f-04c7-4956-8f5f-a91e20b2aeae",
    "name": "Altstadtcafé Cöpenick",
    "category": "Gaststätten und Restaurants",
    "snippet": "Gemütliches Café in der Berliner Altstadt Köpenick...",
    "phone": "030 65 47 40 69",
    "website": "http://www.altstadtcafe.de",
    "addressText": "Alt-Köpenick 16, 12555 Berlin",
    "streetAddress": "Alt-Köpenick 16",
    "postalCode": "12555",
    "addressLocality": "Berlin",
    "addressCountry": "DE",
    "latitude": 52.44627,
    "longitude": 13.57612,
    "ratingValue": 3.5,
    "reviewCount": 4,
    "openingHours": null,
    "businessTypes": ["FoodEstablishment", "Restaurant"],
    "description": "Im Altstadtcafé Cöpenick...",
    "detailUrl": "https://www.gelbeseiten.de/gsbiz/8037cc6f-04c7-4956-8f5f-a91e20b2aeae",
    "searchTerm": "restaurant",
    "location": "Berlin"
}
```

### Pricing

This actor uses **pay-per-result** (PPR) pricing:

| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|-------|------|--------|--------|------|----------|---------|
| Actor run started | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| Per business scraped | $0.003 | $0.0025 | $0.00195 | $0.0015 | $0.001 | $0.0007 |

The **start event is a flat one-time charge of $0.005** for all subscription tiers. Per-business prices decrease with higher Apify subscription tiers.

A typical run scraping 50 businesses costs **$0.005 + 50 × $0.003 = $0.155** at the FREE tier.

With `extractDetails: true`, detail page requests are included in the per-business charge — no additional cost per request.

### API Usage

Use this actor programmatically via the [Apify API](https://docs.apify.com/api/v2) or the [Apify client libraries](https://docs.apify.com/sdk/js/).

#### Node.js (Apify Client)

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

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

const run = await client.actor('automation-lab/gelbeseiten-scraper').call({
    searchTerms: ['zahnarzt'],
    locations: ['Berlin'],
    maxResultsPerSearch: 20,
    extractDetails: true,
});

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

#### Python (Apify Client)

```python
from apify_client import ApifyClient

client = ApifyClient(token="YOUR_APIFY_TOKEN")

run = client.actor("automation-lab/gelbeseiten-scraper").call(run_input={
    "searchTerms": ["zahnarzt"],
    "locations": ["Berlin"],
    "maxResultsPerSearch": 20,
    "extractDetails": True,
})

items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~gelbeseiten-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchTerms": ["zahnarzt"],
    "locations": ["Berlin"],
    "maxResultsPerSearch": 20,
    "extractDetails": true
  }'
```

### Performance & Limits

- **50 results maximum per search+location pair** — the Gelbe Seiten search page returns up to 50 results (server-rendered, no pagination via HTTP).
- **Speed**: ~50 listings in 5–15 seconds without detail pages; with detail pages, add ~2s per business.
- **Memory**: 256 MB is sufficient for all run sizes.
- **No login or JavaScript required** — uses lightweight HTTP+Cheerio.

### Related Actors

- **[automation-lab/yellowpages-scraper](https://apify.com/automation-lab/yellowpages-scraper)** — US Yellow Pages equivalent for American business data
- **[automation-lab/imprint-contact-scraper](https://apify.com/automation-lab/imprint-contact-scraper)** — Extract legal imprint contact data from German websites

### FAQ — Frequently Asked Questions

**How do I search for businesses in a specific district of a city?**
Include the district in the location field, e.g. `"Berlin Mitte"` or `"München Schwabing"`.

**Can I get more than 50 results for a single city?**
The Gelbe Seiten search page returns up to 50 results via HTTP. To get broader coverage, use more specific sub-area searches (e.g. city districts) or combine multiple location strings.

**Does this work for all German cities?**
Yes — Gelbe Seiten covers all German cities, regions, and postal codes.

**Is a proxy required?**
Datacenter proxies are usually sufficient. The site does not aggressively block scrapers under a normal browser User-Agent. For large-scale runs, enable Apify's datacenter proxies.

**What's the difference between detail mode on and off?**
Without details: extracts name, category, snippet, phone (when shown), address text, and rating from the search result card.
With details: additionally fetches the business profile page for structured address (street/postal/city/country), geo-coordinates, opening hours, business type, website URL, and full description.

**The scraper returned zero items — what should I check?**
First, verify the search term works on [gelbeseiten.de](https://www.gelbeseiten.de) directly — use German keywords (e.g. `zahnarzt` not `dentist`) and a valid German city name. If the site returns results but the actor does not, enable Apify datacenter proxies in the proxy configuration. Also check that your `searchTerms` and `locations` inputs are non-empty arrays of strings.

**Why am I getting fewer results than the limit I set?**
Gelbe Seiten returns up to 50 results per search term+location combination — this is a server-side limit, not an actor limitation. If you need broader coverage for a city, split the search into districts (e.g. `"Berlin Mitte"`, `"Berlin Prenzlauer Berg"`) or use multiple location strings. Increasing `maxResultsPerSearch` beyond 50 has no effect.

### Legality

This actor collects publicly available business directory data from Gelbe Seiten. Usage must comply with the [Gelbe Seiten Terms of Service](https://www.gelbeseiten.de/gsservice/nutzungsbedingungen) and applicable data protection regulations (GDPR). Do not use the extracted data for spam or unsolicited contact in violation of local laws. The operator assumes no liability for misuse.

# Actor input Schema

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

List of keywords to search for (e.g. 'restaurant', 'zahnarzt', 'klempner').

## `locations` (type: `array`):

List of German cities or regions to search in (e.g. 'Berlin', 'München', 'Hamburg').

## `maxResultsPerSearch` (type: `integer`):

Maximum number of businesses to extract per search term + location combination. Maximum 50 per search (site limit).

## `extractDetails` (type: `boolean`):

Fetch each business detail page to get structured address, phone, opening hours, coordinates, and longer description. Doubles request count but provides richer data.

## `maxRequestRetries` (type: `integer`):

Number of retry attempts for failed requests.

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

Apify proxy settings. Datacenter proxies are sufficient for most searches.

## Actor input object example

```json
{
  "searchTerms": [
    "restaurant"
  ],
  "locations": [
    "Berlin"
  ],
  "maxResultsPerSearch": 20,
  "extractDetails": false,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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": [
        "restaurant"
    ],
    "locations": [
        "Berlin"
    ],
    "maxResultsPerSearch": 20,
    "extractDetails": false,
    "maxRequestRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/gelbeseiten-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": ["restaurant"],
    "locations": ["Berlin"],
    "maxResultsPerSearch": 20,
    "extractDetails": False,
    "maxRequestRetries": 3,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/gelbeseiten-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": [
    "restaurant"
  ],
  "locations": [
    "Berlin"
  ],
  "maxResultsPerSearch": 20,
  "extractDetails": false,
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automation-lab/gelbeseiten-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Gelbe Seiten Scraper - German Business Directory",
        "description": "Scrape business listings from Gelbe Seiten (gelbeseiten.de), Germany's largest Yellow Pages directory. Extract contact details, addresses, phone numbers, websites, ratings, and opening hours.",
        "version": "0.1",
        "x-build-id": "4yGHDQsZ9PyFdmlaO"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~gelbeseiten-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-gelbeseiten-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/automation-lab~gelbeseiten-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-gelbeseiten-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/automation-lab~gelbeseiten-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-gelbeseiten-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": [
                    "searchTerms",
                    "locations"
                ],
                "properties": {
                    "searchTerms": {
                        "title": "Search terms",
                        "type": "array",
                        "description": "List of keywords to search for (e.g. 'restaurant', 'zahnarzt', 'klempner').",
                        "items": {
                            "type": "string"
                        }
                    },
                    "locations": {
                        "title": "Locations",
                        "type": "array",
                        "description": "List of German cities or regions to search in (e.g. 'Berlin', 'München', 'Hamburg').",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResultsPerSearch": {
                        "title": "Max results per search",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of businesses to extract per search term + location combination. Maximum 50 per search (site limit).",
                        "default": 50
                    },
                    "extractDetails": {
                        "title": "Extract full details",
                        "type": "boolean",
                        "description": "Fetch each business detail page to get structured address, phone, opening hours, coordinates, and longer description. Doubles request count but provides richer data.",
                        "default": false
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retry attempts for failed requests.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings. Datacenter proxies are sufficient for most searches."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
