# Coles, Woolworths & ALDI Scraper (`lergassy/au-grocery-scraper`) Actor

Scrape Australian grocery prices from Coles, Woolworths and ALDI in one run: price, was-price, discount, unit price, stock, category, ingredients and nutrition. Compare the three chains on one row, watch price changes, or list stores near a postcode.

- **URL**: https://apify.com/lergassy/au-grocery-scraper.md
- **Developed by:** [Matvey](https://apify.com/lergassy) (community)
- **Categories:** E-commerce, Agents, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.05 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

**Coles, Woolworths & ALDI Scraper** reads all three Australian supermarkets in one run and hands back one table: product, brand, size, price, was-price, discount, price per unit, availability, category and a link. Ask for **milk** and you get what Coles sells, what Woolworths sells and what ALDI sells, in the same columns, ready for a spreadsheet, a database or an AI agent.

Three things this does that a single-chain scraper cannot. It can put **the same product from the three chains on one row** with the three prices side by side and name the cheapest. It can **watch prices**: give a run a name, schedule it, and every later run returns only what moved — dropped, risen, gone on special, come back in stock. And it reads the **label** — ingredients, allergens, Health Star Rating, the nutrition panel and the country of origin — for the chains that publish it.

No login, no API key, no browser. Errors are never billed, and a watch that finds nothing new costs nothing.

### What is the Coles, Woolworths & ALDI Scraper?

Australian grocery prices are public on each chain's website and nowhere together. Coles sits behind a bot check, Woolworths answers its own search service, ALDI runs a product API — three different shapes, three different names for the same column, and a different set of house brands each. This Actor is the layer that hides all of that: **one input, one row shape, three chains.**

Who uses it: price-comparison and cashback apps, FMCG and category managers checking where their product sits against the private label, journalists and researchers working on cost of living, market-research teams building a price index, and AI agents asked "what does a litre of milk cost in Australia this week".

### What data does it return?

| Field | Example |
|---|---|
| `chainName`, `chain` | Coles · Woolworths · ALDI |
| `name`, `brand`, `size` | Coles Full Cream Milk · Coles · 2L |
| `sizeNormalised` | `2000ml` — the same size written the same way for every chain |
| `price`, `wasPrice`, `isOnSpecial` | 3.40 · 4.10 · true |
| `savings`, `savingsPercent` | 0.70 · 17 |
| `unitPrice`, `unitMeasure`, `unitPriceText` | 1.70 · 1l · `$1.70 / 1L` |
| `inStock`, `availability`, `purchaseLimit` | true · InStoreAndOnline · 20 |
| `category`, `subCategory`, `department` | Milk · Dairy, Eggs & Fridge · DAIRY |
| `barcode`, `ratingAverage`, `ratingCount` | 9300633636364 · 4.6 · 812 |
| `url`, `imageUrl`, `productId` | link to the product page and its photo |
| `matchKey` | `2000ml|cream-full-milk` — the key used to line the chains up |

Measured on 16 September 2026, house-brand full cream milk came back as Coles $3.40, Woolworths $3.40, ALDI (Farmdale) $3.39 for 2L, and $4.95 at all three for 3L. That is the kind of row this exists to produce.

### Whole aisles, not just keywords

Paste a Coles category link (`https://www.coles.com.au/browse/dairy-eggs-fridge/milk`) or an ALDI category key (`970000000`) into **📂 Category pages** and the Actor walks the aisle instead of guessing at a keyword. Woolworths is the exception and is said so plainly: its category service refuses an anonymous request, so Woolworths is covered by keywords. Coles category pages are also the path its own robots.txt allows, unlike its search.

### Ingredients, allergens and nutrition

Turn on **🥗 Ingredients, allergens and nutrition** and the rows carry `ingredients`, `allergensContains`, `allergensMayContain`, `healthStarRating`, `nutrition` (the panel as name-and-value pairs), `servingSize`, `servingsPerPackage`, `countryOfOrigin`, `storageInstructions` and `gtin`.

Where it comes from, honestly: **Woolworths** ships the whole label inside its normal answer, so it costs nothing extra and is always there. **Coles** keeps the label on the product page, so each Coles product needs one more request — charged as its own add-on and capped by **Maximum label lookups per run**. **ALDI** publishes no label data to an anonymous visitor at all, and those columns stay empty for ALDI rows rather than being guessed at.

### Your own store: aisle and shelf stock at Coles

Put your Coles store number into **🏬 Coles store number** and the Coles rows stop being the national range: `aisle` tells you where in the shop the product sits ("Dairy"), and `availableQuantity` becomes that store's shelf count instead of a warehouse figure. Measured on 16 September 2026, the same milk read 2,146 units without a store and 260 with one, with the aisle filled in.

Prices themselves do **not** change: all three chains publish one national online price, and this Actor does not pretend otherwise.

### Stores near a postcode

Switch **What a row should be** to *One store per row* and give a **📍 Postcode** (or a latitude and longitude). You get the **Woolworths and ALDI** supermarkets near that point, sorted by distance: name, street address, suburb, state, postcode, phone, distance in kilometres, whether it is open right now and the trading hours for the days ahead.

Coles is the one missing, and the reason is not laziness: its store finder answers only for the location it reads from the caller's own address, so there is no way to ask it about a postcode you choose. Rather than return a list for the wrong city, the Actor says plainly that Coles was skipped. Coles' own store number can still be given directly in **🏬 Coles store number** for the aisle and shelf-stock fields.

The postcode table behind this is built from the chains' own published store addresses, so no third-party geocoder is involved. It covers the 800 Australian postcodes that actually have a supermarket in them; for anywhere else, pass a latitude and longitude instead and the lookup works the same.

### One comparison per row

Switch **What a row should be** to *One comparison per row* and the output changes shape: one row per product, with `colesPrice`, `woolworthsPrice`, `aldiPrice`, `cheapestChain`, `cheapestPrice`, `priceGap`, `priceGapPercent` and `bestUnitPriceChain`, plus the name and link each chain had.

Matching across chains is done on the normalised size and the words of the name, and **by default two products only meet if the brand agrees** — with one deliberate exception: the three house brands are treated as comparable to each other, because Coles Full Cream Milk, Woolworths Full Cream Milk and ALDI's Farmdale are exactly what a shopper weighs against one another. Set **How strictly to match** to *Equivalent* to also pair different brands of the same size and wording.

Every comparison row carries `matchType` (`own-brand`, `same-brand`, `equivalent`, `single`) and `matchConfidence` between 0 and 1, so a heuristic never passes itself off as a certainty.

### How this compares with a single-chain scraper

Every other Australian grocery scraper on the Store covers one chain. Measured against them on 16 September 2026:

| | This Actor | A typical single-chain scraper |
|---|---|---|
| Chains in one run | **Coles, Woolworths and ALDI** | one |
| The three prices on one row | **yes**, with the cheapest chain and the gap | no — you match the products yourself |
| Sizes made comparable | **yes** — `2L`, `2 litre` and `2000ml` all become `2000ml` | no |
| Only what changed since the last run | **yes**, on any keyword or aisle, in all three chains | one actor does it, for one chain |
| Ingredients, allergens, Health Star, nutrition | **yes** for Woolworths and Coles | no |
| Aisle and shelf stock for your own store | **yes** at Coles, with the aisle name | no |
| Store finder by postcode | **yes**, Woolworths and ALDI | no |
| Category pages instead of keywords | **yes**, Coles and ALDI | some |
| Filters: specials, minimum discount, price cap, in stock | **yes** | rarely |
| Failed requests and empty checks | **never billed** | usually billed as a run |
| Output schema published for agents | **91 described fields, six table views** | often none at all |

Where a single-chain scraper is still ahead: the ones built only for Coles can return a Coles store list for a postcode, which this Actor cannot, because Coles answers that question only for the caller's own location.

### Watching prices

Give the run a **watch name** and schedule it. The first run delivers what is there now and remembers every price. Every run after returns only rows that moved, each carrying `changeType`, `previousPrice`, `priceChange` and `priceChangePercent`:

- `price-drop`, `price-rise` — the shelf price moved
- `special-started`, `special-ended` — a discount began or finished
- `back-in-stock`, `out-of-stock` — availability flipped
- `new` — a product that was not in the range last time

Nothing moved? An empty dataset, a status message saying so, and **no charge**. Different watch names keep separate memories, so `dairy` and `nappies` never see each other's history.

### How much does it cost?

- **$1.50 per 1,000 products** — one row, one charge.
- **$5 per 1,000 comparison rows** — a comparison row is assembled from two or three chain rows and is charged once instead.
- **$2 per 1,000 stores** — one supermarket with its address, hours and coordinates.
- **$2 per 1,000 label lookups** — charged only for Coles products whose label had to be read from its own page. Woolworths labels are free, because they arrive with the product.
- Error rows, filtered-out products and a watch that finds no movement: **$0**.

Sweeping twenty keywords across three chains, 100 products deep, is about 6,000 rows — around $9. Watching the same list daily after the first run costs only the movements, usually a few hundred rows a day.

Apify's free plan includes $5 of platform credit, which is roughly 3,300 products.

Residential proxy traffic for Coles is paid by this Actor, not by you — the per-row price already covers it.

### How to use it in four steps

1. Type what you want to track in **🔎 What to look up** — `milk`, `nappies`, `coffee`, `olive oil`.
2. Leave all three chains ticked, or untick the ones you do not need.
3. Press **Start**. The first run returns products from all three chains.
4. To track prices instead of listing them: fill in **🔔 Watch name**, then open the **Schedules** tab and run it daily. Connect Slack, e-mail, Google Sheets, Zapier, Make or a webhook under **Integrations** and the movements land where you work.

### ⬇️ Input

```json
{
  "keywords": ["milk", "bread", "eggs"],
  "chains": ["coles", "woolworths", "aldi"],
  "output": "comparison",
  "maxProductsPerKeyword": 60,
  "onSpecialOnly": false,
  "watchName": "weekly-basket"
}
```

#### Specific products instead of a search

Paste Coles, Woolworths or ALDI product links into **🔗 Product URLs**. The chain is recognised from the link, so the three can be mixed in one list.

#### Filters

**🏷️ Only products on special**, **📉 Minimum discount**, **💲 Maximum price** and **📦 Only what is in stock** narrow what is delivered — and what is billed, because a filtered-out product is not charged.

### ⬆️ Output

```json
{
  "type": "product",
  "chain": "aldi",
  "chainName": "ALDI",
  "productId": "000000000410925003",
  "name": "FARMDALE Full Cream Milk 2L",
  "brand": "FARMDALE",
  "size": "2 l",
  "sizeNormalised": "2000ml",
  "price": 3.39,
  "wasPrice": null,
  "isOnSpecial": false,
  "unitPriceText": "$1.70 per 1 l",
  "inStock": true,
  "category": "Dairy & Eggs",
  "url": "https://www.aldi.com.au/product/farmdale-full-cream-milk-2l",
  "currency": "AUD",
  "scrapedAt": "2026-09-16T07:20:11.004Z"
}
```

Three table views come with the dataset: **Products**, **Price comparison** and **Price changes**. A failed request pushes one `type: "error"` row naming the chain and the reason, free of charge, and the run summary lands in the key-value store as `SUMMARY`.

### Reliability, honestly

- **Woolworths and ALDI** are read from their own services and answer in a fraction of a second.
- **Woolworths** also refuses an address that has asked too often — its Akamai answers "Access Denied". The Actor notices and switches that chain to the proxy for the rest of the run instead of failing; this was found the hard way, by getting the development machine blocked while building the postcode table.
- **Coles** is the hard one. Its bot check refuses datacenter addresses outright — by the evening of 16 September 2026 Apify's datacenter pool stopped being let in at all — so the Actor asks for residential addresses by default. Even then roughly half of the addresses are turned away on the first try, which is why a blocked page is retried up to eight times from a different address each time, with the challenge page recognised for what it is rather than parsed as an empty result. In testing that brings a keyword home on all but the unluckiest run; when a run does report Coles blocked, running it again is usually enough.
- Prices are the **national online prices** each chain publishes to a visitor without a postcode or a store selected. Store-level and delivery-zone pricing is not read, and the Actor never claims to.

### Use cases

#### Price comparison and cashback apps

One call, three chains, one schema, with the unit price already parsed — the part everyone builds by hand.

#### Category and brand managers

Watch your own SKUs and the private label next to them, and hear about a competitor's promotion the day it starts, not at the end of the month.

#### Cost-of-living research and journalism

A basket of staples, scheduled weekly, produces a clean price series with was-prices and discounts attached.

#### AI agents

A flat row shape, sensible defaults and no required fields, callable through the Apify API or the Apify MCP server.

### Integrations

Run it from the [Apify API](https://docs.apify.com/api/v2), the Python or JavaScript client, n8n, Make, Zapier, Google Sheets, or as a tool for an agent via the [Apify MCP server](https://mcp.apify.com).

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("lergassy/au-grocery-scraper").call(run_input={
    "keywords": ["milk"],
    "output": "comparison",
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["name"], row["cheapestChain"], row["cheapestPrice"])
```

### ❓ FAQ

#### Is it legal to scrape Coles, Woolworths and ALDI?

The Actor reads only pages any visitor can open without logging in, and collects prices and product descriptions, not personal data. Public data collection is generally lawful in Australia and the EU, but what you do with the data can be regulated — consult a lawyer for your own case.

#### Are these the prices in my local store?

They are the national online prices each chain shows without a store or postcode selected. Some products differ store by store; this Actor does not claim to know which.

#### Why do I need a proxy?

Coles refuses unproxied traffic outright. Apify Proxy is on by default and needs no setup.

#### Can I compare products that are not the same brand?

Yes — set **How strictly to match** to *Equivalent*. By default only the same brand, or the three house brands together, are compared, so nothing is claimed that is not true.

#### What happens when a watch finds no changes?

An empty dataset and a $0 bill. That is the expected answer of a watch.

#### Can I use it through the Apify API or an MCP server?

Yes to both, and the input has no required fields, so an agent can call it correctly without reading this page.

### Your feedback

Missing a chain, a field or a filter? Open an issue on the **Issues** tab or leave a review — both are read and answered.

### You might also like

| Actor | What it does |
|---|---|
| [Shopee Scraper](https://apify.com/lergassy/shopee-scraper) | Products, prices and reviews across South-East Asia |
| [Lazada Scraper](https://apify.com/lergassy/lazada-scraper) | The same for Lazada |
| [Tokopedia Reviews Scraper](https://apify.com/lergassy/tokopedia-reviews-scraper) | Indonesian marketplace reviews |
| [Threads Monitor](https://apify.com/lergassy/threads-monitor) | The same watch idea, applied to Meta Threads |

# Actor input Schema

## `keywords` (type: `array`):

Products to look up in every selected chain — <b>milk</b>, <b>nappies</b>, <b>tim tam</b>, <b>olive oil</b>. Each keyword is searched in Coles, Woolworths and ALDI and comes back in one table.

## `categories` (type: `array`):

Whole aisles instead of a keyword. Paste a Coles category link such as <b>https://www.coles.com.au/browse/dairy-eggs-fridge/milk</b>, or an ALDI category key such as <b>970000000</b>. Woolworths does not answer category requests from an anonymous visitor, so use keywords for it.

## `chains` (type: `array`):

Which supermarkets to read. Leave all three on to compare them.

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

<b>One product per row</b> gives every product of every chain separately. <b>One comparison per row</b> puts the same product from the different chains on one row with the Coles, Woolworths and ALDI price next to each other and names the cheapest. <b>One store per row</b> lists the Woolworths and ALDI supermarkets near a postcode or a pair of coordinates, nearest first.

## `maxProductsPerKeyword` (type: `integer`):

How deep to go in each chain for each keyword. Thirty is a fast look; raise it to sweep a whole aisle.

## `productUrls` (type: `array`):

Specific products instead of, or alongside, a search. Paste Coles, Woolworths or ALDI product links — the chain is recognised from the link.

## `postcode` (type: `string`):

An Australian postcode, used to find Woolworths and ALDI stores near it in the store mode. Coordinates can be given instead.

## `latitude` (type: `string`):

Coordinates instead of a postcode, e.g. <b>-33.8688</b>. Both latitude and longitude must be given.

## `longitude` (type: `string`):

The matching longitude, e.g. <b>151.2093</b>.

## `colesStoreId` (type: `string`):

Set it and Coles rows come back with the aisle the product sits in and the quantity that store has on the shelf, instead of the national range. The number is in the URL of your store on the Coles site.

## `includeNutrition` (type: `boolean`):

Woolworths ships the label with the product and it is always included. Coles keeps it on the product page, so each Coles product needs one extra request, charged as a separate add-on. ALDI publishes no label data at all.

## `maxNutritionLookups` (type: `integer`):

A ceiling on the extra Coles requests, so a large sweep cannot surprise you.

## `watchName` (type: `string`):

Give this run a name — <b>weekly-shop</b>, <b>dairy</b> — and every later run under the same name returns only products whose price moved, that went on or off special, that came back in stock, or that are new. Leave empty to get everything found, every time.

## `deliverBaseline` (type: `boolean`):

The first run of a new watch has nothing to compare against. Leave this on to receive the current prices as the starting point; turn it off to start silently and hear only about movements from now on.

## `resetWatch` (type: `boolean`):

Wipe this watch's memory and start a new baseline on this run.

## `onSpecialOnly` (type: `boolean`):

Keep only products with a was-price or a special flag.

## `minDiscountPercent` (type: `integer`):

Keep only products discounted by at least this much. Zero means no minimum.

## `maxPrice` (type: `integer`):

Ignore anything dearer than this. Zero means no limit.

## `inStockOnly` (type: `boolean`):

Drop products the chain reports as unavailable.

## `matchMode` (type: `string`):

<b>Same brand</b> only ever compares like with like: the same brand, or the three house brands against each other (Coles, Woolworths, ALDI's Farmdale and friends). <b>Equivalent</b> also matches a different brand of the same size and wording — wider, and every row says how confident the match is.

## `maxItems` (type: `integer`):

A hard ceiling on what one run delivers and bills.

## `concurrency` (type: `integer`):

How many chain requests to run at once.

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

Apify Proxy is on by default with residential addresses, because Coles refuses datacenter traffic — measured 16 September 2026, when its datacenter pool stopped answering altogether. Woolworths and ALDI are read directly and only fall back to the proxy if they push back.

## Actor input object example

```json
{
  "keywords": [
    "milk"
  ],
  "categories": [],
  "chains": [
    "coles",
    "woolworths",
    "aldi"
  ],
  "output": "products",
  "maxProductsPerKeyword": 30,
  "productUrls": [],
  "postcode": "",
  "latitude": "",
  "longitude": "",
  "colesStoreId": "",
  "includeNutrition": false,
  "maxNutritionLookups": 200,
  "watchName": "",
  "deliverBaseline": true,
  "resetWatch": false,
  "onSpecialOnly": false,
  "minDiscountPercent": 0,
  "maxPrice": 0,
  "inStockOnly": false,
  "matchMode": "same-brand",
  "maxItems": 5000,
  "concurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per product — chain, name, brand, size, price, was-price, discount, unit price, availability, category and link — or one row per cross-chain comparison when the comparison output is chosen.

# 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 = {
    "keywords": [
        "milk"
    ],
    "chains": [
        "coles",
        "woolworths",
        "aldi"
    ],
    "output": "products",
    "maxProductsPerKeyword": 30,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/au-grocery-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 = {
    "keywords": ["milk"],
    "chains": [
        "coles",
        "woolworths",
        "aldi",
    ],
    "output": "products",
    "maxProductsPerKeyword": 30,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("lergassy/au-grocery-scraper").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 '{
  "keywords": [
    "milk"
  ],
  "chains": [
    "coles",
    "woolworths",
    "aldi"
  ],
  "output": "products",
  "maxProductsPerKeyword": 30,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call lergassy/au-grocery-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lergassy/au-grocery-scraper"
        }
    }
}
```

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/YeBPgPltpohBNB4W6/builds/3RwHpaqDWWw6gMaoz/openapi.json
