# Mobile.de Scraper — Vehicle Inventory Monitor (`khadinakbar/mobile-de-scraper`) Actor

Scrape public Mobile.de vehicle listings from search or listing URLs. Get prices, mileage, specs, sellers, images, and monitored inventory price changes.

- **URL**: https://apify.com/khadinakbar/mobile-de-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.80 / 1,000 vehicle listing returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Mobile.de Scraper — Vehicle Inventory Monitor

Extract Mobile.de vehicle listings from filtered public URLs or an authorized Mobile.de Search API account, then monitor the same search for new listings and price changes. It is designed for automotive dealers, exporters, fleet buyers, and market-research teams that need a clean, structured record rather than a browser tab full of ads.

### What it returns

Each dataset item is one public vehicle listing. Core fields stay stable across concise and detailed runs so a spreadsheet, warehouse, or AI agent can process every item consistently.

| Field group | Included fields |
| --- | --- |
| Vehicle | `listingId`, `listingUrl`, `title`, `make`, `model`, `firstRegistration`, `mileageKm`, `fuelType`, `transmission`, `powerKw`, `bodyType` |
| Price | `priceEur`, `currency`, `changeType`, `previousPriceEur` |
| Seller and place | `location`, `postalCode`, `sellerName`, `sellerType`, plus a public phone only when detailed output exposes one |
| Media and details | `imageUrls`; detailed output can also include `description` and `equipment` |
| Traceability | `sourceSearchUrl`, `scrapedAt`, and non-fatal `parseWarnings` |

`changeType` is `unknown` unless a monitoring key is supplied. With a monitoring key, an item is marked `new`, `price_changed`, or `unchanged` against the last successful run using that same key.

### When to use it

Use this actor when you have a Mobile.de search link that already expresses the make, model, region, price, year, mileage, seller type, or fuel filters you need. It is suited to inventory exports, regional price benchmarking, competitor dealer monitoring, and short scheduled reports.

Do not use it for private Mobile.de account data, login-only actions, finance approval, vehicle-history reports, VIN decoding, or removed-listing detection. The actor only returns public page data. For a broader lead-generation workflow, pair the resulting dealer names with a separate public-business contact enrichment actor.

### Input

`dataSource` defaults to `browser`, which uses a public Mobile.de search or listing URL. The actor does not silently switch modes when a public page is blocked.

Use `officialApi` only when the actor owner has a Mobile.de Search API account that is authorized for this use case and downstream data handling. It accepts only `https://services.mobile.de/search-api/search?...` and `https://services.mobile.de/search-api/ad/{ad-id}` URLs. Configure `MOBILE_DE_API_USERNAME` and `MOBILE_DE_API_PASSWORD` as owner-controlled environment secrets; never place credentials in actor input. The API response is requested as Mobile.de's documented JSON format, and direct-ad API calls enrich search results when `includeDetails` is enabled.

`startUrls` is required. In browser mode, paste a Mobile.de vehicle search or a direct public listing URL. Build the desired filters on Mobile.de first, copy the resulting URL, and keep the URL in the input. This deliberately avoids recreating Mobile.de's large and frequently changing filter vocabulary inside the actor.

`maxResults` caps the number of dataset rows and listing events. It defaults to 25 and is limited to 500. A cap is applied before every billable listing write.

`includeDetails` defaults to `true`. It opens each result's public detail page for richer description, equipment, images, and seller fields. Set it to `false` for a faster core listing export.

`responseFormat` defaults to `concise`, which limits media to the primary image and omits long descriptions and equipment. Choose `detailed` when those public fields are useful downstream. Core vehicle, price, seller, and monitoring fields remain available in both formats.

For scheduled monitoring, set a stable `monitoringKey` such as `berlin-bmw-inventory`. Reuse the same key and search URL on later runs. Set `changesOnly` to `true` only after an initial baseline run to return new or price-changed listings rather than the full current result set.

### Example input

