IKEA Price Watch Across Countries
Pricing
from $0.53 / 1,000 product scrapeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
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
| Field | Notes |
|---|---|
query | What 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. |
market | The IKEA country site as country/language, from a list of 49 (default gb/en). Prices come back in that site's currency. |
maxItems | Products to read (default 100, 1 to 1,000), in IKEA's own relevance order. |
proxyConfiguration | Apify 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).
| Field | Notes |
|---|---|
query, market, position | The query and market searched, and the product's 1-based place in IKEA's result order. |
item_no | IKEA's 8-digit article number, as text, because it keeps leading zeros (00586096). The key for joining the same product across markets. |
item_type | IKEA's record kind, verbatim: ART (article) or SPR (a product that groups variants). |
name, type_name | The brand name (LAGKAPTEN / ALEX) and what it is, in the market's language (Desk, Schreibtisch). |
url, image_url | Absolute product page on the market's own site and the main photo. |
price, currency | The price IKEA shows and its ISO code. |
previous_price | The 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_to | IKEA'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_unit | What 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_text | IKEA'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_count | Star rating out of 5 and the number of ratings. Null when IKEA has none (about 27% of products in the sweep), not 0. |
badge | Best seller, Limited edition and the like, in the market's language. |
last_chance, last_chance_text, online_sellable | IKEA's own flags. |
measurements | The size line under the name (140x60 cm). Null when blank. |
category, category_path | The deepest category and the full path, top first. |
colors, design_text | Colour names and the variant's finish text. |
variant_count, min_order_quantity, energy_label | Variants 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.
gbGBP,usUSD,caCAD,auAUD,nzNZD,chCHF,seSEK,dkDKK,noNOK,plPLN,czCZK,huHUF,roRON,rsRSD,jpJPY,krKRW,cnCNY,inINR,sgSGD,myMYR,thTHB,phPHP,saSAR,aeAED,ilILS,mxMXN,clCLP,coCOP, 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
tableongb/enandde/deshared 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 formaxItems1000 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
deskongb/enmatches 260 andschreibtischonde/de240. - Order is IKEA's relevance order. Join on
item_no, not onposition. - Markets not listed.
bg/bg,gr/el,hk/en,tw/zh,id/id,tr/tr,za/enandfr/enanswered HTTP 404 when probed;ua/ukanswered 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).