{
  "data": {
    "id": "nzIpuoawuuggFBZGd",
    "actId": "MCDfkGMZMsTofr18A",
    "userId": "NL4ThgItAwaoBlffQ",
    "startedAt": "2026-11-08T13:00:53.977Z",
    "finishedAt": "2026-11-08T13:01:01.721Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 7498,
      "runTimeSecs": 7.498,
      "computeUnits": 0.00833111111111111,
      "imageSizeBytes": 319031296
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "zifX0mkAFMHe8CatY",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"IKEA Scraper Input\",\n  \"description\": \"Scrape IKEA products by search query, product IDs, URLs, or category. Supports 50+ countries and multiple languages.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"How to find products.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byProductIds\",\n        \"byUrls\",\n        \"byCategory\"\n      ],\n      \"enumTitles\": [\n        \"Search by keyword\",\n        \"Lookup by product ID\",\n        \"Fetch from product URLs\",\n        \"Browse a category\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Search query\",\n      \"type\": \"string\",\n      \"description\": \"Free-text query, e.g. `bookcase`, `BILLY`, `sofa`, `kallax`. Used by Search by keyword. Results are paged from IKEA's own listing API.\",\n      \"editor\": \"textfield\",\n      \"default\": \"bookcase\",\n      \"prefill\": \"bookcase\",\n      \"sectionCaption\": \"What to scrape\",\n      \"sectionDescription\": \"Choose one source: a keyword search, a list of article numbers, a list of product URLs, or a category.\"\n    },\n    \"productIds\": {\n      \"title\": \"Product IDs (mode=byProductIds)\",\n      \"type\": \"array\",\n      \"description\": \"IKEA article numbers (e.g. `20522046`). Dots, spaces, and full product URLs are accepted and normalized. One per line.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"productUrls\": {\n      \"title\": \"Product URLs (mode=byUrls)\",\n      \"type\": \"array\",\n      \"description\": \"Full IKEA product-page URLs, e.g. `https://www.ikea.com/us/en/p/billy-bookcase-white-20522046/`. One per line. The country and language in each URL are used for that product.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"category\": {\n      \"title\": \"Category\",\n      \"type\": \"string\",\n      \"description\": \"IKEA category key. Required by Browse a category; ignored by the other modes.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"products\",\n        \"fu001\",\n        \"fu002\",\n        \"fu003\",\n        \"fu004\",\n        \"st001\",\n        \"st002\",\n        \"st003\",\n        \"st004\",\n        \"st006\",\n        \"st007\",\n        \"bm001\",\n        \"bm002\",\n        \"bm003\",\n        \"de001\",\n        \"ka001\",\n        \"ka002\",\n        \"ka003\",\n        \"ba001\",\n        \"od001\",\n        \"tl001\",\n        \"tl002\",\n        \"tl004\",\n        \"li001\",\n        \"bc001\",\n        \"kt001\",\n        \"lc001\",\n        \"pp001\",\n        \"pt001\",\n        \"he001\",\n        \"hi001\",\n        \"hs001\",\n        \"sp001\"\n      ],\n      \"enumTitles\": [\n        \"(none)\",\n        \"All products\",\n        \"Furniture\",\n        \"Tables & chairs\",\n        \"Sofas & armchairs\",\n        \"Desks, chairs & workspaces\",\n        \"Storage & organization\",\n        \"Bookcases & shelving units\",\n        \"Display & storage cabinets\",\n        \"Dressers & storage drawers\",\n        \"Wall shelves & hooks\",\n        \"Storage containers & boxes\",\n        \"Beds & mattresses\",\n        \"Mattresses\",\n        \"Beds\",\n        \"Home decor\",\n        \"Kitchen appliances\",\n        \"Appliances\",\n        \"Kitchens\",\n        \"Bathroom\",\n        \"Outdoor\",\n        \"Home textiles\",\n        \"Window treatments\",\n        \"Bedding\",\n        \"Lighting\",\n        \"Baby & kids\",\n        \"Cookware & tableware\",\n        \"Laundry & cleaning\",\n        \"Plants & planters\",\n        \"Pet accessories\",\n        \"Home electronics\",\n        \"Home improvement\",\n        \"Smart home\",\n        \"Safety products\"\n      ],\n      \"default\": \"\"\n    },\n    \"country\": {\n      \"title\": \"Country / Storefront\",\n      \"type\": \"string\",\n      \"description\": \"IKEA market storefront (ISO 3166-1 alpha-2 code). Prices use this market's currency.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"us\",\n        \"gb\",\n        \"ie\",\n        \"ca\",\n        \"au\",\n        \"nz\",\n        \"in\",\n        \"sg\",\n        \"my\",\n        \"ph\",\n        \"th\",\n        \"hk\",\n        \"tw\",\n        \"jp\",\n        \"kr\",\n        \"cn\",\n        \"ae\",\n        \"sa\",\n        \"qa\",\n        \"kw\",\n        \"bh\",\n        \"jo\",\n        \"eg\",\n        \"ma\",\n        \"de\",\n        \"fr\",\n        \"it\",\n        \"es\",\n        \"pt\",\n        \"nl\",\n        \"be\",\n        \"at\",\n        \"ch\",\n        \"se\",\n        \"no\",\n        \"dk\",\n        \"fi\",\n        \"is\",\n        \"pl\",\n        \"cz\",\n        \"sk\",\n        \"hu\",\n        \"ro\",\n        \"hr\",\n        \"rs\",\n        \"bg\",\n        \"gr\",\n        \"ru\",\n        \"ua\",\n        \"tr\"\n      ],\n      \"enumTitles\": [\n        \"United States\",\n        \"United Kingdom\",\n        \"Ireland\",\n        \"Canada\",\n        \"Australia\",\n        \"New Zealand\",\n        \"India\",\n        \"Singapore\",\n        \"Malaysia\",\n        \"Philippines\",\n        \"Thailand\",\n        \"Hong Kong\",\n        \"Taiwan\",\n        \"Japan\",\n        \"South Korea\",\n        \"China\",\n        \"United Arab Emirates\",\n        \"Saudi Arabia\",\n        \"Qatar\",\n        \"Kuwait\",\n        \"Bahrain\",\n        \"Jordan\",\n        \"Egypt\",\n        \"Morocco\",\n        \"Germany\",\n        \"France\",\n        \"Italy\",\n        \"Spain\",\n        \"Portugal\",\n        \"Netherlands\",\n        \"Belgium\",\n        \"Austria\",\n        \"Switzerland\",\n        \"Sweden\",\n        \"Norway\",\n        \"Denmark\",\n        \"Finland\",\n        \"Iceland\",\n        \"Poland\",\n        \"Czech Republic\",\n        \"Slovakia\",\n        \"Hungary\",\n        \"Romania\",\n        \"Croatia\",\n        \"Serbia\",\n        \"Bulgaria\",\n        \"Greece\",\n        \"Russia\",\n        \"Ukraine\",\n        \"Turkey\"\n      ],\n      \"default\": \"us\",\n      \"prefill\": \"us\",\n      \"sectionCaption\": \"Storefront\",\n      \"sectionDescription\": \"Every price, stock status, and URL is returned for this market.\"\n    },\n    \"language\": {\n      \"title\": \"Language\",\n      \"type\": \"string\",\n      \"description\": \"Storefront language; falls back to the country's primary language when the combination is not served.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"en\",\n        \"de\",\n        \"fr\",\n        \"it\",\n        \"es\",\n        \"pt\",\n        \"nl\",\n        \"sv\",\n        \"no\",\n        \"da\",\n        \"fi\",\n        \"is\",\n        \"pl\",\n        \"cs\",\n        \"sk\",\n        \"hu\",\n        \"ro\",\n        \"hr\",\n        \"sr\",\n        \"bg\",\n        \"el\",\n        \"ru\",\n        \"uk\",\n        \"tr\",\n        \"ja\",\n        \"ko\",\n        \"zh\",\n        \"th\",\n        \"ms\",\n        \"ar\"\n      ],\n      \"enumTitles\": [\n        \"English\",\n        \"German (Deutsch)\",\n        \"French (Français)\",\n        \"Italian (Italiano)\",\n        \"Spanish (Español)\",\n        \"Portuguese (Português)\",\n        \"Dutch (Nederlands)\",\n        \"Swedish (Svenska)\",\n        \"Norwegian (Norsk)\",\n        \"Danish (Dansk)\",\n        \"Finnish (Suomi)\",\n        \"Icelandic (Íslenska)\",\n        \"Polish (Polski)\",\n        \"Czech (Čeština)\",\n        \"Slovak (Slovenčina)\",\n        \"Hungarian (Magyar)\",\n        \"Romanian (Română)\",\n        \"Croatian (Hrvatski)\",\n        \"Serbian (Srpski)\",\n        \"Bulgarian (Български)\",\n        \"Greek (Ελληνικά)\",\n        \"Russian (Русский)\",\n        \"Ukrainian (Українська)\",\n        \"Turkish (Türkçe)\",\n        \"Japanese (日本語)\",\n        \"Korean (한국어)\",\n        \"Chinese (中文)\",\n        \"Thai (ไทย)\",\n        \"Malay (Bahasa Melayu)\",\n        \"Arabic (العربية)\"\n      ],\n      \"default\": \"en\",\n      \"prefill\": \"en\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Sort order applied by IKEA's listing API.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"RELEVANCE\",\n        \"PRICE_LOW_TO_HIGH\",\n        \"PRICE_HIGH_TO_LOW\",\n        \"NEWEST\",\n        \"RATING\",\n        \"MOST_POPULAR\",\n        \"NAME_ASCENDING\",\n        \"WIDTH\",\n        \"HEIGHT\",\n        \"DEPTH\"\n      ],\n      \"enumTitles\": [\n        \"Best match (relevance)\",\n        \"Price: low to high\",\n        \"Price: high to low\",\n        \"Newest first\",\n        \"Customer rating\",\n        \"Most popular\",\n        \"Name (A → Z)\",\n        \"Width\",\n        \"Height\",\n        \"Depth\"\n      ],\n      \"default\": \"RELEVANCE\",\n      \"prefill\": \"RELEVANCE\",\n      \"sectionCaption\": \"Filters and sorting\",\n      \"sectionDescription\": \"All filters run locally on listing data. Price and rating filters skip products without that value; in-stock and keyword filters pass products that lack the field.\"\n    },\n    \"minPrice\": {\n      \"title\": \"Minimum price\",\n      \"type\": \"integer\",\n      \"description\": \"Exclude products priced below this value (storefront currency). Products with no listed price are excluded when this filter is set.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"maxPrice\": {\n      \"title\": \"Maximum price\",\n      \"type\": \"integer\",\n      \"description\": \"Exclude products priced above this value (storefront currency). Products with no listed price are excluded when this filter is set.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 100000\n    },\n    \"minRating\": {\n      \"title\": \"Minimum customer rating\",\n      \"type\": \"integer\",\n      \"description\": \"Exclude products rated below this value (0-5). Unrated products are kept.\",\n      \"editor\": \"number\",\n      \"minimum\": 0,\n      \"maximum\": 5\n    },\n    \"inStockOnly\": {\n      \"title\": \"In-stock only\",\n      \"type\": \"boolean\",\n      \"description\": \"Exclude products that IKEA marks as out of stock or not sellable online.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"containsKeyword\": {\n      \"title\": \"Contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep products whose name, description, color, material, or category path contains this text (case-insensitive).\",\n      \"editor\": \"textfield\"\n    },\n    \"enrichFromPDP\": {\n      \"title\": \"Enrich from product page\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each product's own page for designer, materials, care instructions, package measurements, availability, and a full description. Slower and more request-heavy.\",\n      \"default\": false,\n      \"prefill\": false,\n      \"sectionCaption\": \"Detail enrichment\",\n      \"sectionDescription\": \"Optional second pass over each product page. It adds designer, materials, care instructions, package measurements, availability, and a richer description.\"\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of product records to emit (1-10000). Paged requests stop at IKEA's own result count.\",\n      \"minimum\": 1,\n      \"maximum\": 10000,\n      \"default\": 50,\n      \"prefill\": 3,\n      \"sectionCaption\": \"Output\"\n    },\n    \"onSaleOnly\": {\n      \"title\": \"On sale only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only products with a previous price or a discount on the selected storefront.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"onlyNew\": {\n      \"title\": \"New arrivals only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only products IKEA tags as new.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"onlyBestsellers\": {\n      \"title\": \"Best sellers only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only products IKEA tags as best sellers.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"onlyLastChance\": {\n      \"title\": \"Last chance only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only products IKEA tags as last chance (being phased out).\",\n      \"default\": false,\n      \"prefill\": false\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# IKEA Multi-Country Product Catalog Extractor\n\nIKEA sells through separate storefronts in more than 50 markets, and each storefront has its own currency, language, catalog, and stock signals. This actor reads those storefronts directly and returns one clean record per article: price history, rating, measurements, category path, images, color variants, and — on demand — designer, materials, care instructions, package dimensions, and live availability.\n\nNo API key, no login, and no proxy configuration are needed.\n\n## What it does\n\n- **Search by keyword** on any supported storefront, with real offset paging through every result IKEA reports.\n- **Browse a category** — all products, furniture, sofas, storage, lighting, kitchen, outdoor, and 25+ other departments, also fully paged.\n- **Look up article numbers** directly, including dotted and spaced article formats.\n- **Fetch product URLs** in any locale; the URL's country and language are respected.\n- **Enrich from product pages** to add designer, materials, care instructions, package measurements, availability, and a full description.\n- **Filter** by price range, minimum rating, in-stock status, sale status, merchandising badges, or a keyword, and **sort** by relevance, price, rating, popularity, name, or dimensions.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byCategory`, `byProductIds`, or `byUrls` |\n| `searchQuery` | string | `bookcase` | Keyword for `search` mode, e.g. `sofa`, `BILLY`, `kallax` |\n| `productIds` | array | `[]` | IKEA article numbers for `byProductIds`, e.g. `20522046` |\n| `productUrls` | array | `[]` | Full product-page URLs for `byUrls`, one per line |\n| `category` | string | – | Category key for `byCategory` |\n| `country` | string | `us` | Market storefront, ISO 3166-1 alpha-2 (50 markets) |\n| `language` | string | `en` | Storefront language; falls back to the market's primary language |\n| `sortBy` | string | `RELEVANCE` | `PRICE_LOW_TO_HIGH`, `PRICE_HIGH_TO_LOW`, `NEWEST`, `RATING`, `MOST_POPULAR`, `NAME_ASCENDING`, `WIDTH`, `HEIGHT`, or `DEPTH` |\n| `minPrice` | integer | – | Exclude products priced below this value in the storefront currency |\n| `maxPrice` | integer | – | Exclude products priced above this value in the storefront currency |\n| `minRating` | integer | – | Exclude products rated below 0-5; unrated products are kept |\n| `inStockOnly` | boolean | `false` | Exclude products marked out of stock or not sellable online |\n| `containsKeyword` | string | – | Keep only records whose text fields contain this substring |\n| `onSaleOnly` | boolean | `false` | Keep only products with a previous price or a discount |\n| `onlyNew` | boolean | `false` | Keep only products IKEA tags as new |\n| `onlyBestsellers` | boolean | `false` | Keep only products IKEA tags as best sellers |\n| `onlyLastChance` | boolean | `false` | Keep only products IKEA tags as last chance |\n| `enrichFromPDP` | boolean | `false` | Fetch each product page for designer, materials, care, packages, and availability |\n| `maxItems` | integer | `50` | Maximum records to emit, 1-10,000 |\n\n## Output per product\n\n- `productId`, `sku`, `mpn` — IKEA article identifiers\n- `name`, `typeName`, `itemType`, `filterClass` — product naming and classification\n- `description` — full product-page description when the page is fetched\n- `brand` — always `IKEA`\n- `color`, `colors` — selected finish and every advertised finish\n- `designer` — product designer from the product page\n- `materials` — list of `{ part, material }` entries\n- `careInstructions` — list of care steps\n- `goodToKnow` — list of `{ name, text }` assembly and usage notes\n- `measurementsText` — compact measurement summary from listings\n- `measurements` — structured `height`, `width`, `depth`, and `weight` when published\n- `packageMeasurements` — list of package `width`, `length`, `height`, `weight`, and `volume`\n- `numberOfPackages`, `minOrderQuantity`\n- `price` — `{ amount, currency }` plus `previousAmount`, `discountPercentage`, `discountAmount`, and `previousPriceLabel` when on sale\n- `rating`, `ratingCount`\n- `availability` — online-sellable flag, delivery stock status, click-and-collect eligibility, discontinued/sold-out flags, and check time\n- `stockStatus` — schema.org-style stock label from the product page\n- `onlineSellable` — listing-level sellability flag\n- `mainImageUrl`, `imageUrls`, `mainImageAlt`, `contextualImageUrl`, `contextualImageAlt`\n- `productUrl`\n- `categoryPath` — breadcrumb names from the listing or product page\n- `badges`, `badgeText`, `lastChanceText`, `isBestseller`, `isNewArrival`, `isLastChance`\n- `quickFacts` — type/value facts such as material or firmness\n- `variants` — every color/size sibling with its own ID, URL, image, rating, price, and sellability\n- `variantCount`\n- `country`, `language` — storefront used for this record\n- `scrapedAt` — ISO 8601 collection time\n\nEmpty fields are omitted at every depth; the actor never sends `null`, `\"\"`, `[]`, or `{}`.\n\n## Examples\n\nSearch with a price window and rating floor:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"sofa\",\n  \"country\": \"us\",\n  \"minPrice\": 300,\n  \"maxPrice\": 900,\n  \"minRating\": 4,\n  \"maxItems\": 100\n}\n```\n\nBrowse a category with full detail enrichment:\n\n```json\n{\n  \"mode\": \"byCategory\",\n  \"category\": \"st002\",\n  \"country\": \"de\",\n  \"language\": \"de\",\n  \"sortBy\": \"PRICE_LOW_TO_HIGH\",\n  \"enrichFromPDP\": true,\n  \"maxItems\": 50\n}\n```\n\nFetch exact articles:\n\n```json\n{\n  \"mode\": \"byProductIds\",\n  \"productIds\": [\"20522046\", \"00263850\"],\n  \"country\": \"gb\"\n}\n```\n\nFetch product URLs in their own locales:\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"productUrls\": [\n    \"https://www.ikea.com/us/en/p/billy-bookcase-white-20522046/\",\n    \"https://www.ikea.com/de/de/p/billy-buecherregal-braun-nussbaumnachbildung-50508652/\"\n  ]\n}\n```\n\n## Pagination and limits\n\nSearch and category results are requested page by page from IKEA's own listing API, using its `window.offset` cursor and `metadata.max` total. Requests stop when `maxItems` is reached, IKEA's own count is exhausted, or a page comes back empty. The practical ceiling is what the storefront reports for your query; broad terms such as `storage` can exceed 2,000 products and full catalog browse (`category: \"products\"`) exceeds 9,000 in the US. Results are de-duplicated by article number.\n\n## Legacy inputs\n\nSaved tasks that still send older key names keep working: `query`/`search` → `searchQuery`, `ids`/`productId`/`articleNumbers` → `productIds`, `urls`/`startUrls` → `productUrls`, `categoryId`/`categorySlug` → `category`, `countryCode` → `country`, `languageCode` → `language`, `sort`/`sortOrder` → `sortBy`, `limit`/`maxResults` → `maxItems`, `inStock`/`availableOnly` → `inStockOnly`, `keyword` → `containsKeyword`, and `enrich`/`fetchDetails` → `enrichFromPDP`. These aliases are mapped in code and are not visible schema fields.\n\n## FAQ\n\n**Do I need a proxy or an API key?** No. The actor calls IKEA's public storefront endpoints directly. If IKEA ever rate-limits a run, the actor retries with backoff.\n\n**Why do some records have more fields?** Designer, materials, care instructions, package measurements, and availability come from a product's own page. They are always present for `byProductIds` and `byUrls`, and added to `search`/`byCategory` results only when `enrichFromPDP` is true.\n\n**Why is availability missing on listing records?** Listing pages do not publish it. Enable `enrichFromPDP` to fetch each product page and fill it.\n\n**What happens with an invalid language?** It falls back to the selected market's primary language rather than failing.\n\n**Why did my category key stop working?** IKEA occasionally renames taxonomy keys. The schema lists the current top-level keys; a full `/cat/` URL is also accepted and normalized.\n\n**Why are prices different across countries?** Each record uses its storefront's local price and currency. Run the same products across countries to compare.\n\n**Is this affiliated with IKEA?** No. It reads publicly accessible storefront data and is not affiliated with, endorsed by, or sponsored by Inter IKEA Systems or any IKEA franchisee.\n\n## Limitations\n\n- Search returns only what a storefront reports for that query; there is no cross-market search in one request.\n- A few category keys are market-specific; the schema lists keys that are valid in the major markets.\n- `enrichFromPDP` adds one request per product, so very large enriched runs take longer.\n- Availability is a point-in-time snapshot from the product page; it is not a live inventory reservation.\n\n## Data source\n\nIKEA's public storefront listing API and product pages. The actor is designed for catalog research, price monitoring, and assortment analysis.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "ikea-multi-country-product-catalog-extractor",
      "title": "IKEA Multi-Country Product Catalog Extractor",
      "description": "Search, browse, or fetch IKEA products across 50+ country storefronts, with paged results, price history, stock availability, designer, materials, measurements, ratings, images, variants, and category breadcrumbs. No API key or proxy needed.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# IKEA Multi-Country Product Catalog Extractor\n\nIKEA sells through separate storefronts in more than 50 markets, and each storefront has its own currency, language, catalog, and stock signals. This actor reads those storefronts directly and returns one clean record per article: price history, rating, measurements, category path, images, color variants, and — on demand — designer, materials, care instructions, package dimensions, and live availability.\n\nNo API key, no login, and no proxy configuration are needed.\n\n## What it does\n\n- **Search by keyword** on any supported storefront, with real offset paging through every result IKEA reports.\n- **Browse a category** — all products, furniture, sofas, storage, lighting, kitchen, outdoor, and 25+ other departments, also fully paged.\n- **Look up article numbers** directly, including dotted and spaced article formats.\n- **Fetch product URLs** in any locale; the URL's country and language are respected.\n- **Enrich from product pages** to add designer, materials, care instructions, package measurements, availability, and a full description.\n- **Filter** by price range, minimum rating, in-stock status, sale status, merchandising badges, or a keyword, and **sort** by relevance, price, rating, popularity, name, or dimensions.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `search` | `search`, `byCategory`, `byProductIds`, or `byUrls` |\n| `searchQuery` | string | `bookcase` | Keyword for `search` mode, e.g. `sofa`, `BILLY`, `kallax` |\n| `productIds` | array | `[]` | IKEA article numbers for `byProductIds`, e.g. `20522046` |\n| `productUrls` | array | `[]` | Full product-page URLs for `byUrls`, one per line |\n| `category` | string | – | Category key for `byCategory` |\n| `country` | string | `us` | Market storefront, ISO 3166-1 alpha-2 (50 markets) |\n| `language` | string | `en` | Storefront language; falls back to the market's primary language |\n| `sortBy` | string | `RELEVANCE` | `PRICE_LOW_TO_HIGH`, `PRICE_HIGH_TO_LOW`, `NEWEST`, `RATING`, `MOST_POPULAR`, `NAME_ASCENDING`, `WIDTH`, `HEIGHT`, or `DEPTH` |\n| `minPrice` | integer | – | Exclude products priced below this value in the storefront currency |\n| `maxPrice` | integer | – | Exclude products priced above this value in the storefront currency |\n| `minRating` | integer | – | Exclude products rated below 0-5; unrated products are kept |\n| `inStockOnly` | boolean | `false` | Exclude products marked out of stock or not sellable online |\n| `containsKeyword` | string | – | Keep only records whose text fields contain this substring |\n| `onSaleOnly` | boolean | `false` | Keep only products with a previous price or a discount |\n| `onlyNew` | boolean | `false` | Keep only products IKEA tags as new |\n| `onlyBestsellers` | boolean | `false` | Keep only products IKEA tags as best sellers |\n| `onlyLastChance` | boolean | `false` | Keep only products IKEA tags as last chance |\n| `enrichFromPDP` | boolean | `false` | Fetch each product page for designer, materials, care, packages, and availability |\n| `maxItems` | integer | `50` | Maximum records to emit, 1-10,000 |\n\n## Output per product\n\n- `productId`, `sku`, `mpn` — IKEA article identifiers\n- `name`, `typeName`, `itemType`, `filterClass` — product naming and classification\n- `description` — full product-page description when the page is fetched\n- `brand` — always `IKEA`\n- `color`, `colors` — selected finish and every advertised finish\n- `designer` — product designer from the product page\n- `materials` — list of `{ part, material }` entries\n- `careInstructions` — list of care steps\n- `goodToKnow` — list of `{ name, text }` assembly and usage notes\n- `measurementsText` — compact measurement summary from listings\n- `measurements` — structured `height`, `width`, `depth`, and `weight` when published\n- `packageMeasurements` — list of package `width`, `length`, `height`, `weight`, and `volume`\n- `numberOfPackages`, `minOrderQuantity`\n- `price` — `{ amount, currency }` plus `previousAmount`, `discountPercentage`, `discountAmount`, and `previousPriceLabel` when on sale\n- `rating`, `ratingCount`\n- `availability` — online-sellable flag, delivery stock status, click-and-collect eligibility, discontinued/sold-out flags, and check time\n- `stockStatus` — schema.org-style stock label from the product page\n- `onlineSellable` — listing-level sellability flag\n- `mainImageUrl`, `imageUrls`, `mainImageAlt`, `contextualImageUrl`, `contextualImageAlt`\n- `productUrl`\n- `categoryPath` — breadcrumb names from the listing or product page\n- `badges`, `badgeText`, `lastChanceText`, `isBestseller`, `isNewArrival`, `isLastChance`\n- `quickFacts` — type/value facts such as material or firmness\n- `variants` — every color/size sibling with its own ID, URL, image, rating, price, and sellability\n- `variantCount`\n- `country`, `language` — storefront used for this record\n- `scrapedAt` — ISO 8601 collection time\n\nEmpty fields are omitted at every depth; the actor never sends `null`, `\"\"`, `[]`, or `{}`.\n\n## Examples\n\nSearch with a price window and rating floor:\n\n```json\n{\n  \"mode\": \"search\",\n  \"searchQuery\": \"sofa\",\n  \"country\": \"us\",\n  \"minPrice\": 300,\n  \"maxPrice\": 900,\n  \"minRating\": 4,\n  \"maxItems\": 100\n}\n```\n\nBrowse a category with full detail enrichment:\n\n```json\n{\n  \"mode\": \"byCategory\",\n  \"category\": \"st002\",\n  \"country\": \"de\",\n  \"language\": \"de\",\n  \"sortBy\": \"PRICE_LOW_TO_HIGH\",\n  \"enrichFromPDP\": true,\n  \"maxItems\": 50\n}\n```\n\nFetch exact articles:\n\n```json\n{\n  \"mode\": \"byProductIds\",\n  \"productIds\": [\"20522046\", \"00263850\"],\n  \"country\": \"gb\"\n}\n```\n\nFetch product URLs in their own locales:\n\n```json\n{\n  \"mode\": \"byUrls\",\n  \"productUrls\": [\n    \"https://www.ikea.com/us/en/p/billy-bookcase-white-20522046/\",\n    \"https://www.ikea.com/de/de/p/billy-buecherregal-braun-nussbaumnachbildung-50508652/\"\n  ]\n}\n```\n\n## Pagination and limits\n\nSearch and category results are requested page by page from IKEA's own listing API, using its `window.offset` cursor and `metadata.max` total. Requests stop when `maxItems` is reached, IKEA's own count is exhausted, or a page comes back empty. The practical ceiling is what the storefront reports for your query; broad terms such as `storage` can exceed 2,000 products and full catalog browse (`category: \"products\"`) exceeds 9,000 in the US. Results are de-duplicated by article number.\n\n## Legacy inputs\n\nSaved tasks that still send older key names keep working: `query`/`search` → `searchQuery`, `ids`/`productId`/`articleNumbers` → `productIds`, `urls`/`startUrls` → `productUrls`, `categoryId`/`categorySlug` → `category`, `countryCode` → `country`, `languageCode` → `language`, `sort`/`sortOrder` → `sortBy`, `limit`/`maxResults` → `maxItems`, `inStock`/`availableOnly` → `inStockOnly`, `keyword` → `containsKeyword`, and `enrich`/`fetchDetails` → `enrichFromPDP`. These aliases are mapped in code and are not visible schema fields.\n\n## FAQ\n\n**Do I need a proxy or an API key?** No. The actor calls IKEA's public storefront endpoints directly. If IKEA ever rate-limits a run, the actor retries with backoff.\n\n**Why do some records have more fields?** Designer, materials, care instructions, package measurements, and availability come from a product's own page. They are always present for `byProductIds` and `byUrls`, and added to `search`/`byCategory` results only when `enrichFromPDP` is true.\n\n**Why is availability missing on listing records?** Listing pages do not publish it. Enable `enrichFromPDP` to fetch each product page and fill it.\n\n**What happens with an invalid language?** It falls back to the selected market's primary language rather than failing.\n\n**Why did my category key stop working?** IKEA occasionally renames taxonomy keys. The schema lists the current top-level keys; a full `/cat/` URL is also accepted and normalized.\n\n**Why are prices different across countries?** Each record uses its storefront's local price and currency. Run the same products across countries to compare.\n\n**Is this affiliated with IKEA?** No. It reads publicly accessible storefront data and is not affiliated with, endorsed by, or sponsored by Inter IKEA Systems or any IKEA franchisee.\n\n## Limitations\n\n- Search returns only what a storefront reports for that query; there is no cross-market search in one request.\n- A few category keys are market-specific; the schema lists keys that are valid in the major markets.\n- `enrichFromPDP` adds one request per product, so very large enriched runs take longer.\n- Availability is a point-in-time snapshot from the product page; it is not a live inventory reservation.\n\n## Data source\n\nIKEA's public storefront listing API and product pages. The actor is designed for catalog research, price monitoring, and assortment analysis.\n",
      "input": {
        "title": "IKEA Scraper Input",
        "description": "Scrape IKEA products by search query, product IDs, URLs, or category. Supports 50+ countries and multiple languages.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "How to find products.",
            "editor": "select",
            "enum": [
              "search",
              "byProductIds",
              "byUrls",
              "byCategory"
            ],
            "enumTitles": [
              "Search by keyword",
              "Lookup by product ID",
              "Fetch from product URLs",
              "Browse a category"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQuery": {
            "title": "Search query",
            "type": "string",
            "description": "Free-text query, e.g. `bookcase`, `BILLY`, `sofa`, `kallax`. Used by Search by keyword. Results are paged from IKEA's own listing API.",
            "editor": "textfield",
            "default": "bookcase",
            "prefill": "bookcase",
            "sectionCaption": "What to scrape",
            "sectionDescription": "Choose one source: a keyword search, a list of article numbers, a list of product URLs, or a category."
          },
          "productIds": {
            "title": "Product IDs (mode=byProductIds)",
            "type": "array",
            "description": "IKEA article numbers (e.g. `20522046`). Dots, spaces, and full product URLs are accepted and normalized. One per line.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "productUrls": {
            "title": "Product URLs (mode=byUrls)",
            "type": "array",
            "description": "Full IKEA product-page URLs, e.g. `https://www.ikea.com/us/en/p/billy-bookcase-white-20522046/`. One per line. The country and language in each URL are used for that product.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "category": {
            "title": "Category",
            "type": "string",
            "description": "IKEA category key. Required by Browse a category; ignored by the other modes.",
            "editor": "select",
            "enum": [
              "",
              "products",
              "fu001",
              "fu002",
              "fu003",
              "fu004",
              "st001",
              "st002",
              "st003",
              "st004",
              "st006",
              "st007",
              "bm001",
              "bm002",
              "bm003",
              "de001",
              "ka001",
              "ka002",
              "ka003",
              "ba001",
              "od001",
              "tl001",
              "tl002",
              "tl004",
              "li001",
              "bc001",
              "kt001",
              "lc001",
              "pp001",
              "pt001",
              "he001",
              "hi001",
              "hs001",
              "sp001"
            ],
            "enumTitles": [
              "(none)",
              "All products",
              "Furniture",
              "Tables & chairs",
              "Sofas & armchairs",
              "Desks, chairs & workspaces",
              "Storage & organization",
              "Bookcases & shelving units",
              "Display & storage cabinets",
              "Dressers & storage drawers",
              "Wall shelves & hooks",
              "Storage containers & boxes",
              "Beds & mattresses",
              "Mattresses",
              "Beds",
              "Home decor",
              "Kitchen appliances",
              "Appliances",
              "Kitchens",
              "Bathroom",
              "Outdoor",
              "Home textiles",
              "Window treatments",
              "Bedding",
              "Lighting",
              "Baby & kids",
              "Cookware & tableware",
              "Laundry & cleaning",
              "Plants & planters",
              "Pet accessories",
              "Home electronics",
              "Home improvement",
              "Smart home",
              "Safety products"
            ],
            "default": ""
          },
          "country": {
            "title": "Country / Storefront",
            "type": "string",
            "description": "IKEA market storefront (ISO 3166-1 alpha-2 code). Prices use this market's currency.",
            "editor": "select",
            "enum": [
              "us",
              "gb",
              "ie",
              "ca",
              "au",
              "nz",
              "in",
              "sg",
              "my",
              "ph",
              "th",
              "hk",
              "tw",
              "jp",
              "kr",
              "cn",
              "ae",
              "sa",
              "qa",
              "kw",
              "bh",
              "jo",
              "eg",
              "ma",
              "de",
              "fr",
              "it",
              "es",
              "pt",
              "nl",
              "be",
              "at",
              "ch",
              "se",
              "no",
              "dk",
              "fi",
              "is",
              "pl",
              "cz",
              "sk",
              "hu",
              "ro",
              "hr",
              "rs",
              "bg",
              "gr",
              "ru",
              "ua",
              "tr"
            ],
            "enumTitles": [
              "United States",
              "United Kingdom",
              "Ireland",
              "Canada",
              "Australia",
              "New Zealand",
              "India",
              "Singapore",
              "Malaysia",
              "Philippines",
              "Thailand",
              "Hong Kong",
              "Taiwan",
              "Japan",
              "South Korea",
              "China",
              "United Arab Emirates",
              "Saudi Arabia",
              "Qatar",
              "Kuwait",
              "Bahrain",
              "Jordan",
              "Egypt",
              "Morocco",
              "Germany",
              "France",
              "Italy",
              "Spain",
              "Portugal",
              "Netherlands",
              "Belgium",
              "Austria",
              "Switzerland",
              "Sweden",
              "Norway",
              "Denmark",
              "Finland",
              "Iceland",
              "Poland",
              "Czech Republic",
              "Slovakia",
              "Hungary",
              "Romania",
              "Croatia",
              "Serbia",
              "Bulgaria",
              "Greece",
              "Russia",
              "Ukraine",
              "Turkey"
            ],
            "default": "us",
            "prefill": "us",
            "sectionCaption": "Storefront",
            "sectionDescription": "Every price, stock status, and URL is returned for this market."
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Storefront language; falls back to the country's primary language when the combination is not served.",
            "editor": "select",
            "enum": [
              "en",
              "de",
              "fr",
              "it",
              "es",
              "pt",
              "nl",
              "sv",
              "no",
              "da",
              "fi",
              "is",
              "pl",
              "cs",
              "sk",
              "hu",
              "ro",
              "hr",
              "sr",
              "bg",
              "el",
              "ru",
              "uk",
              "tr",
              "ja",
              "ko",
              "zh",
              "th",
              "ms",
              "ar"
            ],
            "enumTitles": [
              "English",
              "German (Deutsch)",
              "French (Français)",
              "Italian (Italiano)",
              "Spanish (Español)",
              "Portuguese (Português)",
              "Dutch (Nederlands)",
              "Swedish (Svenska)",
              "Norwegian (Norsk)",
              "Danish (Dansk)",
              "Finnish (Suomi)",
              "Icelandic (Íslenska)",
              "Polish (Polski)",
              "Czech (Čeština)",
              "Slovak (Slovenčina)",
              "Hungarian (Magyar)",
              "Romanian (Română)",
              "Croatian (Hrvatski)",
              "Serbian (Srpski)",
              "Bulgarian (Български)",
              "Greek (Ελληνικά)",
              "Russian (Русский)",
              "Ukrainian (Українська)",
              "Turkish (Türkçe)",
              "Japanese (日本語)",
              "Korean (한국어)",
              "Chinese (中文)",
              "Thai (ไทย)",
              "Malay (Bahasa Melayu)",
              "Arabic (العربية)"
            ],
            "default": "en",
            "prefill": "en"
          },
          "sortBy": {
            "title": "Sort by",
            "type": "string",
            "description": "Sort order applied by IKEA's listing API.",
            "editor": "select",
            "enum": [
              "RELEVANCE",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "NEWEST",
              "RATING",
              "MOST_POPULAR",
              "NAME_ASCENDING",
              "WIDTH",
              "HEIGHT",
              "DEPTH"
            ],
            "enumTitles": [
              "Best match (relevance)",
              "Price: low to high",
              "Price: high to low",
              "Newest first",
              "Customer rating",
              "Most popular",
              "Name (A → Z)",
              "Width",
              "Height",
              "Depth"
            ],
            "default": "RELEVANCE",
            "prefill": "RELEVANCE",
            "sectionCaption": "Filters and sorting",
            "sectionDescription": "All filters run locally on listing data. Price and rating filters skip products without that value; in-stock and keyword filters pass products that lack the field."
          },
          "minPrice": {
            "title": "Minimum price",
            "type": "integer",
            "description": "Exclude products priced below this value (storefront currency). Products with no listed price are excluded when this filter is set.",
            "editor": "number",
            "minimum": 0,
            "maximum": 100000
          },
          "maxPrice": {
            "title": "Maximum price",
            "type": "integer",
            "description": "Exclude products priced above this value (storefront currency). Products with no listed price are excluded when this filter is set.",
            "editor": "number",
            "minimum": 0,
            "maximum": 100000
          },
          "minRating": {
            "title": "Minimum customer rating",
            "type": "integer",
            "description": "Exclude products rated below this value (0-5). Unrated products are kept.",
            "editor": "number",
            "minimum": 0,
            "maximum": 5
          },
          "inStockOnly": {
            "title": "In-stock only",
            "type": "boolean",
            "description": "Exclude products that IKEA marks as out of stock or not sellable online.",
            "default": false,
            "prefill": false
          },
          "containsKeyword": {
            "title": "Contains keyword",
            "type": "string",
            "description": "Only keep products whose name, description, color, material, or category path contains this text (case-insensitive).",
            "editor": "textfield"
          },
          "enrichFromPDP": {
            "title": "Enrich from product page",
            "type": "boolean",
            "description": "Fetch each product's own page for designer, materials, care instructions, package measurements, availability, and a full description. Slower and more request-heavy.",
            "default": false,
            "prefill": false,
            "sectionCaption": "Detail enrichment",
            "sectionDescription": "Optional second pass over each product page. It adds designer, materials, care instructions, package measurements, availability, and a richer description."
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Maximum number of product records to emit (1-10000). Paged requests stop at IKEA's own result count.",
            "minimum": 1,
            "maximum": 10000,
            "default": 50,
            "prefill": 3,
            "sectionCaption": "Output"
          },
          "onSaleOnly": {
            "title": "On sale only",
            "type": "boolean",
            "description": "Keep only products with a previous price or a discount on the selected storefront.",
            "default": false,
            "prefill": false
          },
          "onlyNew": {
            "title": "New arrivals only",
            "type": "boolean",
            "description": "Keep only products IKEA tags as new.",
            "default": false,
            "prefill": false
          },
          "onlyBestsellers": {
            "title": "Best sellers only",
            "type": "boolean",
            "description": "Keep only products IKEA tags as best sellers.",
            "default": false,
            "prefill": false
          },
          "onlyLastChance": {
            "title": "Last chance only",
            "type": "boolean",
            "description": "Keep only products IKEA tags as last chance (being phased out).",
            "default": false,
            "prefill": false
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "IKEA Multi-Country Product Catalog Extractor Output",
        "description": "Product records from any IKEA country storefront, including article number, name, type, price and previous price, rating, category breadcrumb, measurements, designer, materials, care instructions, package measurements, availability, variants, and images.",
        "properties": {
          "products": {
            "type": "string",
            "title": "IKEA products",
            "description": "Dataset containing every scraped IKEA product, one row per article.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "IKEA products",
              "transformation": {
                "fields": [
                  "productId",
                  "name",
                  "typeName",
                  "price",
                  "rating",
                  "ratingCount",
                  "availability",
                  "stockStatus",
                  "categoryPath",
                  "country",
                  "productUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 1800,
        "memoryMbytes": 1024
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "7a506e7485ba531a2cb2e409954467825d08893f4f11a67ba4d0f9896e722ee0",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.00833111111111111
    }
  }
}