Files
house-design/RESEARCH-ikea-data.md

353 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) |