Python client for Furnilytics furniture market datasets.
Project description
Furnilytics Python Library
A lightweight, production-ready Python wrapper for the Furnilytics REST API.
The client abstracts HTTP handling, authentication, rate-limiting, and error management, returning datasets as Pandas DataFrames for immediate analytical use.
Supports:
/datasetscatalog discovery/metadatainspection/data/{id}retrieval- Public and API-key protected datasets
Ideal for research automation, dashboards, and quantitative analysis pipelines.
Links
- API docs: https://www.furnilytics.com/platform/api/#api-python
- Data catalogue: https://www.furnilytics.com/platform/data-catalogue/
- API discovery: https://api.furnilytics.com/
- OpenAPI schema: https://api.furnilytics.com/openapi.json
- GitHub source: https://github.com/Furnilytics/Furnilytics_lib
- PyPI package: https://pypi.org/project/furnilytics/
Installation
pip install furnilytics
Authentication
Public datasets can be accessed without an API key.
Pro datasets require an API key via the X-API-Key header.
Option 1 — Environment Variable (recommended)
export FURNILYTICS_API_KEY="your_api_key"
On Windows PowerShell:
$env:FURNILYTICS_API_KEY="your_api_key"
Option 2 — Pass directly to Client
from furnilytics import Client
cli = Client(api_key="your_api_key")
Quick Start
from furnilytics import Client
cli = Client()
# API health
print(cli.health())
# List available datasets
datasets = cli.datasets()
print(datasets.head())
# List metadata
meta = cli.metadata()
print(meta.head())
# Get metadata for one dataset
info = cli.metadata_one("other/materials/eu_pb_price")
print(info["meta"])
# Fetch dataset rows
df = cli.data("other/materials/eu_pb_price", limit=10, geo=["PL", "DE"])
print(df.head())
Core Endpoints Covered
The client wraps the following API endpoints:
| Method | Endpoint | Description |
|---|---|---|
health() |
/health |
API status check |
datasets() |
/datasets |
Dataset catalog |
metadata() |
/metadata |
Full metadata list |
metadata_one(id) |
/metadata/{id} |
Metadata for one dataset |
data(id) |
/data/{id} |
Data rows only |
Dataset IDs use the format:
topic/subtopic/table_id
Example:
macro_economics/prices/eu_hicp_energy
Filtering Data
The data() method supports optional filters:
df = cli.data(
"other/materials/eu_pb_price",
frm="2020-01-01",
to="2023-12-31",
limit=1000
)
Parameters:
frm— start date (YYYY-MM-DD)to— end date (YYYY-MM-DD)limit— max rows (server limit applies)<column>=value— filter by any column (e.g.geo=PL)
Public vs Pro Datasets
Datasets include a visibility field:
"public"— accessible without API key"paid"/"pro"— requires API key
If a Pro dataset is accessed without a key, the client raises:
AuthError
Example:
from furnilytics import Client, AuthError
cli = Client(api_key=None)
try:
cli.data("some/pro/dataset")
except AuthError as e:
print("Access denied:", e)
Error Handling
The client raises structured exceptions:
| Exception | Meaning |
|---|---|
AuthError |
Missing or invalid API key |
NotFoundError |
Dataset not found |
RateLimitError |
Too many requests |
ClientError |
Other 4xx or 5xx errors |
Example:
try:
df = cli.data("unknown/id")
except NotFoundError:
print("Dataset does not exist.")
Debugging
You can inspect response metadata:
cli.data("macro_economics/prices/eu_hicp_energy", limit=5)
print(cli.last_response_meta)
Includes:
- HTTP status
- ETag
- Cache headers
- Rate-limit headers (if present)
Development
Clone the repository:
git clone https://github.com/Furnilytics/Furnilytics_lib.git
cd Furnilytics_lib
pip install -e .
Build locally:
python -m build
Publish to PyPI via tagged release:
git tag v0.2.x
git push origin v0.2.x
Project Structure
furnilytics/
├── client.py
├── __main__.py
└── __init__.py
Requirements
- Python 3.9+
- requests
- pandas
About Furnilytics
Furnilytics is a data-driven market intelligence initiative focused on the global furniture industry, integrating macroeconomic, trade, retail, and digital demand data into structured datasets and analytical indicators.
Website: https://www.furnilytics.com
API documentation: https://www.furnilytics.com/platform/api/#api-python
Dataset catalogue: https://www.furnilytics.com/platform/data-catalogue/
License & scope
MIT License
This license applies only to the Python client library code.
Access to and usage of the Furnilytics API and its datasets are governed by separate Terms of Service.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file furnilytics-0.2.9.tar.gz.
File metadata
- Download URL: furnilytics-0.2.9.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
73fa2c289e92fbcfb8f42755423988a88cb3b0e29a74729bb3e06d0c8af6c496
|
|
| MD5 |
7f65c85d6265cf9b0357de3802f8b1c3
|
|
| BLAKE2b-256 |
d5796432c59157ffbf57680344756b6e8e60e77731c365be9a417a66f81393df
|
Provenance
The following attestation bundles were made for furnilytics-0.2.9.tar.gz:
Publisher:
publish.yml on Furnilytics/Furnilytics_lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
furnilytics-0.2.9.tar.gz -
Subject digest:
73fa2c289e92fbcfb8f42755423988a88cb3b0e29a74729bb3e06d0c8af6c496 - Sigstore transparency entry: 1675721609
- Sigstore integration time:
-
Permalink:
Furnilytics/Furnilytics_lib@0ca1f2f39ab77acd57cb29336b290caf95f46f31 -
Branch / Tag:
refs/tags/v0.2.9 - Owner: https://github.com/Furnilytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0ca1f2f39ab77acd57cb29336b290caf95f46f31 -
Trigger Event:
push
-
Statement type:
File details
Details for the file furnilytics-0.2.9-py3-none-any.whl.
File metadata
- Download URL: furnilytics-0.2.9-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b8db5d42f109f11ecafaab3691612c22c082bc1d8b31e84315053283c37859d
|
|
| MD5 |
d3290d67254a79bc8db1bf6dec371a11
|
|
| BLAKE2b-256 |
c952a9974152f9efd969b97739cfa367ecc60c1f98980efb0386d8c1281a95ad
|
Provenance
The following attestation bundles were made for furnilytics-0.2.9-py3-none-any.whl:
Publisher:
publish.yml on Furnilytics/Furnilytics_lib
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
furnilytics-0.2.9-py3-none-any.whl -
Subject digest:
8b8db5d42f109f11ecafaab3691612c22c082bc1d8b31e84315053283c37859d - Sigstore transparency entry: 1675721631
- Sigstore integration time:
-
Permalink:
Furnilytics/Furnilytics_lib@0ca1f2f39ab77acd57cb29336b290caf95f46f31 -
Branch / Tag:
refs/tags/v0.2.9 - Owner: https://github.com/Furnilytics
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0ca1f2f39ab77acd57cb29336b290caf95f46f31 -
Trigger Event:
push
-
Statement type: