# IKEA Product Scraper (`scraptivo/ikea-scraper`) Actor

Collects IKEA product data — names, prices, ratings, measurements, and materials — from search queries or IKEA URLs across any IKEA market. Optionally enriches each item with full product details and customer reviews.

- **URL**: https://apify.com/scraptivo/ikea-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Categories:** E-commerce, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.97 / 1,000 product scrapeds

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

**IKEA Product Scraper** collects product records from IKEA — names, prices, ratings, measurements, and materials — and turns them into structured data for price monitoring, competitor research, and catalog building. Enter a search term or an IKEA URL, choose a market, run the Actor, and export records to JSON, CSV, Excel, or your own integration. Use it to track prices, map product ranges, and analyze customer ratings across any IKEA country. Pay per event: $1 per 1,000 products, with optional details and reviews billed separately.

### What can you automate with IKEA Product Scraper?

- **Turn search terms into data** — type "shoe rack", "MALM", or "kallax" and get every matching product with no URLs required.
- **Collect full product data** — name, type, price, currency, rating, review count, measurements, design, colors, and category path.
- **Enrich with product details** — add description, benefits, materials, care instructions, assembly requirements, package sizes, and PDF manuals.
- **Collect customer reviews** — capture individual reviews with rating, text, verification status, and a rating breakdown.
- **Cover every IKEA market** — switch `countryCode` and `languageCode` to collect localized catalogs.
- **Export anywhere** — download clean, structured output as JSON, CSV, or Excel, or stream it through the Apify API.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Price-monitoring teams | Track IKEA pricing and promotions over time across markets |
| Competitor and range researchers | Map the full product assortment for a category or keyword |
| Catalog builders | Feed clean product data into a site, app, or product information system |
| Review analysts | Collect customer reviews and rating breakdowns at scale |

### What data can you collect from IKEA?

| Data group | Example fields | How it helps |
|---|---|---|
| Product identity | `itemNo`, `name`, `typeName`, `url`, `categoryPath` | Match and deduplicate products by their IKEA article number |
| Price & status | `price`, `formattedPrice`, `currency`, `onlineSellable`, `lastChance`, `isNew` | Spot price, availability, and discontinuation flags |
| Social proof | `rating`, `reviewCount` | Gauge popularity and customer sentiment at a glance |
| Details | `description`, `benefits`, `materials`, `careInstructions`, `detailedMeasurements` | Enrich listings with full product-page detail when enabled |
| Reviews | `reviews`, `reviewStatistics` | Capture review text and rating distribution when enabled |

*Detail and review fields are only returned when the matching input toggle is enabled.*

### How to use IKEA Product Scraper

1. Open the Actor on Apify.
2. Add a search query (for example "shoe rack") or paste an IKEA URL.
3. Set `countryCode` and `languageCode` for the market you need.
4. Toggle product details or reviews if you need deeper data.
5. Run the Actor and export the dataset to JSON, CSV, or Excel.

```json
{
    "searchQueries": ["shoe rack"],
    "countryCode": "de",
    "languageCode": "de",
    "maxItems": 10,
    "includeProductDetails": true,
    "includeReviews": true
}
```

### Example workflow

#### Track price changes for a set of IKEA products

1. Run a search or category query weekly for the products you track.
2. Keep records where `price` or `lastChance` changed since the previous run.
3. Send changed records to Google Sheets or a pricing dashboard.
4. Deduplicate using the stable `itemNo` value.

### Automate and integrate your results

- **Schedules** — run daily for price monitoring or weekly per category to capture new and discontinued products.
- **Webhooks** — trigger a webhook on run completion to update a database, spreadsheet, or notification pipeline automatically.
- **Integrations** — push results to Google Sheets, Make, Zapier, Slack, a CRM, or cloud storage, or call the Actor from the Apify API.
- **Deduplication** — within a run the Actor de-duplicates by `countryCode` + `itemNo`; deduplicate across runs on `itemNo`.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---|---:|---|
| `searchQueries` | array | one of \* | — | Product search terms, e.g. "shoe rack", "MALM" |
| `startUrls` | array | one of \* | — | IKEA search, category, or product URLs |
| `countryCode` | string | optional | de | IKEA country path, e.g. de, us, gb, fr, se |
| `languageCode` | string | optional | de | Site language path, e.g. de, en, fr, sv |
| `maxItems` | integer | optional | 10 | Maximum products to collect (0 = unlimited) |
| `includeProductDetails` | boolean | optional | false | Fetch descriptions, materials, measurements, manuals |
| `includeReviews` | boolean | optional | false | Fetch customer reviews per product |
| `maxReviews` | integer | optional | 10 | Max reviews per product when enabled (0 = all) |
| `detailConcurrency` | integer | optional | 5 | Parallel workers for details and reviews (1–15) |
| `proxyConfiguration` | object | optional | residential | Proxy settings for reliable IKEA access |

