# IKEA Furniture Data Import — Research Report **Task:** t-05dd7 **Date:** 2026-02-07 **Researcher:** researcher role ## Executive Summary **There is no official public IKEA API for furniture data.** However, there are multiple viable paths to get IKEA product dimensions and 3D models into our room planner. The recommended approach is a **tiered strategy**: start with a curated hand-built catalog of common IKEA items using known dimensions, with optional GLB model loading for enhanced visuals later. --- ## 1. IKEA APIs (Official) ### IKEA Has No Public Developer API IKEA does not offer a public REST/GraphQL API for developers. There is no developer portal, no API keys, no official documentation. ### Undocumented Internal Endpoints IKEA's website uses internal APIs that have been partially reverse-engineered: | Endpoint | Purpose | Format | |----------|---------|--------| | `sik.search.blue.cdtapps.com/{country}/{lang}/search-result-page?q={query}&size=24&types=PRODUCT` | Product search | JSON | | `www.ikea.com/{country}/{lang}/products/{itemNo[5:]}/{itemNo}.json` | Product detail (PIP) | JSON | | `api.ingka.ikea.com/cia/availabilities/{country}/{lang}?itemNos={itemNo}` | Stock/availability | JSON | | `www.ikea.com/{region}/{country}/iows/catalog/availability/{itemNo}` | Legacy availability (deprecated Dec 2021) | XML | | `web-api.ikea.com/{country}/{lang}/rotera/data/exists/{itemNo}/` | 3D model existence check | JSON | | `web-api.ikea.com/{country}/{lang}/rotera/data/model/{itemNo}/` | 3D model metadata + CDN URL | JSON | The **Rotera API** is most relevant for us — it returns a `modelUrl` field pointing to the actual GLB file on IKEA's CDN. This is what the Blender IKEA Browser add-on uses internally. **IKEA Kreativ**: Their AI-powered room planner at `ikea.com/us/en/home-design/` uses AWS infrastructure (API Gateway at `ddh79d7xh5.execute-api.us-east-1.amazonaws.com`). No public API. **Status**: All endpoints are undocumented, unsupported, and may break at any time. Rate limiting and anti-bot measures exist. The IOWS endpoints are deprecated. **Sources**: https://sbmueller.github.io/posts/ikea/ | Postman workspace: https://www.postman.com/galactic-shuttle-566922/ikea/overview ### Archived Python Client **vrslev/ikea-api-client** (GitHub, 1k+ stars) — Python client for IKEA internal APIs supporting cart, search, stock, item info, and 3D models. **Archived October 2024** — no longer maintained. MIT license. - Supported: stock lookup, product search, item specs, 3D model retrieval (`RoteraItem` endpoint) - Install: `pip install ikea-api[httpx]` - **Not recommended** for new projects since archived **Source**: https://github.com/vrslev/ikea-api-client ### npm: ikea-availability-checker (Active) **Ephigenia/ikea-availability-checker** — Node.js package for checking IKEA stock across 40+ countries and 400+ stores. Actively maintained. ```bash npm install ikea-availability-checker # CLI: ikea-availability-checker stock --country us 30457903 ``` Not directly useful for dimensions/models but proves Node.js access to IKEA endpoints is feasible. **Source**: https://github.com/Ephigenia/ikea-availability-checker --- ## 2. Open Datasets with Dimensions ### Best: Hugging Face — IKEA US CommerceTXT (30,511 products) - **Records**: 30,511 products across 632 categories - **Fields**: Name, SKU, Price, Dimensions (Width/Height/Depth), Materials, Category, Images, URLs - **Format**: CommerceTXT v1.0.1 (text-based, parseable) + Parquet (56.5 MB) - **License**: CC0 1.0 (Public Domain) — fully usable - **Date**: July 15, 2025 - **Dimensions**: Yes, in the `@SPECS` section (e.g., `Width: 12", Height: 16"`) ```python from datasets import load_dataset dataset = load_dataset("tsazan/ikea-us-commercetxt") ``` **Source**: https://huggingface.co/datasets/tsazan/ikea-us-commercetxt ### Good: Kaggle — IKEA SA Furniture (2,962 items) - **Records**: 2,962 items - **Fields**: name, category, price, width (cm), height (cm), depth (cm), designer, description - **Format**: CSV - **License**: Kaggle dataset terms - **Date**: April 2020 (somewhat dated) - **Dimensions**: Yes — width, height, depth in centimeters **Source**: https://www.kaggle.com/datasets/ahmedkallam/ikea-sa-furniture-web-scraping ### Good: GitHub — IKEA Dataset (12,600+ items) - **Records**: 12,600+ images with furniture dimensions - **Fields**: Name, dimensions (width/length/height cm), material - **Format**: ZIP archives + Python scraping script - **Organization**: By room (bedroom, bathroom, kitchen, living room, etc.) - **Date**: January 2020 **Source**: https://github.com/valexande/IKEA-Dataset ### Reference: Dimensions.com — IKEA Collection - **Content**: Dozens of IKEA products with precise dimensions + technical drawings - **Formats**: DWG, SVG, JPG (2D) + 3DM, OBJ, SKP (3D models) - **Coverage**: KALLAX, HEMNES, BESTÅ, BEKANT, and many more series - **Dual units**: Both inches and centimeters - **Includes**: Weight capacities - **Note**: Good for manual reference but not easily machine-parseable without scraping **Source**: https://www.dimensions.com/collection/ikea-furniture --- ## 3. IKEA 3D Models ### Web-Sourced GLB Models (Best Path for Three.js) IKEA product pages with a "View in 3D" button serve simplified, Draco-compressed GLB (binary glTF) files. These are: - **Format**: GLB (binary glTF 2.0) — native Three.js format - **Quality**: "Lowest quality versions" — simplified from manufacturing models for web delivery - **Properties**: Scaled in metric, basic materials applied, KHR_Texture_Transform extension - **Compatibility**: Direct import into Three.js via `GLTFLoader` + `DRACOLoader` #### Tools to Download IKEA GLB Models | Tool | Type | Stars | Status | License | |------|------|-------|--------|---------| | [IKEA 3D Model Download Button](https://github.com/apinanaivot/IKEA-3D-Model-Download-Button) | Tampermonkey userscript | 941 | Active (Jan 2026) | — | | [IKEA 3D Model Batch Downloader](https://github.com/apinanaivot/IKEA-3d-model-batch-downloader) | Python (Selenium+BS4) | — | Active | GPL-3.0 | | [IKEA Browser for Blender](https://extensions.blender.org/add-ons/ikea-browser/) | Blender addon | 95k downloads | Active (v0.4.0, Oct 2025) | GPL-3.0 | | [Chrome Extension](https://chromewebstore.google.com/detail/ikea-3d-models-downloader/kihdhjecfjagoplfnnpdbbnhkjhnlfeg) | Chrome extension | — | Active | — | The **batch downloader** workflow: 1. Give it an IKEA category URL (e.g., `https://www.ikea.com/fi/fi/cat/chairs-fu002/`) 2. Scrapes product links → extracts 3D model URLs → downloads GLB files 3. Stores metadata in SQLite database 4. Deduplication built-in **Note**: Not all IKEA products have 3D models. Only items with the "View in 3D" button are available. ### Official IKEA 3D Assembly Dataset (GitHub) - **Source**: https://github.com/IKEA/IKEA3DAssemblyDataset - **Items**: Only 5 products (LACK, EKET, BEKVÄM, DALFRED) - **Formats**: GLB/glTF + OBJ + PDF assembly instructions - **License**: CC BY-NC-SA 4.0 — **non-commercial only, research purposes** - **Verdict**: Too few items and restrictive license. Not suitable for our use. ### Sweet Home 3D IKEA Libraries - **180 models**: https://3deshop.blogscopia.com/180-ikea-models-for-sweethome3d/ - **342 models (bundle)**: https://3deshop.blogscopia.com/ikea-bundle-342-models/ - **Format**: SH3F (Sweet Home 3D format) — would need conversion - **Quality**: Community-created, based on real IKEA products - **Note**: Format is proprietary to Sweet Home 3D, would require extraction/conversion ### Third-Party Model Sources - **Sketchfab**: Search "IKEA" — many free community models, various licenses - **TurboSquid**: Free IKEA models available - **Clara.io**: Some IKEA models - **Trimble 3D Warehouse**: IKEA models available (SketchUp format) --- ## 4. Web Scraping Feasibility ### Existing Scrapers | Project | Stack | Notes | |---------|-------|-------| | [IKEA Scraper](https://github.com/Abdelrahman-Hekal/IKEA_Scraper) | Python | Full scraper for ikea.com | | [ikea-webscraper](https://github.com/gamladz/ikea-webscraper) | Selenium | Product info extraction | | [IKEA-project](https://github.com/furkansenn/IKEA-project) | Selenium | Product scraping | | [ikea-scraper](https://github.com/bonzi/ikea-scraper) | — | IKEA data extraction | ### Technical Challenges - IKEA uses heavy client-side rendering (React/Next.js) requiring browser automation (Selenium) - Anti-bot protections: CAPTCHAs, rate limiting, IP blocking - Dimension data is embedded in product pages in varying formats - Product IDs are 8-digit numbers but URL structure varies by locale ### Legal Considerations - IKEA's Terms of Service prohibit automated scraping - IKEA actively protects trademarks and trade dress under US Trademark Act - For personal/non-commercial home planning use, tools like the Blender extension operate in a gray area - The HuggingFace CommerceTXT dataset (CC0) is the safest legal path for product data --- ## 5. Standard IKEA Dimensions Reference Manually verified dimensions for the most common IKEA product lines: ### Storage | Product | Width (cm) | Depth (cm) | Height (cm) | |---------|-----------|-----------|------------| | KALLAX 1×4 | 42 | 39 | 147 | | KALLAX 2×2 | 77 | 39 | 77 | | KALLAX 2×4 | 77 | 39 | 147 | | KALLAX 4×4 | 147 | 39 | 147 | | BILLY bookcase (standard) | 80 | 28 | 202 | | BILLY bookcase (narrow) | 40 | 28 | 202 | | BILLY bookcase (short) | 80 | 28 | 106 | | HEMNES 6-drawer dresser | 108 | 50 | 131 | | HEMNES 3-drawer dresser | 108 | 50 | 96 | | HEMNES bookcase | 90 | 37 | 197 | | BESTÅ TV bench | 120/180 | 42 | 38 | | MALM 6-drawer dresser | 80 | 48 | 123 | | MALM 4-drawer dresser | 80 | 48 | 100 | | PAX wardrobe (standard) | 100/150/200 | 58 | 201/236 | ### Tables | Product | Width (cm) | Depth (cm) | Height (cm) | |---------|-----------|-----------|------------| | LACK side table | 55 | 55 | 45 | | LACK coffee table | 90 | 55 | 45 | | LACK TV bench | 90 | 26 | 45 | | LISABO desk | 118 | 45 | 74 | | BEKANT desk (rect) | 120/140/160 | 80 | 65-85 | | LINNMON/ALEX desk | 150 | 75 | 73 | | MELLTORP dining table | 125 | 75 | 74 | | EKEDALEN ext. table | 120-180 | 80 | 75 | ### Seating | Product | Width (cm) | Depth (cm) | Height (cm) | |---------|-----------|-----------|------------| | POÄNG armchair | 68 | 82 | 100 | | STRANDMON wing chair | 82 | 96 | 101 | | KLIPPAN 2-seat sofa | 180 | 88 | 66 | | EKTORP 3-seat sofa | 218 | 88 | 88 | | KIVIK 3-seat sofa | 228 | 95 | 83 | | MARKUS office chair | 62 | 60 | 129-140 | ### Beds | Product | Width (cm) | Depth (cm) | Height (cm) | |---------|-----------|-----------|------------| | MALM bed (queen, 160) | 160 | 209 | 92 (headboard) | | MALM bed (king, 180) | 180 | 209 | 92 (headboard) | | MALM bed (single, 90) | 90 | 209 | 92 (headboard) | | HEMNES bed (queen) | 163 | 211 | 66 (headboard 112) | | KURA reversible bed | 99 | 209 | 116 | | SUNDVIK child bed | 80 | 167 | 83 | ### Kitchen | Product | Standard Width (cm) | Depth (cm) | Height (cm) | |---------|-----------|-----------|------------| | METOD base cabinet | 60/80 | 60 | 80 | | METOD wall cabinet | 60/80 | 37 | 60/80/100 | | METOD tall cabinet | 60 | 60 | 200/220 | | KNOXHULT base cabinet | 120/180 | 61 | 85 | | VADHOLMA kitchen island | 126 | 79 | 90 | --- ## 6. Recommendations for Our Project ### Recommended Approach: Tiered Strategy #### Tier 1: Curated IKEA Catalog (Immediate) Extend `data/furniture-catalog.json` with IKEA-specific items: - Add 30-50 most popular IKEA products with verified dimensions - Use our existing procedural mesh format (box geometry parts) - Add `ikeaId` field (8-digit product number) for future linking - Add `ikeaSeries` field (KALLAX, BILLY, MALM, etc.) - Add `ikeaUrl` field for reference **Schema extension**: ```json { "id": "ikea-kallax-2x4", "name": "KALLAX Regal 2×4", "ikeaId": "80275887", "ikeaSeries": "KALLAX", "ikeaUrl": "https://www.ikea.com/de/de/p/kallax-regal-weiss-80275887/", "category": "storage", "rooms": ["wohnzimmer", "arbeitszimmer", "kinderzimmer"], "dimensions": { "width": 0.77, "depth": 0.39, "height": 1.47 }, "variants": [ { "color": "white", "hex": "#ffffff" }, { "color": "black-brown", "hex": "#3c3028" }, { "color": "white-stained-oak", "hex": "#d4c4a8" } ], "mesh": { ... } } ``` **Effort**: ~2-3 hours to add 30 items manually from IKEA website **Risk**: None — uses verified public dimensions #### Tier 2: GLB Model Import (Enhancement) Add optional GLB model loading to the renderer: - Use Three.js `GLTFLoader` + `DRACOLoader` to load IKEA GLB files - Users download GLB files themselves (personal use) via browser extension - Store in local `models/` directory - Fall back to procedural mesh if GLB not available ```javascript // In catalog entry: { "id": "ikea-kallax-2x4", "model3d": "models/ikea/kallax-2x4.glb", // optional "mesh": { ... } // fallback procedural geometry } ``` **Effort**: ~4-6 hours for GLTFLoader integration **Risk**: Low — GLB loading is standard Three.js functionality #### Tier 3: Dataset Import Tool (Future) Build a converter that parses the HuggingFace CommerceTXT dataset: - Extract product dimensions from `@SPECS` section - Map categories to our catalog format - Auto-generate procedural meshes from dimensions - Run offline as a data pipeline **Effort**: ~1-2 days **Risk**: Medium — dimension parsing from free-text specs varies in reliability ### What NOT to Do 1. **Don't scrape IKEA live** — Legal risk, fragile, unnecessary when datasets exist 2. **Don't depend on undocumented APIs** — They change without notice 3. **Don't bundle IKEA 3D models** — Trademark/IP issues. Let users provide their own 4. **Don't use the IKEA 3D Assembly Dataset for the app** — License is NC-SA research only --- ## 7. Key Sources | Resource | URL | Best For | |----------|-----|----------| | HuggingFace IKEA US | https://huggingface.co/datasets/tsazan/ikea-us-commercetxt | Dimension data (CC0) | | Kaggle IKEA SA | https://www.kaggle.com/datasets/ahmedkallam/ikea-sa-furniture-web-scraping | Structured CSV with dims | | Dimensions.com IKEA | https://www.dimensions.com/collection/ikea-furniture | Reference dimensions + drawings | | 3D Batch Downloader | https://github.com/apinanaivot/IKEA-3d-model-batch-downloader | Downloading GLB models | | Blender IKEA Browser | https://extensions.blender.org/add-ons/ikea-browser/ | Model inspection/conversion | | IKEA API Blog | https://sbmueller.github.io/posts/ikea/ | Understanding IKEA endpoints | | Sweet Home 3D IKEA | https://3deshop.blogscopia.com/ikea-bundle-342-models/ | Pre-made 3D models (needs conversion) |