# Marketplace Seller Watch — Third-Party Reseller Monitor (`studio-amba/marketplace-seller-watch`) Actor

Meta-scraper that tracks which third-party sellers offer a brand's products across European marketplaces (Kaufland.de, Kaufland.pl, Bol.com) and emits new\_seller and seller\_gone change events run over run — a deduped alert feed, not a full re-export.

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

## Pricing

from $20.00 / 1,000 seller-change alerts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

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

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

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

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

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

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

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

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

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


# README

## Marketplace Seller Watch

Track which third-party sellers offer a brand's products across European marketplaces, and get alerted the moment a new reseller appears or a known one disappears. One unified schema, deduplicated run over run, so every run returns only what changed.

### Why use this actor?

Brand owners, distributors and channel managers all fight the same problem: unauthorized or unexpected resellers show up on marketplaces, undercut the agreed price, or a grey-market seller appears overnight. Checking each marketplace by hand is slow, and re-exporting every listing every day just to spot the difference is wasteful. This actor does the diffing for you. Point it at a brand (e.g. `Philips`), run it on a schedule, and each run only returns the sellers that are new since the last run, plus the ones that dropped out.

It is a meta-actor: under the hood it fans out to our own marketplace scrapers, collects the seller behind every matching listing, and diffs that set against a persistent, named key-value store that remembers what it has already seen across separate scheduled runs (not just within one run).

### How to monitor marketplace sellers in Europe

1. Enter the brand or product line you want to watch in `brandQuery` (for example `Philips`, or a specific model like `Philips 5400 Series`).
2. Pick the marketplaces, or leave the field empty for the healthy defaults (Kaufland.de, Kaufland.pl, Bol.com).
3. Run it once. The first run has nothing to compare against, so it seeds its memory and reports every current seller as a `new_seller` event — that run is your baseline. In a live seed run against `Philips`, this returned 17 sellers (12 distinct third-party merchants on Kaufland.pl such as `NetworkTechnologies`, `Morelenet`, `SuperTechPL`; plus sellers on Bol.com).
4. Schedule it (see below). Every subsequent run returns only changes: a `new_seller` event when a reseller you hadn't seen starts offering the brand, and a `seller_gone` event when a previously-seen seller no longer appears in the tracked listings.
5. Wire the output into an integration (Zapier, Make, a webhook, Slack) so a new reseller lands in front of your channel team the same day it appears.

### What counts as a "seller"

Each marketplace listing carries the merchant selling it. On true marketplaces like Kaufland, that is an independent third-party merchant (`NewHits`, `Xenudo`, `Glowcart`, `evomag`, …), which is exactly the signal a brand wants. On Bol.com, the platform's own retail listings report the seller as `bol`, while genuine third-party "Verkoop door \<merchant\>" listings report the real merchant — so a shift on Bol.com from `bol` to a named reseller, or a new reseller appearing, is a meaningful event.

### Scheduling

This actor is built to run on a schedule, not as a one-off. In the Apify Console:

1. Open the actor, go to **Schedules → Create new schedule**.
2. Daily (e.g. `0 6 * * *`, 6am UTC) is a sensible cadence — marketplace assortments shift day to day, and a daily run keeps the delta small and readable. Weekly works if you only need coarse coverage.
3. Keep the same `brandQuery` on every scheduled run. The seen-set is namespaced per brand, so tracking `Philips` and `Sony` in two schedules keeps their histories separate.
4. Do **not** turn on `resetState` on a scheduled run — that flag wipes the seen-set for the brand and would make every run look like a first run, defeating the point.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `brandQuery` | String | No | Brand or product line to track. Empty defaults to `Philips`. |
| `marketplaces` | Array | No | Which marketplaces to watch: `kaufland-de`, `kaufland-pl`, `bol`, `allegro`. Empty = the healthy defaults (`kaufland-de`, `kaufland-pl`, `bol`). |
| `productName` | String | No | Narrow tracking to one product. Only listings similar enough to this name are counted (see `matchThreshold`). Empty = every listing the brand query returns. |
| `matchThreshold` | Number | No | Minimum name-similarity (0–1) when `productName` is set (default `0.35`). |
| `maxProductsPerMarketplace` | Integer | No | Listings to pull per marketplace per run (default `20`). More listings find more sellers but cost more. |
| `emitSellerGone` | Boolean | No | Emit `seller_gone` when a known seller drops out of the tracked listings (default `true`). |
| `timeoutPerSourceSecs` | Integer | No | Max wait per marketplace scraper before it's marked failed and skipped (default `240`). |
| `proxyConfiguration` | Object | No | Passed through to marketplaces that need one (Bol.com; Allegro when opted in). Kaufland drives Bright Data internally and ignores this. |
| `resetState` | Boolean | No | Testing only — wipes the brand's seen-set before the run. Never use on a real schedule. |

### Output

One row per change event, plus a single status row on a legitimate zero-delta run (sources healthy, nothing changed).

| Field | Type | Example |
|-------|------|---------|
| `eventType` | String | `"new_seller"` |
| `marketplace` | String | `"kaufland-pl"` |
| `sellerName` | String | `"NetworkTechnologies"` |
| `productName` | String | `"Philips 800 series EP0824/00"` |
| `ean` | String | `"8720389016479"` |
| `price` | Number | `1216.35` |
| `currency` | String | `"PLN"` |
| `country` | String | `"PL"` |
| `detectedAt` | String | `"2026-07-21T13:18:02.801Z"` |
| `sellerUrl` | String | `"https://www.kaufland.de/product/448814482/"` |
| `matchType` | String | `"ean"` |
| `matchScore` | Number | `null` |

#### Example rows

```json
{ "eventType": "new_seller", "marketplace": "kaufland-pl", "sellerName": "BRaUN_Elektro",
  "productName": "Philips 5000 series Airfryer HD9255/30", "ean": "8720389022166",
  "price": 389.64, "currency": "PLN", "country": "PL",
  "detectedAt": "2026-07-21T13:31:00.000Z", "matchType": "ean", "matchScore": null }
{ "eventType": "seller_gone", "marketplace": "kaufland-pl", "sellerName": "Agmi",
  "productName": "", "ean": "", "price": null, "currency": "PLN", "country": "PL",
  "detectedAt": "2026-07-21T13:31:00.000Z", "matchType": null, "matchScore": null }
````

### Marketplaces covered

| Marketplace | Country | Currency | Seller data | Notes |
|-------------|---------|----------|-------------|-------|
| Kaufland.de | DE | EUR | Yes — distinct third-party merchants + EAN | Best source: a true open marketplace. |
| Kaufland.pl | PL | EUR/PLN | Yes — distinct third-party merchants + EAN | Same engine, Polish market. |
| Bol.com | NL/BE | EUR | Yes — `bol` for first-party, named merchant for third-party + EAN | Needs a residential proxy (default). |
| Allegro.pl | PL | PLN | Opt-in only | Allegro exposes the seller only on product **detail** pages; the listing scraper returns no seller today, so this marketplace is not in the defaults. |

### How pricing works

Pay-per-event: a small charge when the actor starts, then a charge per change-event row (`new_seller` / `seller_gone`). A quiet run that finds no changes emits a single status row, so you are never billed for a full re-export you didn't need — you pay for signal, not noise.

### Limitations (read these)

1. **`seller_gone` is judged against the tracked window.** A run pulls up to `maxProductsPerMarketplace` listings. If a seller drops out of that top-N window (because live marketplace ranking shifted, not because they actually left), it is reported `seller_gone`. Raise `maxProductsPerMarketplace` for a wider, steadier window if you see churn. Read `seller_gone` as "no longer appears in the tracked listings," which is the honest claim.
2. **No seller-profile URL.** None of the underlying scrapers expose a seller's marketplace profile URL, so `sellerUrl` points to the product listing where the seller was found — that is where you verify the seller by hand.
3. **A failed marketplace is skipped, not faked.** If a marketplace scraper times out or errors (Kaufland runs Bright Data, which can be slow), that marketplace contributes nothing to that run rather than producing false `seller_gone` events. Only a run where *every* marketplace fails is treated as an error.
4. **First run is the baseline.** The very first run for a brand/marketplace reports every current seller as `new_seller`. That is intended — it seeds the memory. The value is in every run after it.
5. **eMAG (RO) and Otto (DE) are not included.** Their scrapers expose no per-listing seller field, so they cannot support a seller-watch product. Kaufland and Bol do.

### Related actors

- [Product Distribution Checker](https://apify.com/studio-amba/product-distribution-checker) — where a brand's SKUs are (and aren't) listed across EU price-comparison engines.
- [EU Fresh Company Radar](https://apify.com/studio-amba/eu-fresh-company-radar) — new company registrations across EU registries, deduped run over run.
- [Kaufland.de Scraper](https://apify.com/studio-amba/kaufland-de-scraper) — the underlying German marketplace scraper.
- [Bol.com Scraper](https://apify.com/studio-amba/bol-scraper) — the underlying Dutch/Belgian marketplace scraper.
- [Allegro Scraper](https://apify.com/studio-amba/allegro-scraper) — the underlying Polish marketplace scraper.

### How to scrape Marketplace Seller Watch data

1. Go to this actor's page on the [Apify Store](https://apify.com/store).
2. Click **Try for free** to open it in Apify Console.
3. Configure your search query or URL, set the maximum number of results, and adjust proxy settings if needed.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or connect it to your workflow via API.

You can also schedule regular runs, set up webhooks for real-time notifications, or integrate the results directly into your application using the [Apify API](https://docs.apify.com/api).

# Actor input Schema

## `brandQuery` (type: `string`):

The brand (e.g. "Philips") or product line to track. Each marketplace is searched for this term and every seller offering a matching listing is tracked. Leave empty to default to "Philips".

## `marketplaces` (type: `array`):

Which marketplaces to watch. Leave empty for the healthy defaults (Kaufland.de, Kaufland.pl, Bol.com). Allegro.pl is opt-in only: it exposes the seller only on product detail pages, so the listing scraper returns no seller today (see README).

## `productName` (type: `string`):

Narrow tracking to one product instead of the whole brand. When set, only listings whose title is similar enough (see match threshold) to this name are counted, so you watch sellers of exactly this SKU. Leave empty to track every listing the brand query returns.

## `matchThreshold` (type: `number`):

Only used when a specific product name is given. Minimum name-similarity (0-1) for a listing to count as that product. Higher = stricter.

## `maxProductsPerMarketplace` (type: `integer`):

How many product listings to pull from each marketplace per run. More listings find more sellers but cost more. seller\_gone is judged against this tracked window (see README).

## `emitSellerGone` (type: `boolean`):

When on, a previously-seen seller that no longer appears in the tracked listings for this brand emits a seller\_gone event (once). Turn off to only ever report new sellers.

## `timeoutPerSourceSecs` (type: `integer`):

Maximum time to wait for each underlying marketplace scraper. A slow or failing marketplace is skipped after this rather than blocking the whole run.

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

Proxy passed through to marketplace children that need one (currently Bol.com; Allegro when opted in). The Kaufland children drive Bright Data internally and ignore this. Defaults to a residential proxy scoped to each marketplace's country.

## `resetState` (type: `boolean`):

Clears the persistent seen-set for this brand across all marketplaces before the run, so every current seller counts as new\_seller. Use for QA so a run always produces items. Never enable on a real scheduled run — it defeats the delta/dedup purpose.

## Actor input object example

```json
{
  "brandQuery": "Philips",
  "marketplaces": [
    "kaufland-de",
    "kaufland-pl",
    "bol"
  ],
  "productName": "Philips 5400 Series EP5447",
  "matchThreshold": 0.35,
  "maxProductsPerMarketplace": 20,
  "emitSellerGone": true,
  "timeoutPerSourceSecs": 180,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "resetState": true
}
```

# 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 = {
    "brandQuery": "Philips",
    "marketplaces": [
        "kaufland-de",
        "kaufland-pl",
        "bol"
    ],
    "matchThreshold": 0.35,
    "maxProductsPerMarketplace": 20,
    "emitSellerGone": true,
    "timeoutPerSourceSecs": 180,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    },
    "resetState": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/marketplace-seller-watch").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 = {
    "brandQuery": "Philips",
    "marketplaces": [
        "kaufland-de",
        "kaufland-pl",
        "bol",
    ],
    "matchThreshold": 0.35,
    "maxProductsPerMarketplace": 20,
    "emitSellerGone": True,
    "timeoutPerSourceSecs": 180,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
    "resetState": True,
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/marketplace-seller-watch").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 '{
  "brandQuery": "Philips",
  "marketplaces": [
    "kaufland-de",
    "kaufland-pl",
    "bol"
  ],
  "matchThreshold": 0.35,
  "maxProductsPerMarketplace": 20,
  "emitSellerGone": true,
  "timeoutPerSourceSecs": 180,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "resetState": true
}' |
apify call studio-amba/marketplace-seller-watch --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Marketplace Seller Watch — Third-Party Reseller Monitor",
        "description": "Meta-scraper that tracks which third-party sellers offer a brand's products across European marketplaces (Kaufland.de, Kaufland.pl, Bol.com) and emits new_seller and seller_gone change events run over run — a deduped alert feed, not a full re-export.",
        "version": "0.1",
        "x-build-id": "NuRgc1Fvc5gAW1vIs"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~marketplace-seller-watch/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-marketplace-seller-watch",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~marketplace-seller-watch/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-marketplace-seller-watch",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~marketplace-seller-watch/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-marketplace-seller-watch",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "brandQuery": {
                        "title": "Brand or product query",
                        "type": "string",
                        "description": "The brand (e.g. \"Philips\") or product line to track. Each marketplace is searched for this term and every seller offering a matching listing is tracked. Leave empty to default to \"Philips\"."
                    },
                    "marketplaces": {
                        "title": "Marketplaces",
                        "type": "array",
                        "description": "Which marketplaces to watch. Leave empty for the healthy defaults (Kaufland.de, Kaufland.pl, Bol.com). Allegro.pl is opt-in only: it exposes the seller only on product detail pages, so the listing scraper returns no seller today (see README).",
                        "items": {
                            "type": "string",
                            "enum": [
                                "kaufland-de",
                                "kaufland-pl",
                                "bol",
                                "allegro"
                            ],
                            "enumTitles": [
                                "Kaufland.de (Germany)",
                                "Kaufland.pl (Poland)",
                                "Bol.com (Netherlands / Belgium)",
                                "Allegro.pl (Poland) — opt-in, no seller on listings yet"
                            ]
                        }
                    },
                    "productName": {
                        "title": "Specific product name (optional)",
                        "type": "string",
                        "description": "Narrow tracking to one product instead of the whole brand. When set, only listings whose title is similar enough (see match threshold) to this name are counted, so you watch sellers of exactly this SKU. Leave empty to track every listing the brand query returns."
                    },
                    "matchThreshold": {
                        "title": "Match threshold",
                        "minimum": 0,
                        "maximum": 1,
                        "type": "number",
                        "description": "Only used when a specific product name is given. Minimum name-similarity (0-1) for a listing to count as that product. Higher = stricter.",
                        "default": 0.35
                    },
                    "maxProductsPerMarketplace": {
                        "title": "Max products per marketplace",
                        "minimum": 5,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many product listings to pull from each marketplace per run. More listings find more sellers but cost more. seller_gone is judged against this tracked window (see README).",
                        "default": 20
                    },
                    "emitSellerGone": {
                        "title": "Emit seller_gone events",
                        "type": "boolean",
                        "description": "When on, a previously-seen seller that no longer appears in the tracked listings for this brand emits a seller_gone event (once). Turn off to only ever report new sellers.",
                        "default": true
                    },
                    "timeoutPerSourceSecs": {
                        "title": "Timeout per marketplace (seconds)",
                        "minimum": 60,
                        "maximum": 600,
                        "type": "integer",
                        "description": "Maximum time to wait for each underlying marketplace scraper. A slow or failing marketplace is skipped after this rather than blocking the whole run.",
                        "default": 240
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy passed through to marketplace children that need one (currently Bol.com; Allegro when opted in). The Kaufland children drive Bright Data internally and ignore this. Defaults to a residential proxy scoped to each marketplace's country."
                    },
                    "resetState": {
                        "title": "Reset seen-state (testing only)",
                        "type": "boolean",
                        "description": "Clears the persistent seen-set for this brand across all marketplaces before the run, so every current seller counts as new_seller. Use for QA so a run always produces items. Never enable on a real scheduled run — it defeats the delta/dedup purpose.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