\* Provide at least one of `searchQueries` or `startUrls`.

#### How do I collect a specific country or language?

Set `countryCode` and `languageCode` to the two-letter codes used in IKEA URLs, for example `de`/`de`, `us`/`en`, `gb`/`en`, or `fr`/`fr`. IKEA URLs follow the pattern `ikea.com/{country}/{language}/`. For `startUrls`, the locale in the URL always overrides the country and language settings.

### Output example

```json
{
    "itemNo": "80624645",
    "name": "VASSKÄR",
    "typeName": "Schuhaufbewahrung",
    "url": "https://www.ikea.com/de/de/p/vasskaer-schuhaufbewahrung-bambus-80624645/",
    "imageUrl": "https://www.ikea.com/de/de/images/products/vasskaer-schuhaufbewahrung-bambus__1165482_pe890877_s5.jpg",
    "price": 14.99,
    "currency": "EUR",
    "formattedPrice": "14.99€",
    "measurements": "60 cm",
    "design": "Bambus",
    "colors": [{ "name": "beige", "id": "10003", "hex": "f4f3d7" }],
    "rating": 4.1,
    "reviewCount": 29,
    "onlineSellable": true,
    "lastChance": false,
    "categoryPath": [
        { "name": "Organizer & Ordnungshelfer", "key": "st007" },
        { "name": "Schuh- & Hutablagen", "key": "10454" }
    ],
    "countryCode": "de",
    "languageCode": "de",
    "description": "Für alle Schuhe, ob Sneaker, Boots, Sandalen oder High-Heels…",
    "materials": ["Bambus, klarer Acryllack"],
    "isAssemblyRequired": true,
    "reviews": [
        {
            "title": "Klasse!",
            "text": "Ein tolles Schuhregal, dass genau das tut, was es soll.",
            "rating": 5,
            "reviewerName": "Mathias",
            "verifiedReviewer": true
        }
    ]
}
```

### How much does it cost to scrape IKEA?

The Actor uses pay-per-event billing, so you pay only for the data you receive:

- **$1 per 1,000 products** — charged as a `dataset-item` event for every product saved to the dataset.
- **$1 per 1,000 product details** — charged as a `product-details` event, only when `includeProductDetails` is enabled.
- **$1 per 1,000 reviews** — charged as a `product-reviews` event per review, only when `includeReviews` is enabled.

A run also charges a one-time $0.00005 actor-start event. Apify plan discounts apply to every event: Bronze $0.99, Silver $0.98, and Gold $0.97 per 1,000.

### Reliability and responsible use

- **Proxy** — Apify Residential proxies are recommended for reliable access; the default configuration enables them.
- **Enrichment controls** — product details and reviews are only collected when their toggles are enabled, keeping listing-only runs faster and cheaper.
- **Conditional fields** — description, materials, measurements, and reviews are empty unless the matching toggle is on.
- **Public data** — the Actor collects publicly listed product and review information.
- **Lawful use** — you are responsible for using collected data in line with IKEA's terms and applicable laws.

### Frequently asked questions

#### Can I scrape a specific IKEA country or language?

Yes. Set `countryCode` and `languageCode` to the two-letter codes used in IKEA URLs, or provide `startUrls` with the locale embedded. Note that IKEA shows a different catalog per market, so a product may not exist in every country.

#### Can I collect customer reviews from IKEA?

Yes. Enable `includeReviews` to collect reviews for each product, and set `maxReviews` to control how many per product (default 10, `0` for all). Each review bills a separate event.

#### What counts as one result?

Each product saved to the dataset bills one `dataset-item` event. Enabling details adds a `product-details` event per product; enabling reviews adds a `product-reviews` event per review.

#### Why are some fields empty?

Description, materials, measurements, and reviews only appear when `includeProductDetails` or `includeReviews` is enabled. Some products also lack a rating or review count when IKEA does not publish them.

