IKEA Product Search Scraper avatar

IKEA Product Search Scraper

Pricing

from $0.82 / 1,000 product exporteds

Go to Apify Store
IKEA Product Search Scraper

IKEA Product Search Scraper

Export US English IKEA keyword search products with item numbers, names, product types, advertised prices, currency, product links and images for assortment and price snapshots.

Pricing

from $0.82 / 1,000 product exporteds

Rating

0.0

(0)

Developer

Automation Lab

Automation Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Export IKEA product search results for US furniture assortment and advertised-price snapshots. Enter a keyword such as billy, desk or chair and receive structured product records with item numbers, names, types, prices, currency and product/image links.

This independent tool is not affiliated with IKEA. It searches US English only. It does not check store stock, scrape reviews, or perform product-page enrichment.

Who is this for?

  • Retail analysts maintaining comparable furniture assortments.
  • Interior-design researchers collecting source-linked candidate products.
  • Data teams saving periodic search snapshots in spreadsheets or warehouses.

Why use this Actor?

Get a small, predictable catalog export without downloading product images or opening a browser. Stable item numbers make downstream joins easier, while query, market and timestamps explain each snapshot's context. Search products are deduplicated within each run.

Getting started

  1. Open the Input tab.
  2. Enter one search query, for example billy.
  3. Choose a maximum number of products.
  4. Run the Actor.
  5. Inspect Products in the Output tab or export the dataset as JSON, CSV or Excel.
{"query":"billy","maxItems":100}

Inputs and matching semantics

FieldBehavior
queryRequired string, 1–200 characters after trimming. Submitted to IKEA search.
maxItemsInteger 1–1000; default 100. Global limit of unique main search products saved in this run.

IKEA controls relevance, ranking, spelling correction and related matches. A phrase is not an exact whole-field, substring or whole-word filter. Review the returned names and types for your analysis. Whitespace at the ends is removed; query case is otherwise passed through.

Only these two fields are accepted. Country/language selection, URL inputs, multiple-query arrays and custom proxies are unsupported. Unknown fields fail validation rather than silently being ignored.

Coverage and result limits

The Actor requests a bounded window of at most 1000 ranked main products from the anonymous catalog JSON endpoint in one request. It does not paginate beyond that window or promise the entire IKEA catalog. A single source request can supply the whole supported window, avoiding repeated downloads of growing prefixes.

Duplicate item numbers are removed without fetching replacements. Additional color/size variants nested under a main search product are not expanded. Products that appear as separate main results remain eligible. Search result totals may change between runs.

maxItems: 0 does not mean unlimited; it is rejected. Source exhaustion can produce fewer than the requested number. A genuinely unmatched query completes with an empty dataset and a summary showing zero available matches.

Extracted fields

FieldMeaning
itemNumberSource item or combination identifier, stored as text.
nameProduct family name.
productTypeSource product type; null if unavailable.
priceAdvertised numeric catalog price; null if absent.
currencySource currency code; null if absent.
productUrlUS English IKEA product page.
imageUrlMain image link; null if absent. Image file is not downloaded.
queryTrimmed submitted query.
marketAlways us/en.
scrapedAtUTC extraction timestamp.

Prices are snapshots, not checkout quotes. Taxes, delivery, member eligibility, promotions and availability may differ at purchase time. There is no stock guarantee or historical price database.

Output example

A representative source product from the billy search:

{
"itemNumber":"20522046",
"name":"BILLY",
"productType":"Bookcase",
"price":79,
"currency":"USD",
"productUrl":"https://www.ikea.com/us/en/p/billy-bookcase-white-20522046/",
"imageUrl":"https://www.ikea.com/us/en/images/products/billy-bookcase-white__1590272_pe1038911_s5.jpg",
"query":"billy",
"market":"us/en",
"scrapedAt":"2026-10-25T07:00:00.000Z"
}

The SUMMARY key-value record reports actually persisted products (saved), source total, request attempts, market and whether output is truncated relative to the source total. billingLimited is true when the SDK saves fewer products than the attempted batch because of the remaining billing allowance. No uncharged replacement products are written. The summary is not separately charged.

Platform billing or runtime limits can reduce the requested window, including to zero products. A terminated run may have only partial output and no final summary; check its status and dataset rather than assuming maxItems were saved.

How much does it cost to export IKEA search products?

Pay-per-event pricing consists of a $0.0005 start fee plus a charge for each saved product. The start fee also applies to valid searches with no matches. Invalid input is rejected before this fee. Failed requests and duplicate products do not incur product-event charges.

Apify spending tierPer product
FREE$0.001564
BRONZE$0.00136
SILVER$0.0010608
GOLD / PLATINUM / DIAMOND$0.000816