```json
{
  "startUrls": [
    {
      "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
    }
  ],
  "maxResults": 25,
  "includeDetails": true,
  "responseFormat": "concise",
  "monitoringKey": "berlin-bmw-inventory",
  "changesOnly": false,
  "proxyCountry": "DE"
}
````

### Official API input

This mode is available only after the actor owner configures authorized credentials and confirms the Mobile.de agreement permits the intended data use. It does not use residential proxies.

```json
{
  "dataSource": "officialApi",
  "startUrls": [
    {
      "url": "https://services.mobile.de/search-api/search?classification=refdata/classes/Car&country=DE"
    }
  ],
  "maxResults": 25,
  "includeDetails": true,
  "responseFormat": "concise"
}
```

### Example output

```json
{
  "listingId": "1001",
  "listingUrl": "https://suchen.mobile.de/fahrzeuge/details.html?id=1001",
  "title": "BMW 320d Touring",
  "make": "BMW",
  "model": "320d Touring",
  "priceEur": 23490,
  "currency": "EUR",
  "firstRegistration": "03/2021",
  "mileageKm": 71200,
  "fuelType": "Diesel",
  "transmission": "Automatic",
  "powerKw": 140,
  "location": "10115 Berlin",
  "sellerName": "Example Autohaus GmbH",
  "imageUrls": ["https://images.example.test/car.jpg"],
  "changeType": "price_changed",
  "previousPriceEur": 24990,
  "sourceSearchUrl": "https://suchen.mobile.de/auto/gebrauchtwagen.html",
  "scrapedAt": "2026-07-14T12:00:00.000Z",
  "parseWarnings": []
}
```

### API examples

JavaScript:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/mobile-de-scraper').call({
  startUrls: [{ url: 'https://suchen.mobile.de/auto/gebrauchtwagen.html' }],
  maxResults: 25,
  monitoringKey: 'berlin-bmw-inventory',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python:

```python
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("khadinakbar/mobile-de-scraper").call(run_input={
    "startUrls": [{"url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"}],
    "maxResults": 25,
    "includeDetails": True,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

### Pricing

This actor uses Pay per event + usage. Event charges are shown before work begins; Apify compute and browser-mode residential proxy usage are additional. Official API provider charges, if any, require an authorized owner agreement and are not exposed in actor input.

| Event | Price | When charged |
| --- | ---: | --- |
| Actor start | $0.00005 | Once per GB of configured actor memory (default 4 GB: $0.00020) |
| Vehicle listing returned | $0.0018 | For each validated row written to the dataset |
| Vehicle details enriched | $0.0009 | Only after a requested detail page was fetched successfully |

A 25-result concise run has at most $0.04505 in event charges. A 25-result detailed run has at most $0.06755 in event charges, plus Apify platform usage. Valid empty searches and invalid inputs do not create listing events.

### Reliability and limits

Mobile.de uses anti-bot controls. Browser mode uses Camoufox with a consistent German residential browser session, low page pacing, and fresh sessions after a detected challenge. It checks the public Mobile.de homepage before collecting listings; if that canary is challenged, the run reports `UPSTREAM_FAILED` rather than silently returning an empty dataset. Official API mode is credential-gated, does not use the browser route, and returns `CONFIG_ERROR` rather than falling back if credentials are absent.

Every run writes `OUTPUT` and `RUN_SUMMARY` in the default key-value store. `OUTPUT` gives the stable outcome (`COMPLETE`, `PARTIAL`, `VALID_EMPTY`, `INVALID_INPUT`, `UPSTREAM_FAILED`, or `CONFIG_ERROR`); `RUN_SUMMARY` adds page, retry, warning, and event-count diagnostics. Useful results are retained as `PARTIAL` if one source or detail page fails. Dataset rows are Zod-validated before being persisted and billed.

The target's page markup and anti-bot behavior can change. If a URL returns a challenge, retry later with a smaller URL list. If a listing is present but a field is not public, its field is `null` rather than inferred.

### Legal and responsible use

Use this actor only for lawful collection and processing of public data. You are responsible for checking Mobile.de terms, applicable data-protection requirements, and any restrictions that apply to your country, use case, or downstream sharing. Do not use public seller data for unlawful profiling, spam, or contact outside a lawful basis.

### FAQ

**Why use a URL instead of separate make and model fields?** Mobile.de has many interdependent regional and vehicle filters. A copied search URL preserves exactly the filter set you verified in the Mobile.de interface.

**Why did I get no records?** A valid search may genuinely have no matches, in which case the run ends as `VALID_EMPTY`. If the actor was challenged before a usable page was loaded, it ends as `UPSTREAM_FAILED` with a retry recommendation in `RUN_SUMMARY`.

**Can I use the official API mode without an account?** No. It requires an authorized Mobile.de Search API account configured by the actor owner, and the applicable agreement must permit the intended collection and downstream sharing.

**Can I monitor removed listings?** Not currently. `changesOnly` identifies new and price-changed listings visible in consecutive runs, but search result pagination and regional availability make disappearance unreliable as a removal signal.

**Can an AI agent use this actor?** Yes. Its concise default output, predictable cap, and declared dataset fields are designed for hosted Apify MCP and API consumers. Use a search or listing URL, not an unbounded free-text prompt.

# Actor input Schema

## `dataSource` (type: `string`):

Use this to choose the authorized retrieval path. Choose browser for a public Mobile.de results or listing URL, or officialApi only when the actor owner has configured authorized Mobile.de Search API credentials. It defaults to browser and never falls back between modes. This is not a way to supply credentials in the input.

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

Use this when you already have a Mobile.de URL for the selected data source. In browser mode pass a public results or listing URL such as {"url":"https://suchen.mobile.de/auto/gebrauchtwagen.html"}; in officialApi mode pass only a documented services.mobile.de Search API search or ad URL. At least one valid URL is required and the advanced-search form is not a result page. This is not a free-text vehicle query and it does not accept URLs from other marketplaces.

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

Use this to set the maximum number of vehicle records written to the dataset. Enter an integer such as 25. It defaults to 25 and accepts 1 through 500. This is not a page count; the actor stops before charging more listing events than this limit.

## `includeDetails` (type: `boolean`):

Use this when you need listing descriptions, equipment, extra images, and seller fields in addition to search-card data. Set true or false, for example true. It defaults to true and detail enrichment is billed only after a detail page is fetched successfully. This is not required for a fast price-and-mileage-only search export.

## `responseFormat` (type: `string`):

Use this to choose the amount of optional text and media included in each vehicle record. Choose concise or detailed, for example concise. It defaults to concise so AI agents receive compact records, while detailed adds description, equipment, more images, and public phone data when available. This does not change the core price, mileage, registration, and seller fields.

## `monitoringKey` (type: `string`):

Use this when repeated runs should compare a specific Mobile.de search over time. Enter a stable label such as berlin-bmw-inventory. It is optional and creates state only for the same key, with lowercase letters, numbers, and hyphens retained. This is not a Mobile.de seller ID or a dataset ID.

## `changesOnly` (type: `boolean`):

Use this when a scheduled inventory-monitoring run should omit listings whose price did not change. Set true only with a monitoring key, for example true. It defaults to false so an initial run returns all matching vehicles. This does not detect removed ads because Mobile.de result coverage can vary by search and region.

## `proxyCountry` (type: `string`):

Use this to select the country for the actor-managed residential browser session. Choose a supported ISO code such as DE. It defaults to DE; AT, BE, CH, FR, and NL are also supported for regional results. This setting is ignored in officialApi mode and is not a vehicle location filter, which belongs in the selected source URL itself.

## Actor input object example

```json
{
  "dataSource": "browser",
  "startUrls": [
    {
      "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
    }
  ],
  "maxResults": 25,
  "includeDetails": true,
  "responseFormat": "concise",
  "monitoringKey": "berlin-bmw-inventory",
  "changesOnly": false,
  "proxyCountry": "DE"
}
```

# Actor output Schema

## `vehicleListings` (type: `string`):

Normalized public Mobile.de vehicle listings returned by this run.

## `output` (type: `string`):

Compact outcome, counts, warnings, and charged event totals.

## `runSummary` (type: `string`):

Detailed diagnostics, source coverage, and billing information for 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 = {
    "dataSource": "browser",
    "startUrls": [
        {
            "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
        }
    ],
    "maxResults": 25,
    "includeDetails": true,
    "responseFormat": "concise",
    "changesOnly": false,
    "proxyCountry": "DE"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/mobile-de-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 = {
    "dataSource": "browser",
    "startUrls": [{ "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html" }],
    "maxResults": 25,
    "includeDetails": True,
    "responseFormat": "concise",
    "changesOnly": False,
    "proxyCountry": "DE",
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/mobile-de-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 '{
  "dataSource": "browser",
  "startUrls": [
    {
      "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
    }
  ],
  "maxResults": 25,
  "includeDetails": true,
  "responseFormat": "concise",
  "changesOnly": false,
  "proxyCountry": "DE"
}' |
apify call khadinakbar/mobile-de-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Mobile.de Scraper — Vehicle Inventory Monitor",
        "description": "Scrape public Mobile.de vehicle listings from search or listing URLs. Get prices, mileage, specs, sellers, images, and monitored inventory price changes.",
        "version": "1.0",
        "x-build-id": "0v2NPkLanjmHOLJW3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~mobile-de-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-mobile-de-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/khadinakbar~mobile-de-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-mobile-de-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/khadinakbar~mobile-de-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-mobile-de-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": [
                    "startUrls"
                ],
                "properties": {
                    "dataSource": {
                        "title": "Data source",
                        "enum": [
                            "browser",
                            "officialApi"
                        ],
                        "type": "string",
                        "description": "Use this to choose the authorized retrieval path. Choose browser for a public Mobile.de results or listing URL, or officialApi only when the actor owner has configured authorized Mobile.de Search API credentials. It defaults to browser and never falls back between modes. This is not a way to supply credentials in the input.",
                        "default": "browser"
                    },
                    "startUrls": {
                        "title": "Mobile.de results or listing URLs",
                        "type": "array",
                        "description": "Use this when you already have a Mobile.de URL for the selected data source. In browser mode pass a public results or listing URL such as {\"url\":\"https://suchen.mobile.de/auto/gebrauchtwagen.html\"}; in officialApi mode pass only a documented services.mobile.de Search API search or ad URL. At least one valid URL is required and the advanced-search form is not a result page. This is not a free-text vehicle query and it does not accept URLs from other marketplaces.",
                        "default": [
                            {
                                "url": "https://suchen.mobile.de/auto/gebrauchtwagen.html"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxResults": {
                        "title": "Maximum vehicle listings",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Use this to set the maximum number of vehicle records written to the dataset. Enter an integer such as 25. It defaults to 25 and accepts 1 through 500. This is not a page count; the actor stops before charging more listing events than this limit.",
                        "default": 25
                    },
                    "includeDetails": {
                        "title": "Include vehicle detail pages",
                        "type": "boolean",
                        "description": "Use this when you need listing descriptions, equipment, extra images, and seller fields in addition to search-card data. Set true or false, for example true. It defaults to true and detail enrichment is billed only after a detail page is fetched successfully. This is not required for a fast price-and-mileage-only search export.",
                        "default": true
                    },
                    "responseFormat": {
                        "title": "Response format",
                        "enum": [
                            "concise",
                            "detailed"
                        ],
                        "type": "string",
                        "description": "Use this to choose the amount of optional text and media included in each vehicle record. Choose concise or detailed, for example concise. It defaults to concise so AI agents receive compact records, while detailed adds description, equipment, more images, and public phone data when available. This does not change the core price, mileage, registration, and seller fields.",
                        "default": "concise"
                    },
                    "monitoringKey": {
                        "title": "Inventory monitoring key",
                        "type": "string",
                        "description": "Use this when repeated runs should compare a specific Mobile.de search over time. Enter a stable label such as berlin-bmw-inventory. It is optional and creates state only for the same key, with lowercase letters, numbers, and hyphens retained. This is not a Mobile.de seller ID or a dataset ID."
                    },
                    "changesOnly": {
                        "title": "Return only new or price-changed listings",
                        "type": "boolean",
                        "description": "Use this when a scheduled inventory-monitoring run should omit listings whose price did not change. Set true only with a monitoring key, for example true. It defaults to false so an initial run returns all matching vehicles. This does not detect removed ads because Mobile.de result coverage can vary by search and region.",
                        "default": false
                    },
                    "proxyCountry": {
                        "title": "Residential proxy country",
                        "enum": [
                            "DE",
                            "AT",
                            "BE",
                            "CH",
                            "FR",
                            "NL"
                        ],
                        "type": "string",
                        "description": "Use this to select the country for the actor-managed residential browser session. Choose a supported ISO code such as DE. It defaults to DE; AT, BE, CH, FR, and NL are also supported for regional results. This setting is ignored in officialApi mode and is not a vehicle location filter, which belongs in the selected source URL itself.",
                        "default": "DE"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
