# Woolworths Products Scraper — Australian Grocery Data (`confidential_gnat/woolworths-products-scraper`) Actor

Scrape Woolworths Australia grocery products: name, brand, price, unit price, package size, availability, ingredients, allergens and nutrition. Skips already-scraped items across runs.

- **URL**: https://apify.com/confidential\_gnat/woolworths-products-scraper.md
- **Developed by:** [ActorFlow](https://apify.com/confidential_gnat) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 results

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

## Woolworths Products Scraper — Australian Grocery Price & Product Data

**Scrape grocery products, prices and nutrition data from Woolworths Australia (woolworths.com.au)** without writing a line of code. This Woolworths scraper extracts **product name, brand, current and was price, unit (cup) price, package size, availability, barcode, ingredients, allergens, nutrition information and country of origin** from any Woolworths category page. Paste a category URL, press **Start**, and export the results as JSON, CSV or Excel — or call the whole thing as an **API** from Python, JavaScript or cURL.

Unlike most Woolworths scrapers, this one **remembers what it already scraped between runs**: give a run a cache project name and it skips every product collected previously, so a daily price-monitoring job only pays for what is actually new.

**Target website:** [woolworths.com.au](https://www.woolworths.com.au)

### ✨ Features of this Woolworths grocery scraper

- **Full product extraction** — name, brand, description, price, was-price, unit price, package size, availability, special status, barcode, department, aisle and the complete image gallery.
- **Nutrition, ingredients and allergen data** — per-serving and per-100g nutrition panels, ingredient lists, allergen statements, "contains" warnings and dietary claims (Gluten Free, Vegan, Vegetarian).
- **Cross-run caching (skip already-scraped products)** — set a cache project name and the scraper skips products collected in earlier runs. Ideal for scheduled daily or weekly price monitoring, where re-scraping an unchanged catalogue is wasted spend.
- **Consistent output schema** — every record returns the same top-level fields, so your CSV columns never shift between runs. Fields that only some products have are grouped into a predictable `additionalData` array.
- **Unit pricing** — the per-100g/per-kg cup price is captured alongside the shelf price for like-for-like comparison.
- **Pagination support** — walks every page of a category automatically until your item limit is reached.
- **Whole-site mode** — one toggle crawls the main Woolworths category pages instead of a hand-picked URL list.
- **Per-URL item limits** — `maxItems` applies to each start URL separately, so one big category cannot starve the others.
- **Proxy support** — optional Apify proxy configuration (datacenter or Australian residential).
- **No browser required** — runs on plain HTTP requests, which makes it fast and far cheaper than browser-based scrapers.

### 🚀 How to scrape Woolworths products in 5 steps

1. [Sign up](https://apify.com/sign-up) for a free Apify account — includes **$5 monthly credit**.
2. Open the actor page and click **Try for free**.
3. Fill in the **Input** fields — at least one Woolworths category URL is required.
4. Click **Start** and wait for the run to complete.
5. Download results from the **Output** tab in JSON, CSV, or Excel format.

You can also run this actor via the [Apify API](https://docs.apify.com/api/v2) or integrate it directly into your workflows using [Zapier](https://zapier.com/apps/apify), [Make](https://www.make.com/), or [n8n](https://n8n.io/).

### 💰 Pricing for this Woolworths scraper

This actor uses **pay-per-result** billing based on the compute units a run consumes.

- New Apify accounts include **$5 of free monthly credit**.
- It runs on HTTP requests rather than a headless browser, so it costs significantly less per product than browser-based scrapers.
- Proxies are **disabled by default** — Woolworths responds reliably without one at modest volume, which keeps runs cheapest.
- The **cross-run cache** cuts cost further on repeat runs by skipping products you already have.

### 🔧 Input configuration for the Woolworths scraper

| Field                | Type    | Required | Default                                                            | Description                                                                                                                                                                                |
| -------------------- | ------- | -------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `startUrls`          | array   | ✅       | `[{"url": "https://www.woolworths.com.au/shop/browse/fruit-veg"}]` | Woolworths category browse URLs, e.g. https://www.woolworths.com.au/shop/browse/fruit-veg.                                                                                                 |
| `maxItems`           | integer | —        | `5`                                                                | Maximum number of products to scrape for each start URL.                                                                                                                                   |
| `scrapeWholeSite`    | boolean | —        | `false`                                                            | Ignore Start URLs and crawl the main Woolworths category browse pages instead.                                                                                                             |
| `cacheProjectName`   | string  | —        | —                                                                  | Optional. When set, products already scraped under this project name in a previous run are skipped instead of being scraped again.                                                         |
| `proxyConfiguration` | object  | —        | `{"useApifyProxy": false}`                                         | Woolworths is protected by Akamai. It responds without a proxy in testing, but for larger runs enable datacenter proxies first, and Australian residential only if datacenter still fails. |

**Supported URL types:**

- **Category browse pages** — `https://www.woolworths.com.au/shop/browse/{category}`, e.g. `.../shop/browse/fruit-veg`, `.../shop/browse/bakery`, `.../shop/browse/pantry`, `.../shop/browse/dairy-eggs-fridge`, `.../shop/browse/drinks` or `.../shop/browse/freezer`.

Individual product pages are not used as start URLs: Woolworths renders its listings from a category feed, so a whole category is scraped in one pass and each product is then enriched with its full detail record.

### 📦 Woolworths scraper output data

Each record is returned as JSON (exportable to CSV, Excel, XML or RSS) with a fixed set of top-level fields: `url`, `stockcode`, `name`, `brand`, `description`, `price`, `wasPrice`, `currency`, `unitPrice`, `packageSize`, `isAvailable`, `isOnSpecial`, `category`, `image`, `barcode`, `unit`, `department`, `aisle`, `images`, `productDetails`, `countryOfOrigin`, `nutrition` and `additionalData`.

Because not every grocery product carries the same information — fresh produce has no ingredient list, a seasoning has no health star rating — the variable fields are collected into `additionalData` as `{ "key": ..., "value": ... }` pairs rather than appearing and disappearing as top-level columns. Keys you will see there include `ingredients`, `allergenStatement`, `allergenContains`, `allergensMayBePresent`, `dietaryStatement`, `storageInstructions`, `healthStarRating`, `servingSize`, `servingsPerPack` and `sections` (labelled description blocks such as "How to Store" or "Cooking Methods").

The dataset has two views. **Overview** is a compact table of name, brand, price, was-price, unit price, package size, availability and URL. **Product details** shows the long-form data: description, country of origin, nutrition and the `additionalData` array.

**Sample output:**

````json
{
  "url": "https://www.woolworths.com.au/shop/productdetails/6072786/masterfoods-garlic-truffle-seasoning",
  "stockcode": 6072786,
  "name": "Masterfoods Garlic Truffle Seasoning",
  "brand": "Masterfoods",
  "description": "Masterfoods Garlic Truffle Seasoning 50g",
  "price": 3.9,
  "wasPrice": 4.95,
  "currency": "AUD",
  "unitPrice": "$0.78 / 10G",
  "packageSize": "50g",
  "isAvailable": true,
  "isOnSpecial": true,
  "category": "pantry",
  "image": "https://cdn1.woolworths.media/content/wowproductimages/large/6072786.jpg",
  "barcode": "9310012100546",
  "unit": "Each",
  "department": "cooking, seasoning & gravy",
  "aisle": "herbs & spices a-k",
  "images": [
    "https://cdn0.woolworths.media/content/wowproductimages/large/6072786.jpg",
    "https://cdn0.woolworths.media/content/wowproductimages/large/6072786_1.jpg"
  ],
  "productDetails": null,
  "countryOfOrigin": null,
  "nutrition": null,
  "additionalData": [
    {
      "key": "ingredients",
      "value": "Spices 43% (Garlic, Black Pepper), Onion 26%, Rice Flour, Salt, Vegetable Oil, Natural Flavour 0.5% (Truffle)."
    },
    {
      "key": "allergenStatement",
      "value": [
        "Dairy Free",
        "Egg Free",
        "Fish Free",
        "Gluten Free",
        "Lactose Free",
        "Soy Free",
        "Wheat Free"
      ]
    },
    {
      "key": "dietaryStatement",
      "value": [
        "Gluten Free",
        "Vegan",
        "Vegetarian"
      ]
    }
  ]
}
{
  "url": "https://www.woolworths.com.au/shop/productdetails/6078131/bega-raspberry-marshmallow-peanut-spread",
  "stockcode": 6078131,
  "name": "Bega Raspberry Marshmallow Peanut Spread",
  "brand": "Bega",
  "description": "Bega Raspberry Marshmallow Peanut Spread 325g",
  "price": 6,
  "wasPrice": 6,
  "currency": "AUD",
  "unitPrice": "$1.85 / 100G",
  "packageSize": "325g",
  "isAvailable": true,
  "isOnSpecial": false,
  "category": "pantry",
  "image": "https://cdn1.woolworths.media/content/wowproductimages/large/6078131.jpg",
  "barcode": "9352042005033",
  "unit": "Each",
  "department": "jams & spreads",
  "aisle": "nut butter",
  "images": [
    "https://cdn0.woolworths.media/content/wowproductimages/large/6078131.jpg",
    "https://cdn0.woolworths.media/content/wowproductimages/large/6078131_2.jpg"
  ],
  "productDetails": "Bega Marshmallow Raspberry Peanut Spread is crunchy, delicious, and full of flavour. Made for a spoon, enjoy it as a snack, a topping, or your favourite after-hours treat. Introducing Bega Marshmallow Raspberry Flavoured Peanut Spread , designed to elevate your peanut spread experience to new heights. Brought to you by Australia's favourite peanut butter, this spread boasts a crunchy texture with a hit of delicious marshmallow raspberry flavour, making it perfect for a variety of uses. Whether you're eating it straight off the spoon, dipping it with your favourite snacks, or topping your dessert, Bega Marshmallow Raspberry Flavoured Peanut Spread adds the ultimate indulgent hit. Plus, enjoy the benefits of 5g of protein per serve, a source of vitamin B3 and magnesium, no artificial colours or flavours, and its gluten free. Bega flavoured peanut spreads are ideal for those who love the rich, nutty flavour of traditional peanut butter but are looking for extra sweetness. Try it today and discover a delicious twist on a classic. Crunchy texture Marshmallow Raspberry flavoured 5g protein per serve Source of Vitamin B3 and magnesium No artificial colours, flavours or preservatives Gluten Free",
  "countryOfOrigin": "Australia",
  "nutrition": [
    {
      "nutrient": "Carbohydrate",
      "perServing": "4.3g",
      "per100g": "17.1g"
    },
    {
      "nutrient": "Dietary Fibre",
      "perServing": "1.7g",
      "per100g": "6.7g"
    },
    {
      "nutrient": "Energy kJ",
      "perServing": "638.0kJ",
      "per100g": "2550.0kJ"
    },
    {
      "nutrient": "Fat Saturated",
      "perServing": "2.6g",
      "per100g": "10.2g"
    }
  ],
  "additionalData": [
    {
      "key": "ingredients",
      "value": "ROASTED PEANUTS(82%),SUGAR,VEGETABLE OIL(ANTIOXIDANT(307b)),FLAVOUR,SALT."
    },
    {
      "key": "allergenStatement",
      "value": [
        "Dairy Free",
        "Egg Free",
        "Fish Free",
        "Gluten Free",
        "Lactose Free",
        "No Artificial Colours or Flavours",
        "Soy Free",
        "Wheat Free"
      ]
    },
    {
      "key": "allergenContains",
      "value": [
        "Peanuts"
      ]
    },
    {
      "key": "dietaryStatement",
      "value": [
        "Gluten Free",
        "Source of Protein",
        "Vegan",
        "Vegetarian"
      ]
    },
    {
      "key": "storageInstructions",
      "value": "STORE IN A COOL, DRY PLACE."
    },
    {
      "key": "healthStarRating",
      "value": "3.5"
    }
  ]
}```

### 🐍 How to scrape Woolworths with Python, JavaScript or the API

Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("<username>/woolworths-products-scraper").call(run_input={
    "startUrls": [{"url": "https://www.woolworths.com.au/shop/browse/fruit-veg"}],
    "maxItems": 20,
    "cacheProjectName": "woolworths-daily",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
````

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('<username>/woolworths-products-scraper').call({
    startUrls: [{ url: 'https://www.woolworths.com.au/shop/browse/fruit-veg' }],
    maxItems: 20,
    cacheProjectName: 'woolworths-daily',
});

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

**cURL** — start a run and wait for the dataset:

```bash
curl -X POST "https://api.apify.com/v2/acts/<username>~woolworths-products-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.woolworths.com.au/shop/browse/fruit-veg"}],"maxItems":20,"cacheProjectName":"woolworths-daily"}'
```

### 💡 What you can use Woolworths product data for

- **Grocery price monitoring** — track shelf prices, was-prices and specials across Woolworths categories day by day.
- **Unit-price and shrinkflation analysis** — compare per-kg and per-100g pricing over time to spot package-size changes.
- **Competitor and own-brand benchmarking** — measure private-label versus branded pricing for FMCG category reviews.
- **Product catalogue building** — populate a price-comparison site or grocery app with names, images, barcodes and package sizes.
- **Nutrition and dietary research** — analyse health star ratings, ingredients, allergens and nutrition panels across a whole category.
- **Repricing and dashboard feeds** — push current Australian grocery pricing into BI tools, pricing engines or inventory systems.

This Woolworths product data is typically used by grocery and FMCG pricing analysts, e-commerce and price-comparison services, market researchers, and retail intelligence teams working in Australian grocery retail, consumer goods and price monitoring.

### ⚠️ Limitations & known issues

- **Prices are national, not store-level** — the actor reads the default catalogue and does not set a delivery postcode, so store-specific pricing and stock are not reflected.
- **Rate limiting** — Woolworths is protected by Akamai. Runs succeed without a proxy at modest volume; for larger runs enable a proxy and keep concurrency low.
- **Not every product has every field** — fresh produce typically has no ingredient list or nutrition panel. These fields are simply absent from `additionalData` rather than returned as empty values.
- **Ratings are not collected** — Woolworths serves customer reviews from a separate system, so review counts and star ratings are not part of the output.

### ❓ Frequently asked questions

#### Can I scrape Woolworths legally?

This actor only collects data that is already publicly visible on Woolworths category and product pages — it does not log in, add items to a cart, or access account-only areas such as order history or personalised pricing. Scraping publicly available data is generally considered lawful (see *hiQ Labs v. LinkedIn* as precedent). You remain responsible for complying with Woolworths' Terms of Service and any applicable laws.

#### How do I avoid re-scraping the same Woolworths products every run?

Set a **cache project name** in the input. The actor stores the product URLs it has already collected under that name and skips them on every later run using the same name, so a scheduled job only returns products it has not seen before. Leave the field empty to scrape everything each time.

#### Does this scraper get nutrition and ingredient data?

Yes. Each product is enriched with its full detail record, which includes per-serving and per-100g nutrition panels, ingredients, allergen statements, dietary claims, health star rating, storage instructions and country of origin, where Woolworths publishes them.

#### How many products can I scrape from one Woolworths category?

There is no hard cap — `maxItems` limits results **per start URL**, and the scraper paginates through the category until that limit is reached. Set a high value to take a whole category, or a low one for a quick test run.

#### Do I need a proxy to scrape woolworths.com.au?

Not for small and medium runs — proxies are disabled by default and Woolworths responded reliably without one in testing, which keeps costs down. For large or frequent runs, enable Apify datacenter proxies first, and Australian residential proxies only if datacenter requests start getting blocked.

#### How do I scrape Woolworths with Python?

Install the Apify client with `pip install apify-client`, then call the actor with your API token and a Woolworths category URL, as shown in the Python example above. The dataset can be iterated directly or exported to CSV, Excel or JSON.

#### Can I run this Woolworths scraper on a schedule?

Yes. Use [Apify Schedules](https://docs.apify.com/platform/schedules) to run the actor hourly, daily or weekly. Combined with the `cacheProjectName` input, a scheduled run will skip products already collected and return only new ones — the cheapest way to keep an Australian grocery price dataset current.

#### What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the **Output** tab or through the Apify API.

### 🔗 Other actors you may find useful

More scrapers from **[ActorFlow](https://apify.com/confidential_gnat)** on the Apify Store — all public actors covering e-commerce, property, news and research data:

- 🛒 **[Tokopedia Product Scraper — Deduplication Ability](https://apify.com/confidential_gnat/tokopedia-products-scraper)** — Scrape Tokopedia product data (title, shop, price in IDR, stock, category and images) from any keyword listing or product URL. Like this Woolworths scraper, it never re-scrapes the same product twice across runs.
- 🏷️ **[Carousell Products Scraper](https://apify.com/confidential_gnat/carousell-products-scraper)** — Scrape Carousell.sg product listings for prices, seller ratings, deal methods and more. Export clean JSON/CSV data from any category, search or listing URL.
- 🏠 **[Spotahome Property Scraper — Deduplication Ability](https://apify.com/confidential_gnat/spotahome-property-scraper)** — Scrape Spotahome rental listings across Europe: price, full address, coordinates, bedrooms, amenities, rating and images, with automatic duplicate removal and exact per-URL item limits.
- 📰 **[Sydney Morning Herald (SMH) News Scraper](https://apify.com/confidential_gnat/smh-news-scraper)** — Scrape Australian news from smh.com.au: headline, author, publish date, section, keywords, images and full public article text, with a paywall flag.
- 🧴 **[INCIDecoder Scraper](https://apify.com/confidential_gnat/incidecoder-scraper)** — Scrape skincare product pages for full ingredient lists, key and other ingredient groupings by function, per-ingredient ratings and detailed explanations — a good companion when you need deeper ingredient data than a retailer publishes.

### 💬 Support & contact

If you encounter any issues, have a feature request, or need a different Australian retailer scraped, please raise an issue from the actor's **Issues** tab: [open an issue](https://apify.com/confidential_gnat/woolworths-products-scraper/issues/open).

You can also browse all **[All ActorFlow actors on the Apify Store](https://apify.com/confidential_gnat)**.

# Actor input Schema

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

Woolworths category browse URLs, e.g. https://www.woolworths.com.au/shop/browse/fruit-veg.

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

Maximum number of products to scrape for each start URL.

## `scrapeWholeSite` (type: `boolean`):

Ignore Start URLs and crawl the main Woolworths category browse pages instead.

## `cacheProjectName` (type: `string`):

Optional. When set, products already scraped under this project name in a previous run are skipped instead of being scraped again.

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

Woolworths is protected by Akamai. It responds without a proxy in testing, but for larger runs enable datacenter proxies first, and Australian residential only if datacenter still fails.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.woolworths.com.au/shop/browse/fruit-veg"
    }
  ],
  "maxItems": 5,
  "scrapeWholeSite": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://www.woolworths.com.au/shop/browse/fruit-veg"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("confidential_gnat/woolworths-products-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 = { "startUrls": [{ "url": "https://www.woolworths.com.au/shop/browse/fruit-veg" }] }

# Run the Actor and wait for it to finish
run = client.actor("confidential_gnat/woolworths-products-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 '{
  "startUrls": [
    {
      "url": "https://www.woolworths.com.au/shop/browse/fruit-veg"
    }
  ]
}' |
apify call confidential_gnat/woolworths-products-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,confidential_gnat/woolworths-products-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/AMDZmfVlsZ9jQ9lvQ/builds/OesEsbWWRP6faRWhM/openapi.json