#### How do I avoid duplicate records?

Within a run, the Actor de-duplicates by `countryCode` + `itemNo`. Across separate runs, deduplicate on the stable `itemNo` before ingesting.

#### Do I need a proxy?

IKEA may block or geo-limit requests without one. Keep the default Apify Residential proxy enabled, and match the proxy country to the `countryCode` you are collecting.

### Related Scraptivo automations

- **[Amazon Product Scraper](https://apify.com/scraptivo/amazon-product-scraper)** — collect Amazon product data, prices, and seller details.
- **[Amazon Search Scraper](https://apify.com/scraptivo/amazon-scraper)** — extract Amazon search results by query.
- **[HomeDepot Scraper](https://apify.com/scraptivo/homedepot-scraper)** — extract HomeDepot product data by collection URL and ZIP code.
- **[Target.com Product Scraper](https://apify.com/scraptivo/target-scraper)** — collect Target products, prices, ratings, and reviews.
- **[Best Buy Product Scraper](https://apify.com/scraptivo/best-buy-scraper)** — collect Best Buy products, prices, savings, and availability.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, a sample URL, the required fields, and expected volume so we can assess the request.

# Actor input Schema

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

Product search terms to look up on IKEA (e.g. "shoe rack", "MALM", "kallax"). Primary input for AI agents — no URL required. Combined with Start URLs when both are set.

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

IKEA search, category, or product page URLs (e.g. https://www.ikea.com/de/de/search/?q=shoe%20rack, https://www.ikea.com/de/de/cat/kinder-bc003/, https://www.ikea.com/de/de/p/vasskaer-schuhaufbewahrung-bambus-80624645/). Locale in the URL overrides Country / Language for that seed.

## `countryCode` (type: `string`):

IKEA retail-unit / country path used for search queries (e.g. de, us, gb, fr, se). IKEA URLs look like ikea.com/{country}/{language}/.

## `languageCode` (type: `string`):

Site language path used for search queries (e.g. de, en, fr, sv).

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

Maximum number of products to scrape across all queries and URLs (0 = unlimited).

## `includeProductDetails` (type: `boolean`):

When enabled, fetch full product details for each item (description, materials, measurements, care instructions, manuals). Charged as the product-details event in addition to each dataset item.

## `includeReviews` (type: `boolean`):

When enabled, fetch customer reviews for each product. Charged as the product-reviews event once per review, in addition to each dataset item.

## `maxReviews` (type: `integer`):

Maximum number of reviews to collect per product when Include Product Reviews is enabled (0 = all available reviews).

## `detailConcurrency` (type: `integer`):

How many products to enrich in parallel when product details or reviews are enabled. Higher is faster; keep it modest to avoid blocks.

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

Proxy settings. Apify Residential proxies are recommended for reliable IKEA access.

## Actor input object example

```json
{
  "searchQueries": [
    "shoe rack"
  ],
  "startUrls": [
    {
      "url": "https://www.ikea.com/de/de/search/?q=shoe%20rack"
    }
  ],
  "countryCode": "de",
  "languageCode": "de",
  "maxItems": 10,
  "includeProductDetails": false,
  "includeReviews": false,
  "maxReviews": 10,
  "detailConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset containing scraped IKEA products

## `runStats` (type: `string`):

Aggregate scrape statistics for this run

# 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": [
        "shoe rack"
    ],
    "startUrls": [
        {
            "url": "https://www.ikea.com/de/de/search/?q=shoe%20rack"
        }
    ],
    "countryCode": "de",
    "languageCode": "de",
    "maxItems": 10,
    "maxReviews": 10,
    "detailConcurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/ikea-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": ["shoe rack"],
    "startUrls": [{ "url": "https://www.ikea.com/de/de/search/?q=shoe%20rack" }],
    "countryCode": "de",
    "languageCode": "de",
    "maxItems": 10,
    "maxReviews": 10,
    "detailConcurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/ikea-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": [
    "shoe rack"
  ],
  "startUrls": [
    {
      "url": "https://www.ikea.com/de/de/search/?q=shoe%20rack"
    }
  ],
  "countryCode": "de",
  "languageCode": "de",
  "maxItems": 10,
  "maxReviews": 10,
  "detailConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/ikea-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/ikea-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/bSPRFWBqN2P3c6RNc/builds/NQjoAezcmIxIE2JPH/openapi.json
