# Kleinanzeigen Deal Monitor — New Ads, Price Drops & Alerts (`kondasviktor/kleinanzeigen-deal-monitor`) Actor

Monitor Kleinanzeigen.de searches: new ads, price drops, free items and underpriced deals near you, with scam-risk flags and Telegram or webhook alerts. Pay only for new rows. JSON, CSV, API, MCP.

- **URL**: https://apify.com/kondasviktor/kleinanzeigen-deal-monitor.md
- **Developed by:** [Viktor Kondas](https://apify.com/kondasviktor) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Kleinanzeigen Deal Monitor — New Ads, Price Drops & Alerts

**Be first to the best Kleinanzeigen deals near you.** Save your searches once, schedule the monitor, and get new ads, price drops, free items and listings priced below the market — with a scam-risk check — straight to Telegram or your webhook. **You only pay for what's new:** $0.02 per search check + $0.001 per new or changed ad.

> Independent tool, not affiliated with Kleinanzeigen. Reads public ads only — no login, no account.
> 🇩🇪 **Kleinanzeigen Alarm** mit Telegram-Benachrichtigung, Preisvergleich, Entfernung und Betrugs-Check — als Bot, der nur meldet, was wirklich neu ist.

### What does Kleinanzeigen Deal Monitor do?

- **Watches your saved searches** — keyword, category, postcode + radius, price, private or commercial sellers, shipping or pickup. Or paste any kleinanzeigen.de search URL.
- **Finds real deals** — compares each ad with similar live ads (outliers, accessories and empty boxes removed) and flags those well below the median.
- **Warns about likely scams** — far-below-market prices, new accounts, "PayPal Freunde" or WhatsApp-only contact.
- **Shows pickup distance** from your postcode and filters by maximum distance.
- **Alerts you on Telegram or any webhook**, in English, German or Hungarian.
- **Ignores bumped Top ads** and relisted duplicates, so "new" really means new.
- **Catches free items** ("zu verschenken") and keeps **"defekt"** ads as their own condition for repair flippers.
- **Charges only for new or changed ads** on repeat runs.
- **Tells the truth about blocks** — a blocked or captcha page is reported as a failed search (and not charged), never as "0 results".

### Who is it for?

| You are… | You use it to… |
|---|---|
| Reseller / flipper | Catch underpriced electronics, bikes, tools and furniture near you |
| Repair flipper | Find "defekt" items to fix and resell |
| Collector / bargain hunter | Get pinged when LEGO, cameras or retro games appear under your price |
| Dealer / analyst | Track regional prices and competitors' stock |

### Ready-made examples (one click)

| Example | What you get |
|---|---|
| [Find underpriced iPhones on Kleinanzeigen Berlin](https://apify.com/kondasviktor/kleinanzeigen-deal-monitor/examples/kleinanzeigen-iphone-deals-berlin) | iPhone ads below the local median, with scam flags |
| [Get alerts for free items in Hamburg](https://apify.com/kondasviktor/kleinanzeigen-deal-monitor/examples/kleinanzeigen-free-items-hamburg) | "Zu verschenken" ads within 15 km |
| [Track e-bike price drops in Munich](https://apify.com/kondasviktor/kleinanzeigen-deal-monitor/examples/kleinanzeigen-e-bike-price-drops-munich) | E-bike ads whose price fell |
| [Monitor new LEGO listings across Germany](https://apify.com/kondasviktor/kleinanzeigen-deal-monitor/examples/kleinanzeigen-lego-new-listings) | Newest LEGO ads with shipping |
| [Export private-seller road bike ads to CSV](https://apify.com/kondasviktor/kleinanzeigen-deal-monitor/examples/kleinanzeigen-road-bikes-private-export) | Snapshot of private road-bike ads with distance |

### How to use it

1. Add a search (keyword, postcode, radius, price…) or paste Kleinanzeigen search URLs.
2. Set your **home postcode** to see pickup distance.
3. Optional: add your Telegram bot token + chat ID, or a webhook URL.
4. Run once, then **Schedule** it (every 30–60 minutes is a good start).

The very first run of a monitor is its **baseline**: existing ads are written to the dataset, but not announced as "new" or "free". From the second run on, only changes are written, charged and alerted.

#### Telegram in 2 minutes

1. In Telegram open **@BotFather**, send `/newbot`, copy the token.
2. Message your new bot once, then get your chat ID (e.g. from **@userinfobot**).
3. Paste both into the input and pick the alert language (English, Deutsch or Magyar).

#### Search example

```json
{
  "mode": "monitor",
  "searches": [
    { "name": "E-Bike München", "query": "e-bike", "postcode": "80331", "radiusKm": 30, "priceMin": 300, "sellerType": "private" }
  ],
  "homePostcode": "80331",
  "alertOn": ["DEAL", "PRICE_DROP", "FREE_ITEM"],
  "telegramBotToken": "123456:ABC-DEF…",
  "telegramChatId": "123456789"
}
```

### Input

| Field | Description |
|---|---|
| `mode` | `monitor` (only new/changed ads + alerts) or `snapshot` (full export) |
| `searches` / `searchUrls` | Your saved searches (`query`, `categoryId`, `postcode`, `radiusKm`, `priceMin`, `priceMax`, `sellerType`, `shippingOnly`, `buyNowOnly`, `conditions`, `mustInclude`, `mustExclude`) or pasted Kleinanzeigen URLs |
| `homePostcode`, `maxDistanceKm` | Pickup distance and filter (works across several searches) |
| `sellerType`, `adType` | Private / commercial · offers (default) / wanted ads (Gesuche) |
| `priceTypes` | Festpreis · VB · zu verschenken · auf Anfrage. Choose only `free` to watch the free-items category |
| `conditions` | New · like new · very good · good · acceptable · **defective ("defekt")** — defective is off by default |
| `excludeJunk` | Remove accessories, wanted/swap posts, empty boxes and spare parts (on by default) |
| `includeTopAds` | Write Top ads as rows too (they never count as new) |
| `alertOn` | `NEW`, `PRICE_DROP`, `DEAL`, `FREE_ITEM`, `LIKELY_SOLD_OR_REMOVED` |
| `dealThresholdPct`, `minCompsForDeal` | How far below the median counts as a deal, and how many similar ads are needed |
| `hideHighScamRisk` | Drop ads scored `high` instead of flagging them |
| `includeItemDetails` | Description, condition, attributes, seller account age and badges ($0.002 per ad) |
| `alertLanguage`, `telegramBotToken`, `telegramChatId`, `webhookUrl`, `webhookSecret` | Alert destinations (stored as secrets) |
| `maxItemsPerSearch` | Ads per search — also your cost cap |

### Output

One row per event. Example:

```json
{
  "eventType": "DEAL",
  "searchName": "iPhone 14 Berlin",
  "adId": "3566202383",
  "title": "iPhone 14 128GB Mitternacht, Top Zustand",
  "price": 390,
  "priceType": "negotiable",
  "priceRaw": "390 € VB",
  "condition": "very_good",
  "postcode": "10437",
  "city": "Berlin",
  "distanceKm": 4.2,
  "shippingAvailable": true,
  "buyNowAvailable": false,
  "isTopAd": false,
  "isCommercial": false,
  "compsCount": 23,
  "compsMedian": 520,
  "discountVsMedianPct": 25,
  "compsConfidence": "high",
  "isDeal": false,
  "scamRisk": "low",
  "scamFlags": [],
  "postedAt": "2026-11-12T14:32:00+01:00",
  "postedAtPrecision": "minute",
  "url": "https://www.kleinanzeigen.de/s-anzeige/…",
  "status": "ok"
}
```

`postedAt` is normalised to Europe/Berlin; `postedAtPrecision` tells you whether the site gave a time (`minute`, for "Heute/Gestern" ads) or only a date (`day`).

Each run also saves an **OUTPUT** summary per search: status (`OK`, `PARTIAL`, `VALID_EMPTY`, `UPSTREAM_FAILED`), pages fetched, results reported by the site, coverage %, counts per event type, alerts sent and the proxy tier used. **A blocked run is never shown as "no results".**

### How much does it cost?

| Event | Price | When |
|---|---|---|
| Actor start | Apify default | Once per run |
| Search check | $0.02 | Each saved search per run |
| New or changed ad | $0.001 | Each row written (monitor: only new/changed) |
| Ad details | $0.002 | Only if you turn on details |

**Examples:** 1 search checked hourly ≈ $14.40/month + new ads. A one-off export of 1,000 ads ≈ $1.02. A monitor run with 5 searches costs about $0.10 plus $0.001 per new ad — set **Max cost per run** to stay in control. Failed or blocked searches cost nothing. Higher Apify plans get Store discounts automatically.

### Why it's different

- **Deals, not just rows** — discount vs similar live ads, with junk and outliers removed.
- **Scam-risk flags** on every ad (price, account age, payment and contact wording).
- **Pickup distance** from your postcode.
- **Top ads and relists don't spam your alerts.**
- **Honest status** — blocked ≠ empty; coverage % per search.
- **Free-item alerts** and **"defekt"** kept as its own condition.
- **Telegram built in**, three alert languages.

### Use with AI agents (MCP)

> "Use kondasviktor/kleinanzeigen-deal-monitor in snapshot mode to find e-bikes under €900 within 30 km of 80331, private sellers only."

### FAQ

**Are the medians sold prices?** No — Kleinanzeigen doesn't publish sold prices. Medians are current asking prices from similar ads (VB prices count as asking prices), plus a rolling 30-day history of your monitor.

**How is "similar" decided?** Your saved search defines the product: ads from the same search are compared with each other. Keep searches specific ("iphone 14 pro 256") for a meaningful median. Defective ads are compared only with other defective ads.

**How often should I schedule it?** Every 30–60 minutes for hot categories, daily for research.

**What does "scam risk" mean?** A heuristic score from price, account age and payment/contact wording. It helps you decide what to check first — it is not a verdict about any seller. Account-age and contact checks need `includeItemDetails`.

**Kleinanzeigen only shows 1,250 results per search.** Right — the site stops at 50 pages. If you ask for more than that, the Actor splits the price range into bands and reports the coverage %. For monitoring, narrow the search instead.

**Does it work for cars or property?** It reads any category, but the deal logic is tuned for goods. Use category filters and price bands for vehicles.

**Is it legal?** It reads public ads without logging in and stores only seller IDs, never names or phone numbers. Check Kleinanzeigen's terms for your use case. Not legal advice.

**Something broke?** Open an issue — fixes within 48 hours.

### Limitations

- Seller-age and contact signals need ad details (extra cost). The view counter on ad pages is filled in by the site's JavaScript, so `viewCount` is usually empty.
- Deal verdicts need at least 8 comparable ads; rare items show `compsConfidence: low`.
- Condition is judged from the title on search results (e.g. "defekt", "Bastler") and from the ad page when details are on.
- Not a buying bot — it never contacts sellers.

### Related Actors

- [Vinted Deal Monitor](https://apify.com/kondasviktor/vinted-deal-monitor) — the same alerts for Vinted in 20+ countries

Postcode coordinates: [GeoNames](https://www.geonames.org/) postal codes, licensed [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/).

***

Built by [Viktor Kondas](https://apify.com/kondasviktor) · [Vibe Coder's Life](https://vibecoderslife.com/?utm_source=apify\&utm_medium=readme\&utm_campaign=kleinanzeigen-deal-monitor) · Custom monitors: hello@vibecoderslife.com

# Actor input Schema

## `mode` (type: `string`):

`monitor` writes (and charges) only new or changed ads and sends alerts — schedule it every 15–60 minutes. `snapshot` exports every ad it finds, once.

## `searches` (type: `array`):

Your saved searches. Each: `{ "name": "E-Bike München", "query": "e-bike", "postcode": "80331", "radiusKm": 30, "priceMin": 300, "priceMax": 2000, "sellerType": "private", "shippingOnly": false, "buyNowOnly": false, "categoryId": 217, "conditions": [], "mustInclude": [], "mustExclude": ["akku"] }`. Only `query` (or a `categoryId`) is required; everything else falls back to the global fields below. One search = one paid "tracked search" per run.

## `searchUrls` (type: `array`):

Paste search result URLs from kleinanzeigen.de (https://www.kleinanzeigen.de/s-…). Keyword, category, place, radius, price and seller filters are read from each URL. This is the most reliable way to describe a search.

## `homePostcode` (type: `string`):

5-digit German postcode. Every ad gets `distanceKm` from here, and `maxDistanceKm` filters by it.

## `maxDistanceKm` (type: `integer`):

Drop ads farther than this from your postcode (works across several searches). Ads whose postcode is unknown are kept unless you tick the option below.

## `dropUnknownDistance` (type: `boolean`):

With a maximum distance set, also drop ads whose postcode could not be located.

## `sellerType` (type: `string`):

Private sellers only, commercial sellers only, or both.

## `adType` (type: `string`):

Offers (Angebote) by default; wanted ads (Gesuche) are excluded unless you choose them.

## `priceTypes` (type: `array`):

Fixed price (Festpreis), negotiable (VB), free (zu verschenken), on request (auf Anfrage / no price). Choose only `free` to watch the free-items category.

## `conditions` (type: `array`):

Ads whose condition is outside this list are dropped. The condition is judged from the title on search results ("defekt", "Bastler") and from the ad page when ad details are on. Defective ads are off by default — add `defective` for repair flipping.

## `includeTopAds` (type: `boolean`):

Top / sponsored ads are pinned above the results on every page. They are always flagged (`isTopAd`) and never count as NEW; tick this to write them as rows anyway.

## `excludeJunk` (type: `boolean`):

Removes accessories (Hülle, Case, Schutzfolie, Panzerglas, Ladekabel), wanted/swap posts (Suche, Tausche, gesucht), empty boxes (nur Karton, OVP leer) and spare parts (Ersatzteil). Keeps deal medians clean. A search for the accessory itself keeps it.

## `mustInclude` (type: `array`):

Every term must appear in the ad title (and description when ad details are on). Case- and accent-insensitive.

## `mustExclude` (type: `array`):

Drop ads containing any of these terms. Extends the junk filter.

## `excludeSellerIds` (type: `array`):

Block known relisters or dealers by the `sellerId` shown in the results.

## `maxItemsPerSearch` (type: `integer`):

Stops paging after this many ads (Top ads don't count). Also your cost cap. Kleinanzeigen shows at most 1,250 results per search; above that the Actor splits the price range into bands and reports the coverage.

## `alertOn` (type: `array`):

Events that trigger Telegram / webhook alerts. The first run of a monitor is its baseline: existing ads are written but not announced as new or free.

## `dealThresholdPct` (type: `number`):

An ad is a DEAL when it is at least this much cheaper than the median asking price of similar ads (outliers, junk and free ads removed).

## `minCompsForDeal` (type: `integer`):

A deal verdict needs at least this many similar ads (8 = `medium` confidence). Fewer gives `compsConfidence: low`.

## `priceDropThresholdPct` (type: `number`):

Report a PRICE_DROP when an ad's price fell by at least this much since last seen.

## `hideHighScamRisk` (type: `boolean`):

Drop ads scored `high` instead of just flagging them. Scam flags are heuristics to prioritise your checks, not a verdict about any seller.

## `includeItemDetails` (type: `boolean`):

Opens the ad page of every row it writes: description, condition, all attributes, seller account age and badges. Enables the new-account and contact-outside-platform scam checks. Charged as `item-details` ($0.002 per ad) — failed pages are free.

## `alertLanguage` (type: `string`):

Language of the Telegram messages.

## `telegramBotToken` (type: `string`):

From @BotFather (`/newbot`). Looks like `123456:ABC-DEF…`.

## `telegramChatId` (type: `string`):

Message your bot once, then get your chat ID (for example from @userinfobot).

## `webhookUrl` (type: `string`):

Receives one JSON POST per run with all alert events. HTTPS only; private addresses are refused.

## `webhookSecret` (type: `string`):

Optional. Adds an `X-Signature: sha256=…` HMAC header so you can verify the sender.

## `maxAlertsPerRun` (type: `integer`):

Above this many alerts Telegram gets one digest message instead.

## `monitorId` (type: `string`):

Names the state store that remembers which ads were seen. Keep it stable across scheduled runs; by default it is derived from your searches.

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

Requests go out directly from the Apify platform first. Only when Kleinanzeigen keeps blocking that IP does the Actor switch to this proxy (residential, Germany) and stay on it for the rest of the run. Datacenter proxies are never used — Kleinanzeigen bans them. Turn Apify proxy off to forbid any escalation.

## `alwaysUseProxy` (type: `boolean`):

Skip the direct attempt and send every request through the proxy above. Only needed if direct requests from Apify are blocked for you — it uses (paid) residential bandwidth.

## Actor input object example

```json
{
  "mode": "snapshot",
  "searches": [
    {
      "name": "E-Bike Berlin",
      "query": "e-bike",
      "postcode": "10115",
      "radiusKm": 30,
      "priceMin": 300
    }
  ],
  "homePostcode": "10115",
  "dropUnknownDistance": false,
  "sellerType": "any",
  "adType": "offer",
  "priceTypes": [
    "fixed",
    "negotiable",
    "free",
    "on_request"
  ],
  "conditions": [
    "new",
    "like_new",
    "very_good",
    "good",
    "acceptable",
    "unknown"
  ],
  "includeTopAds": false,
  "excludeJunk": true,
  "maxItemsPerSearch": 20,
  "alertOn": [
    "DEAL",
    "PRICE_DROP",
    "FREE_ITEM"
  ],
  "dealThresholdPct": 30,
  "minCompsForDeal": 8,
  "priceDropThresholdPct": 10,
  "hideHighScamRisk": false,
  "includeItemDetails": false,
  "alertLanguage": "en",
  "maxAlertsPerRun": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  },
  "alwaysUseProxy": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "mode": "snapshot",
    "searches": [
        {
            "name": "E-Bike Berlin",
            "query": "e-bike",
            "postcode": "10115",
            "radiusKm": 30,
            "priceMin": 300
        }
    ],
    "homePostcode": "10115",
    "sellerType": "any",
    "adType": "offer",
    "priceTypes": [
        "fixed",
        "negotiable",
        "free",
        "on_request"
    ],
    "includeTopAds": false,
    "excludeJunk": true,
    "maxItemsPerSearch": 20,
    "dealThresholdPct": 30,
    "minCompsForDeal": 8,
    "priceDropThresholdPct": 10,
    "hideHighScamRisk": false,
    "includeItemDetails": false,
    "alertLanguage": "en",
    "maxAlertsPerRun": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "DE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kondasviktor/kleinanzeigen-deal-monitor").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 = {
    "mode": "snapshot",
    "searches": [{
            "name": "E-Bike Berlin",
            "query": "e-bike",
            "postcode": "10115",
            "radiusKm": 30,
            "priceMin": 300,
        }],
    "homePostcode": "10115",
    "sellerType": "any",
    "adType": "offer",
    "priceTypes": [
        "fixed",
        "negotiable",
        "free",
        "on_request",
    ],
    "includeTopAds": False,
    "excludeJunk": True,
    "maxItemsPerSearch": 20,
    "dealThresholdPct": 30,
    "minCompsForDeal": 8,
    "priceDropThresholdPct": 10,
    "hideHighScamRisk": False,
    "includeItemDetails": False,
    "alertLanguage": "en",
    "maxAlertsPerRun": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "DE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("kondasviktor/kleinanzeigen-deal-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "snapshot",
  "searches": [
    {
      "name": "E-Bike Berlin",
      "query": "e-bike",
      "postcode": "10115",
      "radiusKm": 30,
      "priceMin": 300
    }
  ],
  "homePostcode": "10115",
  "sellerType": "any",
  "adType": "offer",
  "priceTypes": [
    "fixed",
    "negotiable",
    "free",
    "on_request"
  ],
  "includeTopAds": false,
  "excludeJunk": true,
  "maxItemsPerSearch": 20,
  "dealThresholdPct": 30,
  "minCompsForDeal": 8,
  "priceDropThresholdPct": 10,
  "hideHighScamRisk": false,
  "includeItemDetails": false,
  "alertLanguage": "en",
  "maxAlertsPerRun": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "DE"
  }
}' |
apify call kondasviktor/kleinanzeigen-deal-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kondasviktor/kleinanzeigen-deal-monitor"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6xJ0a3kK6QuPPL9Rg/builds/RtkSUXWceJYtgabra/openapi.json
