{
  "openapi": "3.0.1",
  "info": {
    "title": "IKEA Products & Reviews Scraper",
    "description": "Scrape IKEA products across 50+ markets. Extract names, prices, currencies, ratings, full reviews, colours, dimensions, images, categories, variants, badges and store availability. Supports search, category, item-number and URL inputs with filters and sorting.",
    "version": "1.0",
    "x-build-id": "LGmveR2NIErZDlPma"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~ikea-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-ikea-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/abotapi~ikea-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-ikea-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/abotapi~ikea-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-ikea-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "search",
              "category",
              "productIds",
              "url"
            ],
            "type": "string",
            "description": "search = keywords + filters. category = category listing links or ids. productIds = exact item numbers. url = paste product, category or search links and walk them.",
            "default": "search"
          },
          "market": {
            "title": "Market and language",
            "enum": [
              "us/en",
              "au/en",
              "at/de",
              "bh/ar",
              "bh/en",
              "be/nl",
              "be/fr",
              "ca/en",
              "ca/fr",
              "cl/es",
              "cn/zh",
              "co/es",
              "hr/hr",
              "cz/cs",
              "dk/da",
              "eg/ar",
              "eg/en",
              "ee/et",
              "fi/fi",
              "fi/sv",
              "fr/fr",
              "de/de",
              "hu/hu",
              "in/en",
              "ie/en",
              "il/he",
              "it/it",
              "jp/en",
              "jp/ja",
              "jo/ar",
              "jo/en",
              "kw/ar",
              "kw/en",
              "lv/lv",
              "lt/lt",
              "my/en",
              "mx/es",
              "ma/ar",
              "ma/fr",
              "nl/nl",
              "no/no",
              "om/ar",
              "om/en",
              "ph/en",
              "pl/pl",
              "pt/pt",
              "qa/ar",
              "qa/en",
              "ro/ro",
              "sa/ar",
              "sa/en",
              "rs/sr",
              "sg/en",
              "sk/sk",
              "si/sl",
              "kr/ko",
              "es/es",
              "se/sv",
              "ch/fr",
              "ch/de",
              "ch/it",
              "th/en",
              "th/th",
              "ae/ar",
              "ae/en",
              "gb/en"
            ],
            "type": "string",
            "description": "The IKEA market (and its language) to scrape. Sets prices, currency, product range and the site language. In URL mode the market is taken from each link instead.",
            "default": "us/en"
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "One or more keywords to search, e.g. sofa, bookcase, desk lamp.",
            "items": {
              "type": "string"
            }
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RELEVANCE",
              "PRICE_LOW_TO_HIGH",
              "PRICE_HIGH_TO_LOW",
              "NEWEST",
              "RATING",
              "MOST_POPULAR",
              "NAME_ASCENDING",
              "WIDTH",
              "HEIGHT",
              "DEPTH"
            ],
            "type": "string",
            "description": "Order of results within each search or category listing, including a search or category link pasted in URL mode. Ignored for productIds and single product links.",
            "default": "RELEVANCE"
          },
          "categories": {
            "title": "Category links or ids",
            "type": "array",
            "description": "Category listing URLs (e.g. ikea.com/us/en/cat/bookcases-10382/) or bare numeric category ids.",
            "items": {
              "type": "string"
            }
          },
          "productIds": {
            "title": "Item numbers",
            "type": "array",
            "description": "Exact IKEA item numbers, e.g. 20522046. Each is resolved to a full product record.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "URLs",
            "type": "array",
            "description": "Paste product, category or search links from ikea.com. The market is read from each link. Every field in the Filters section below still applies here, to each search or category link you paste; a single product link returns that exact item and is not filtered.",
            "items": {
              "type": "string"
            }
          },
          "minPrice": {
            "title": "Min price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products at or above this price (market currency). Applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link."
          },
          "maxPrice": {
            "title": "Max price",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep products at or below this price (market currency). Applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link."
          },
          "minRating": {
            "title": "Min rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Only keep products with an average rating at or above this value (1-5). Applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link."
          },
          "inStockOnly": {
            "title": "In stock only",
            "type": "boolean",
            "description": "Keep only products currently sellable online. Applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link.",
            "default": false
          },
          "containsKeyword": {
            "title": "Contains keyword",
            "type": "string",
            "description": "Keep only products whose name, type or description contains this text. Applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link."
          },
          "specialsCategory": {
            "title": "Specials",
            "enum": [
              "none",
              "family_price",
              "last_chance"
            ],
            "type": "string",
            "description": "Show only products in one of IKEA's specials categories: IKEA Family price (loyalty-program markdown) or Last chance (clearance / limited-stock items). Off by default. Added as a facet to the same listing request, so it applies in search mode, category mode AND URL mode (to each search or category link you paste). Not applied to productIds or a single product link.",
            "default": "none"
          },
          "fetchDetails": {
            "title": "Fetch full details and reviews",
            "type": "boolean",
            "description": "Attach the full description and individual customer reviews (title, text, author, date, rating) to each product. Uses a residential connection.",
            "default": true
          },
          "maxReviews": {
            "title": "Max reviews per product",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Cap on individual reviews captured per product. 0 disables review text (ratings are still attached).",
            "default": 20
          },
          "includeAvailability": {
            "title": "Include store availability",
            "type": "boolean",
            "description": "Attach national and per-store stock (quantity, click & collect, home delivery) to each product.",
            "default": false
          },
          "maxItems": {
            "title": "Max products",
            "minimum": 0,
            "type": "integer",
            "description": "Total products to return across all inputs. This is the run cap.",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per input",
            "minimum": 0,
            "type": "integer",
            "description": "Optional safety cap on result pages walked per search or category. Leave empty or 0 for no page limit - the run stops at Max products.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Apify Proxy configuration. Keeping Apify Proxy enabled is recommended for reliable results. Attaching the full description and individual review texts works best on a residential connection and may be skipped on limited plans.",
            "default": {
              "useApifyProxy": true
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify then Settings then API & Integrations, then select it here. Notion gets a page-per-item export; other connectors get a best-effort write. Leave empty to skip. Supported: Notion, Linear, Airtable, Apify."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL or id of the Notion page under which item pages are created. Required only for the Notion export."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large crawl of products without returning or charging for products already collected there. Use this after an interrupted run, or when continuing a product catalogue pull in another run. For recurring monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those products returned (and billed). State is kept separately per market, mode (search/category/productIds/url), and filter setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the market, mode, search/category/productIds/urls and filter settings — different setups then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired products (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search/category/URLs — not when Max products capped it or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}