At BRONZE, 10 products cost 0.0141 USD and 100 cost 0.1365 USD, including the start event. These are Actor event-charge examples, not claims about unrelated platform subscriptions or third-party services. Platform billing remains authoritative.

Integrations and repeated snapshots

Use Apify schedules to run the same query periodically, then send datasets to Google Sheets, a database or your ETL pipeline through Apify integrations, webhooks or the API. Join snapshots on itemNumber and market, retain scrapedAt, and compare prices downstream.

The Actor does not calculate diffs, send alerts, remember previous runs or guarantee historical completeness. Keep separate snapshots yourself. Search ordering and assortment can change, so a missing record does not establish a discontinued product.

API usage

Start once with your Apify token stored securely in an environment variable:

curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"query":"billy","maxItems":100}' \
'https://api.apify.com/v2/acts/automation-lab~ikea-product-search-scraper/runs'

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/ikea-product-search-scraper')
.call({ query: 'billy', maxItems: 100 });
if (run.status !== 'SUCCEEDED') throw new Error(run.status);
const { items } = await client.dataset(run.defaultDatasetId).listItems({ limit: 100 });
console.log(items);

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/ikea-product-search-scraper').call(
run_input={'query': 'billy', 'maxItems': 100})
if run['status'] != 'SUCCEEDED':
raise RuntimeError(run['status'])
print(client.dataset(run['defaultDatasetId']).list_items(limit=100).items)

MCP usage

Configure a stable Actor-specific subset:

claude mcp add --transport http apify \
'https://mcp.apify.com?tools=automation-lab/ikea-product-search-scraper'

For Claude Desktop, Cursor and VS Code clients using JSON configuration:

{"mcpServers":{"apify":{"url":"https://mcp.apify.com?tools=automation-lab/ikea-product-search-scraper"}}}

Authenticate through your client's supported Apify authorization flow. Discover actual tool names and arguments using scoped tools/list. Actor selection also adds run and storage helpers; it is not exactly one tool.

Example prompts for MCP usage: “Search IKEA US English for billy, maximum 20 products, then show item numbers, names and advertised prices.”

For an authorized invocation, start once and retain the returned run ID and storage IDs. IDs are metadata, not result rows. call-actor waits at most 45 seconds; if nonterminal, check that same run with get-actor-run, using bounded 2/4/8-second backoff capped at 10 seconds and a 120-second total deadline. On timeout, recover the known run instead of restarting it; report pending at the deadline. Failed-run rows are partial, not a complete successful export.

After success, use get-dataset-items with explicit offset, limit and fields. A practical consumer budget is pages of 20 source rows, at most 100 rows and 64 KiB of serialized UTF-8 content admitted to model context, whichever comes first. Enforce byte limits host-side before model injection; if your client cannot intercept oversized responses, do not claim a hard byte bound. Track source offsets, disclose omitted/partial rows and give a continuation offset. Keep full exports outside model context.

Failures and troubleshooting

Transient network errors, HTTP 429 and 5xx receive at most three total attempts with bounded backoff. Other HTTP errors, non-JSON content and incompatible response structures fail the run; a blocked response is never reported as a successful empty search. No automatic paid proxy fallback is enabled.

If a run fails after writing products, those rows are partial. Check the log and run status before consuming them as a complete snapshot. Validation problems require correcting the input, not rerunning unchanged data.

Legality and privacy

Use the public catalog responsibly and comply with applicable laws, website terms and intellectual-property rights. Product images remain linked to their source and are not downloaded. This tool does not grant rights to republish IKEA content.

Failed operations send sanitized diagnostic input, exceptions and Actor/build/run IDs to our private GlitchTip service for repair. Secret fields and URL query strings are removed; reports are retained for 30 days. Avoid putting confidential information in search terms. Runtime extraction uses no AI models or paid third-party data providers. Dataset and log retention follow your Apify storage settings; delete run storage when no longer needed. For help, use the Actor's Apify Issues tab.

FAQ

Can I check a specific store's stock? No. This is keyword catalog discovery, not an availability service.

Why did a related product appear? IKEA determines relevance and can return related matches. There is no additional exact-name filter.

Can I select another market? No. Only US English is implemented and tested.

Does the Actor compare prices automatically? No. Schedule repeated runs and compare saved snapshots downstream.

Why are fewer than maxItems returned? The source may have fewer matches or duplicate main products; platform billing/runtime limits can also reduce output. Check SUMMARY.billingLimited and run status. No variant expansion or replacement fetch is performed.

For broader comparison, use other source-specific Actors from automation-lab. This Actor deliberately stands alone: other retailers have different identifiers, prices and fulfillment terms, so their coverage is not combined here.