# 🚀 IGA Shop Scraper · 12,500 Free Products/Month (`omkar-cloud/iga-shop-scraper`) Actor

IGA Shop Scraper gets you IGA Australia grocery data ⚡ fast, 🎯 100% accurate and 🔍 ridiculously detailed — per-store prices, specials, nutrition & aisle from any search or category. 💰 $0.40 per 1,000 products, no start fee. Scrape your first 12,500 products free every month 🚀

- **URL**: https://apify.com/omkar-cloud/iga-shop-scraper.md
- **Developed by:** [Omkar Cloud](https://apify.com/omkar-cloud) (community)
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 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.

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

## IGA Shop Scraper

IGA Shop Scraper by Omkar Cloud gets you ⚡ fast, 🎯 accurate, 🔍 detailed IGA Australia data.

Products, per-store prices, was-prices, specials with their end dates, unit prices, nutrition, ingredients and the exact aisle a product sits in — from any igashop.com.au search, category, the whole catalogue or the specials feed, at any IGA store. Track grocery prices, catch every half-price deal, compare stores, or build your own catalogue, and successfully complete your project.

**$0.40 per 1,000 products.** And with Apify's free plan you get $5 of credit every month, so your first **12,500 products each month are free**.

This is an excellent Actor made by Omkar Cloud, which is Rated Excellent — [4.7 based on 37 reviews on Trustpilot](https://www.trustpilot.com/review/omkar.cloud).

👉 [**Try IGA Shop Scraper free**](https://apify.com/omkar-cloud/iga-shop-scraper) — your first 12,500 products are Free.

### What can I get

- 🔍 **Search results** — any keyword across IGA's 13,000+ products, with brand and category filters and 5 sort orders
- 🗂️ **Whole categories & the whole catalogue** — every product of a category, or all 13 departments in one run
- 🔥 **Specials** — 3,000+ live deals with sale price, was-price, saving, % off and the date each deal ends
- 🏪 **Per-store prices** — IGA stores are independently owned, so price the same products at as many stores as you like
- 🥗 **Full details** — every image, ingredients, nutrition panels, allergens, country of origin and aisle / bay / shelf
- 🔁 **Only new or changed** — scheduled runs return just the products whose price, special or availability moved

### Why IGA Shop Scraper

Most other IGA scrapers fail you in one of four ways:

- 🗄️ **Inaccurate, cached, stale data** — last week's specials are useless
- 🧩 **Low-detail data** — a name and a price, never the full picture
- 💸 **Pay more to get the same data** — $0.50 to $3.50 per 1,000 rows elsewhere
- 🪦 **Works today, breaks next month** — nobody maintains it

IGA Shop Scraper gets you fresh, detailed data, is priced honestly, and actively maintained.

### What data you get

| Data | Fields |
|---|---|
| **Product** | `sku`, `name`, `brand`, `link`, `image`, `images`, `size`, `size_value`, `size_unit`, `description` |
| **Price** | `price`, `was_price`, `currency`, `saving`, `saving_percent`, `price_label`, `unit_price`, `unit_price_per`, `unit_price_text`, `sold_by` |
| **Special** | `is_on_special`, `special_price`, `special_label`, `special_starts_at`, `special_ends_at` |
| **Store** | `store_number`, `store_name`, `store_suburb`, `store_state`, `store_postcode`, `is_available` |
| **Category** | `category_id`, `category_name`, `category_slug`, `category_path`, `category_paths` |
| **Labels** | `country_of_origin`, `allergens_may_be_present`, `is_alcohol_restricted` |
| **Full details** (optional) | `images`, `ingredients`, `contains`, `nutrition` (every nutrient per 100 g and per serve), `servings_per_pack`, `serving_size`, `aisle`, `bay`, `shelf`, `aisle_section` |
| **Category tree** (optional) | `category_id`, `category_name`, `category_link`, `category_depth`, `category_parent_id`, `category_path`, `category_children_count` |
| **Monitoring** (optional) | `change_status` (NEW / UPDATED), `changed_fields` |

### Example: A Full IGA Product

```json
{
  "type": "product",
  "source": "search",
  "source_input": "tim tam",
  "store_number": "32600",
  "store_name": "Ashcroft's IGA Erskine Park",
  "store_state": "NSW",
  "sku": "308953",
  "name": "Arnott's Tim Tam Chocolate Original",
  "brand": "Arnott's",
  "link": "https://www.igashop.com.au/product/arnotts-tim-tam-chocolate-original-308953",
  "image": "https://cdn.metcash.media/image/upload/w_1500,h_1500,c_pad,b_auto/igashop/images/308953.jpg",
  "size": "200g",
  "price": 4.5,
  "was_price": 6,
  "currency": "AUD",
  "saving": 1.5,
  "saving_percent": 25,
  "is_on_special": true,
  "special_label": "25% Off",
  "special_starts_at": "2026-10-28",
  "special_ends_at": "2026-11-04",
  "unit_price_text": "$2.25/100g",
  "is_available": true,
  "country_of_origin": "Made in Australia",
  "allergens_may_be_present": "Gluten| Milk| Soy| Wheat",
  "ingredients": "Milk Chocolate (38%)(Sugar, Milk Solids, Cocoa Butter, Cocoa Mass, Vegetable Oil, Emulsifiers (Soy Lecithin, E476), Flavour), Wheat Flour, Sugar, Vegetable Oil (Contains Soy), Golden Syrup...",
  "nutrition": [
    { "basis": "Per 100g / Per 100mL", "nutrient": "Energy", "value": 2190, "unit": "kJ", "daily_value_percent": null, "is_trace": false },
    { "basis": "Per serve", "nutrient": "Total Sugars", "value": 8.4, "unit": "g", "daily_value_percent": null, "is_trace": false }
  ],
  "aisle": "1",
  "bay": "32",
  "shelf": "0",
  "aisle_section": "Biscuits and Cookies",
  "category_path": "Pantry > Snacks > Biscuits and Cookies"
}
```

*Trimmed for readability. Every row is flat — nested values are lifted to their own columns, so it exports cleanly to CSV and Excel.*

### Get Started with 12,500 Free Products

1. [Hit **Try for Free Button**](https://apify.com/omkar-cloud/iga-shop-scraper) — the input is pre-filled with the "tim tam" and "vegemite" search examples.
2. Enjoy your data 😎.

### Input examples

**Search by keyword, cheapest first, at the Bondi Beach store**

```json
{
    "searchQueries": ["tim tam", "vegemite"],
    "stores": ["bondi"],
    "sortBy": "price_asc",
    "maxResultsPerInput": 100
}
```

**Every half-price-or-better special, checked daily — only new or changed ones**

```json
{
    "scrapeSpecials": true,
    "minDiscountPercent": 50,
    "maxResultsPerInput": 10000,
    "onlyNewOrChanged": true,
    "monitorName": "daily-half-price"
}
```

**The whole catalogue at two stores, side by side**

```json
{
    "categories": ["all"],
    "stores": ["bondi", "3065"],
    "maxResultsPerInput": 20000
}
```

**Products and IGA Shop URLs with full details**

```json
{
    "products": ["308953", "https://www.igashop.com.au/product/vegemite-136453"],
    "startUrls": [
        "https://www.igashop.com.au/categories/confectionary/chocolate-blocks",
        "https://www.igashop.com.au/search?q=coffee"
    ],
    "includeDetails": true,
    "maxResultsPerInput": 50
}
```

| Input | What it does |
|---|---|
| `searchQueries` | Keywords to search, each searched separately |
| `categories` | Category slugs, identifiers, names or links — `all` for the whole catalogue |
| `scrapeSpecials` | Scrape every product on special |
| `includeCategoryTree` | Also push the store's category tree, one row per category |
| `products` | SKUs or product links — always fully detailed |
| `startUrls` | Any igashop.com.au product, category, search or specials link |
| `stores` | Store numbers, postcodes, suburbs, names or store links — every input runs at every store (default: store 32600) |
| `filterBrand`, `filterCategory`, `sortBy` | Brand and category filters and the sort order, applied by IGA to every listing |
| `minDiscountPercent`, `maxPrice`, `inStockOnly` | Drop products below a discount, above a price, or not available — dropped products are not billed |
| `maxResultsPerInput` | Cap per keyword, category, specials feed or URL at each store (default 100; a listing serves up to 10,000, `all` up to 20,000) |
| `includeDetails` | Also scrape every product in full (default off) |
| `onlyNewOrChanged`, `monitorName` | Push only products that are new or whose price, was-price, special flag or availability changed since the last run |

### Pricing

High value, Low price.

| What | Price | What you get |
|---|---|---|
| **Standard products** | **$0.40 per 1,000** | SKU, name, brand, size, price, was-price, saving, special and its dates, unit price, availability, origin, allergens, category, store, image and link |
| **Detailed products** | $1.00 per 1,000 | Everything above + every image, ingredients, nutrition panels, serving size and the aisle / bay / shelf |

No start fee — you pay only for the rows you get. A detailed product is the standard $0.0004 plus a $0.0006 details add-on. Products that show up in several of your inputs at the same store are billed only once per run, products your filters drop are not billed, and in Only New or Changed mode unchanged products are not billed at all.

**Cost examples**

| Run | Products | Cost |
|---|---|---|
| "tim tam" search | 10 | $0.004 |
| The Chocolate Blocks category, with full details | 69 | $0.07 |
| Every special at one store | 3,390 | $1.36 |
| The whole catalogue at one store | 13,768 | $5.51 |

Control your spend with **Max Products per Input**: 1,000 products ≈ $0.40.

💡 Apify's free plan includes $5 of credit every month — **12,500 free products, every month**.

👉 [**Scrape your first 12,500 products free**](https://apify.com/omkar-cloud/iga-shop-scraper)

### Run It from Code

Grab your API token from [Integrations Settings here](https://console.apify.com/settings/integrations) and replace `<YOUR_API_TOKEN>` below.

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

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("omkar-cloud/iga-shop-scraper").call(run_input={
    "searchQueries": ["tim tam"],
    "stores": ["bondi"],
    "maxResultsPerInput": 20,
})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["name"], product["price"], product["was_price"], product["store_name"])
```

**Node.js** (`npm install apify-client`)

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('omkar-cloud/iga-shop-scraper').call({
    scrapeSpecials: true,
    minDiscountPercent: 50,
    maxResultsPerInput: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### FAQs

#### Why do prices differ between stores?

IGA stores are independently owned, so each one sets its own prices, specials and range. Every row carries the store it was priced at (`store_number`, `store_name`, `store_state`). Put several stores in **Stores** to compare them side by side. Leave it empty for the site's own default store, 32600 (Ashcroft's IGA Erskine Park NSW).

#### How do I find a store?

Type a suburb (bondi), a postcode (3065), a store name or a store number into **Stores** — or paste the store's igashop.com.au link. For the full list of 540 stores with addresses, hours and coordinates, use [IGA Stores Scraper](https://apify.com/omkar-cloud/iga-stores-scraper).

#### What is a SKU?

IGA's product ID — the number at the end of every product link (`308953` in `.../arnotts-tim-tam-chocolate-original-308953`). Paste SKUs or full product links into **Products**.

#### How many products can one search or category return?

IGA serves the first 10,000 products of any listing. Enter `all` in **Categories** to scrape the whole catalogue: it runs department by department, so every department fits, and **Max Products per Input** goes up to 20,000.

#### How does Only New or Changed work?

Turn it on for scheduled runs. The first run returns every product as `NEW`. Every later run with the same input (or the same **Monitor Name**) returns only products that are new or whose price, was-price, special flag or availability changed — as `UPDATED`, with `changed_fields` listing what moved. Unchanged products are skipped and not billed.

#### Will I be charged twice for the same product?

No. A product that appears in several of your inputs at the same store is scraped and billed once per run. The same product at two stores is two rows — each with its own price.

#### What does "Full Product Details" add?

Every product image, the full ingredients list, the nutrition panel (every nutrient per 100 g and per serve), serving size, the allergens it contains, and the aisle, bay and shelf it sits on at that store. It adds $0.0006 per product. If the full details of a product can't be read, you keep the standard row and pay only the standard rate.

#### Does it give barcodes?

No. IGA does not publish barcodes on igashop.com.au.

#### Can I export to CSV or Excel?

Yes. Every row is flat, so the dataset exports to JSON, CSV, Excel or XML with one column per value.

#### Is this an official IGA product?

No. IGA Shop Scraper is an independent tool and is not affiliated with or endorsed by IGA or Metcash.

### Popular Actors by Omkar Cloud

- [**IGA Stores Scraper**](https://apify.com/omkar-cloud/iga-stores-scraper) — every IGA store: address, phone, email, hours, GPS, delivery & pickup
- [**Coles Scraper**](https://apify.com/omkar-cloud/coles-scraper) — Coles products, prices, specials & stock
- [**Woolworths Scraper**](https://apify.com/omkar-cloud/woolworths-scraper) — Woolworths products, prices & specials
- [**Website Email Contact Scraper**](https://apify.com/omkar-cloud/website-email-contact-scraper) — emails, phones & socials from any website

### 💬 Have Questions? We Have Answers.

[![Message Us on WhatsApp](https://raw.githubusercontent.com/omkarcloud/assets/master/images/whatsapp-us.png)](https://www.omkar.cloud/l/iga-shop-scraper-apify-whatsapp)
[![Ask Us on Email](https://raw.githubusercontent.com/omkarcloud/assets/master/images/ask-on-email.png)](mailto:happy.to.help@omkar.cloud?subject=Help%20with%20IGA%20Shop%20Scraper%20Actor\&body=I%20need%20help%20with%20using%20the%20IGA%20Shop%20Scraper%20Actor.)
You are important to us — just message us and we will solve your problem ✅ within 1 working day. 🩷 Pinky Promise 🤙!

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on igashop.com.au — each is searched separately. Rows carry `source_input` so you can tell keywords apart. Leave empty to scrape only categories, specials, products or URLs.

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

Categories to scrape in full — a slug (chocolate-blocks), an identifier (Chocolate_Blocks), a name, or an igashop.com.au category link. Enter `all` for the whole catalogue (scraped department by department).

## `scrapeSpecials` (type: `boolean`):

Also scrape every product on special at the store — sale price, was-price, saving, % off and the date the deal ends.

## `includeCategoryTree` (type: `boolean`):

Also push the store's full category tree — one row per category with its identifier, slug, link, depth, parent and path. Billed like a product row.

## `products` (type: `array`):

IGA SKUs (308953) or igashop.com.au product links. Always scraped with full details (billed at the detailed-product rate).

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

Any mix of igashop.com.au product, category, search (/search?q=…) and specials links.

## `stores` (type: `array`):

IGA stores to price at — a store number (14859), postcode (2026), suburb or store name (bondi), or an igashop.com.au store link. Leave empty for the site's own default store (32600, Ashcroft's IGA Erskine Park NSW).

## `filterBrand` (type: `string`):

Only products of this brand, spelled as IGA spells it (Arnott's, Cadbury).

## `filterCategory` (type: `string`):

Only products in this category, by its display name (Chocolate Bars, Biscuits and Cookies). Applies to searches and specials.

## `sortBy` (type: `string`):

Order of the products in every listing.

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

Only products at least this much off their was-price (50 = half price or better). Products it drops are not billed.

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

Only products priced at or below this many dollars. Products it drops are not billed.

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

Only products the store has available right now. Products it drops are not billed.

## `maxResultsPerInput` (type: `integer`):

Cap per keyword, category, specials feed or URL, at each store. A single listing returns up to 10,000 products; `all` (the whole catalogue) up to 20,000.

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

Also scrape every listing product in full: every image, ingredients, nutrition panels and the aisle / bay / shelf it sits on. Adds $0.0006 per product.

## `onlyNewOrChanged` (type: `boolean`):

For scheduled runs: push only products that are new, or whose price, was-price, special flag or availability changed since the last run with the same input. Unchanged products are not billed.

## `monitorName` (type: `string`):

Optional name for the Only New or Changed history, so you can change the input and keep it. Leave empty to tie the history to the exact input.

## Actor input object example

```json
{
  "searchQueries": [
    "tim tam",
    "vegemite"
  ],
  "categories": [
    "chocolate-blocks",
    "https://www.igashop.com.au/categories/pantry/snacks"
  ],
  "scrapeSpecials": false,
  "includeCategoryTree": false,
  "products": [
    "308953",
    "https://www.igashop.com.au/product/vegemite-136453"
  ],
  "startUrls": [
    "https://www.igashop.com.au/search?q=coffee",
    "https://www.igashop.com.au/categories/confectionary/chocolate-blocks"
  ],
  "stores": [
    "bondi",
    "3065"
  ],
  "filterBrand": "Cadbury",
  "filterCategory": "Chocolate Bars",
  "sortBy": "relevance",
  "inStockOnly": false,
  "maxResultsPerInput": 100,
  "includeDetails": false,
  "onlyNewOrChanged": false
}
```

# Actor output Schema

## `results` (type: `string`):

Every row with every field.

## `overview` (type: `string`):

Image, name, brand, size, price, was-price, % off, special end date, unit price and store of every product.

## `details` (type: `string`):

Ingredients, allergens, nutrition, origin and aisle / bay / shelf of detailed products.

## `categories` (type: `string`):

One row per category of the store's tree.

# 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 = {
    "searchQueries": [
        "tim tam",
        "vegemite"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("omkar-cloud/iga-shop-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 = { "searchQueries": [
        "tim tam",
        "vegemite",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("omkar-cloud/iga-shop-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 '{
  "searchQueries": [
    "tim tam",
    "vegemite"
  ]
}' |
apify call omkar-cloud/iga-shop-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,omkar-cloud/iga-shop-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/tmaJEoaoRAKskPykm/builds/LZeVNrlk42G957YaU/openapi.json
