IKEA Price Watch Across Countries avatar

IKEA Price Watch Across Countries

Pricing

from $0.53 / 1,000 product scrapeds

Go to Apify Store
IKEA Price Watch Across Countries

IKEA Price Watch Across Countries

Search IKEA by keyword on any of 49 IKEA country sites and get one flat row per product: price in local currency, previous price, promotion label, rating, category, colour, article number, URL. Same article number across markets, so you can compare prices country by country.

Pricing

from $0.53 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Share

Search IKEA on any of 49 country sites for a keyword and get one flat row per product: the price in that country's currency, the previous price when IKEA shows a markdown, IKEA's promotion label, rating and review count, category, colours, the article number and the product link. IKEA uses the same 8-digit article number in every country, so running one query on gb/en, de/de, se/sv and us/en gives you the same product's price in four currencies, ready to join on item_no. Run it on a schedule and diff the dataset to get an IKEA price-drop watch.

No account, no API key, no login, no browser. One request returns the whole search, up to 1,000 products.

Input

FieldNotes
queryWhat you would type into IKEA's search box (desk, KALLAX, lamp). Required. Use the market's language for generic words (schreibtisch on a German site); a product name such as KALLAX works everywhere.
marketThe IKEA country site as country/language, from a list of 49 (default gb/en). Prices come back in that site's currency.
maxItemsProducts to read (default 100, 1 to 1,000), in IKEA's own relevance order.
proxyConfigurationApify proxy by default.

The 1,000 limit

IKEA serves at most 1,000 products per search and has no offset: start, page and token are all rejected with HTTP 400 "Unrecognized parameter", and a size above 1,000 is HTTP 400 "Size parameter cannot exceed 1000". A search that matches more (white matches 4,517 on gb/en) returns its first 1,000 only. The run log says how many products IKEA reported matching, so you know when you are looking at a slice; narrow the query (white desk) to see the rest.

Output

Prices are numbers in the market's currency (currency, read from each record).

FieldNotes
query, market, positionThe query and market searched, and the product's 1-based place in IKEA's result order.
item_noIKEA's 8-digit article number, as text, because it keeps leading zeros (00586096). The key for joining the same product across markets.
item_typeIKEA's record kind, verbatim: ART (article) or SPR (a product that groups variants).
name, type_nameThe brand name (LAGKAPTEN / ALEX) and what it is, in the market's language (Desk, Schreibtisch).
url, image_urlAbsolute product page on the market's own site and the main photo.
price, currencyThe price IKEA shows and its ISO code.
previous_priceThe struck-through price. Null when the product has no markdown, which is most of them (822 of 13,619 products, 6%, in a 48-market sweep), never 0.
previous_price_label, price_valid_from, price_valid_toIKEA's wording for the previous price (Previous price, Vorher) and the window it states, as ISO dates. Null when there is no previous price.
price_unitWhat the price buys when it is not one item (2 pack, 100 pack). Compare per-unit prices only after reading this.
price_tag, price_tag_textIKEA's promotion code (NEW_LOWER_PRICE, FAMILY_PRICE, TIME_RESTRICTED_OFFER, NEW_PRODUCT, DISCONTINUED_PRODUCT, LOWER_CURRENT_REGULAR_PRICE_IN_STORE) and its printed label in the market's language. Null when IKEA sends none.
rating, review_countStar rating out of 5 and the number of ratings. Null when IKEA has none (about 27% of products in the sweep), not 0.
badgeBest seller, Limited edition and the like, in the market's language.
last_chance, last_chance_text, online_sellableIKEA's own flags.
measurementsThe size line under the name (140x60 cm). Null when blank.
category, category_pathThe deepest category and the full path, top first.
colors, design_textColour names and the variant's finish text.
variant_count, min_order_quantity, energy_labelVariants IKEA groups under the product, the minimum order where one applies, and the EU energy class letter for lamps and appliances.

Honest nulls

A field IKEA did not send is null, never 0 or "". previous_price, rating, review_count, badge, price_unit, measurements, energy_label, min_order_quantity and the promotion fields are null when the source has nothing.

How previous_price is read

IKEA sends the struck-through price only as display text ("1,899" and ".00"), never as a number, and the thousands grouping varies by market (1,899, 1 943, 1.299). The actor reads the digits of the whole part plus the digits of the decimals, and checks the reading by applying it to the current price shown beside it and comparing with IKEA's numeric price. That matched on all 13,619 products of the sweep. If it ever disagrees, or the "previous" price is not above the current one, previous_price is null rather than a guess.

What the prices are

The search response gives one price per product. When it is labelled FAMILY_PRICE ("IKEA Family price") it is a member offer; the response does not say what a non-member pays, so read price_tag before treating the number as the shelf price. Search results carry no stock information (availability was empty on every one of 1,407 products checked), so this actor does not report stock.

Pricing

Pay per event:

  • $0.002 per run (actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing.
  • $0.000525 per product row written (product-scraped), i.e. $0.525 per 1,000 products.

How it fetches

It calls the JSON search API behind IKEA's own site (sik.search.blue.cdtapps.com/<country>/<language>/search-result-page), asking for size=<maxItems> in one request. Measured 2026-10-12: HTTP 200 from a plain connection and from an Apify datacenter exit held for 30 minutes, no key or cookie needed. A 1,000-product response is about 6 MB and came back in 1.6 s. A 403, 429 or 5xx is treated as a refusal: the actor rotates to a fresh address and retries. A 404 (a country/language pair IKEA has no site for) and a 400 are permanent and are not retried.

Things worth knowing, all measured:

  • Currencies per market. gb GBP, us USD, ca CAD, au AUD, nz NZD, ch CHF, se SEK, dk DKK, no NOK, pl PLN, cz CZK, hu HUF, ro RON, rs RSD, jp JPY, kr KRW, cn CNY, in INR, sg SGD, my MYR, th THB, ph PHP, sa SAR, ae AED, il ILS, mx MXN, cl CLP, co COP, and EUR in the euro-area countries (de, at, fr, be, nl, es, pt, it, ie, fi, sk, hr, si, lt, lv, ee).
  • Expect gaps when joining markets. The first 300 results for table on gb/en and de/de shared 97 article numbers. That mixes assortment with ranking (each side was cut at 300), so it shows gaps, not how many products a country lacks. Ask for maxItems 1000 on both sides to join more.
  • An empty query is refused. IKEA answers it with the whole catalogue (9,892 products on gb/en); the actor asks for a search term instead of billing for an accident.
  • Match counts differ by market and language. Search is run in the market's own language, so desk on gb/en matches 260 and schreibtisch on de/de 240.
  • Order is IKEA's relevance order. Join on item_no, not on position.
  • Markets not listed. bg/bg, gr/el, hk/en, tw/zh, id/id, tr/tr, za/en and fr/en answered HTTP 404 when probed; ua/uk answered 200 with no products.
  • Not offered. Sorting, filters, and paging past 1,000 are not inputs because the source does not accept them (see above).