Add IKEA furniture data research report
This commit is contained in:
352
RESEARCH-ikea-data.md
Normal file
352
RESEARCH-ikea-data.md
Normal file
@@ -0,0 +1,352 @@
|
||||
# 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) |
|
||||
Reference in New Issue
Block a user