Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IKEA API

Real-time access to IKEA product data: 8,000+ products with full specifications, pricing, category trees, store locations, and availability across eight countries. Clean JSON over a normal REST API, so there is no scraping, no proxy rotation, and no HTML parsing to maintain.

Countries covered: US, Canada, UK, Germany, France, Italy, Sweden, Switzerland.

Built and maintained by Happy Endpoint. Not affiliated with, endorsed by, or connected to IKEA.


What you get

  • Product search by keyword or category
  • Filter metadata for both search modes, so you can build faceted UIs
  • Full product records with specifications and pricing
  • Category tree
  • Store locations
  • Country list, for switching regional catalogues
  • Real-time availability

Getting started

1. Get an API key

Subscribe on RapidAPI. There is a free tier: https://rapidapi.com/happyendpoint/api/ikea-api-pro

2. Make a request

curl "https://ikea-api-pro.p.rapidapi.com/product-search-by-keyword?keyword=desk&countryCode=us" \
  -H "x-rapidapi-host: ikea-api-pro.p.rapidapi.com" \
  -H "x-rapidapi-key: YOUR_RAPIDAPI_KEY"

Python

import os

import requests

HOST = "ikea-api-pro.p.rapidapi.com"
HEADERS = {
    "x-rapidapi-host": HOST,
    "x-rapidapi-key": os.environ["RAPIDAPI_KEY"],
}


def get(path, **params):
    r = requests.get(
        f"https://{HOST}{path}",
        params={k: v for k, v in params.items() if v is not None},
        headers=HEADERS,
        timeout=30,
    )
    r.raise_for_status()
    return r.json()


desks = get("/product-search-by-keyword", keyword="desk", countryCode="us")
countries = get("/countries")

JavaScript

const HOST = 'ikea-api-pro.p.rapidapi.com';

async function get(path, params = {}) {
  const url = new URL(`https://${HOST}${path}`);
  for (const [k, v] of Object.entries(params)) {
    if (v != null) url.searchParams.set(k, v);
  }

  const res = await fetch(url, {
    headers: {
      'x-rapidapi-host': HOST,
      'x-rapidapi-key': process.env.RAPIDAPI_KEY,
    },
  });
  if (!res.ok) throw new Error(`IKEA API ${res.status}`);
  return res.json();
}

const desks = await get('/product-search-by-keyword', { keyword: 'desk', countryCode: 'us' });

Endpoints

Base URL: https://ikea-api-pro.p.rapidapi.com

Product search

Endpoint Returns
GET /product-search-by-keyword Products matching a search term
GET /product-search-by-keyword-filters Available filters for a keyword search
GET /product-search-by-category Products within a category
GET /product-search-by-category-filters Available filters for a category search
GET /product-details Full record for a single product

Reference data

Endpoint Returns
GET /categories Category tree
GET /countries Supported countries and their codes
GET /stores Store locations
GET /health Service health

The two -filters endpoints matter more than they look. They return the facets available for a given search, which is what lets you build a filter sidebar that matches the real catalogue rather than a hardcoded guess.


Using this API from Claude, Cursor, or another MCP client

RapidAPI hosts an MCP server, so you can query this API from an AI assistant without writing any code:

{
  "mcpServers": {
    "IKEA": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://mcp.rapidapi.com",
        "--header",
        "x-api-host: ikea-api-pro.p.rapidapi.com",
        "--header",
        "x-api-key: YOUR_RAPIDAPI_KEY"
      ]
    }
  }
}
Client Config path
Claude Desktop (macOS) ~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows) %APPDATA%\Claude\claude_desktop_config.json
Cursor ~/.cursor/mcp.json
Claude Code .mcp.json in your project root

What people build with this

  • Furniture and home decor storefronts, including affiliate sites
  • Interior design tools: room planners, mood boards, virtual staging, AR apps
  • Price monitoring, including cross-country price comparison
  • Stock availability dashboards
  • Market research on assortment and category depth
  • Shopping assistants and recommendation engines

Cross-country price comparison is the use case people underestimate. The same product carries different prices across the eight supported countries, and /countries plus countryCode makes that comparison a couple of requests.


FAQ

Does IKEA have an official public API?

No. IKEA does not publish a public product API. This API is built and maintained by Happy Endpoint and is not affiliated with IKEA.

Is there a free tier?

Yes. RapidAPI hosts a free plan with a monthly request quota, enough to prototype against.

How is this different from scraping?

Scraping a retailer means maintaining selectors that break on every redesign, rotating proxies, handling bot challenges, and accepting that it may breach the site's terms. This is a REST API returning JSON with a stable contract.

Which countries are supported?

US, Canada, UK, Germany, France, Italy, Sweden, and Switzerland. Call /countries for the current list and the country codes to pass.

Can I compare prices between countries?

Yes. Query the same product with different countryCode values. Prices, availability, and sometimes the assortment itself differ by market.

How do I build a filter sidebar?

Use /product-search-by-keyword-filters or /product-search-by-category-filters. They return the facets that actually exist for that query, rather than making you hardcode them.

Can I get the full catalogue as a file rather than calling the API?

Yes. Happy Endpoint sells an IKEA US products dataset of 10,564 products across 933 categories as a one-off CSV. See happyendpoint.com/datasets or email happyendpointhq@gmail.com.


Related repos


About Happy Endpoint

Happy Endpoint builds and maintains real-time data APIs for property portals, retailers, and marketplaces. All APIs are available on RapidAPI with a free tier.

Licence

MIT. See LICENSE.

Releases

Packages

Contributors