Furniture APIfurniture.com ↗
Search Furniture.com's product catalog by keyword, filter by color, style, brand, and material. Returns prices, ratings, availability, and seller data.
What is the Furniture API?
The Furniture.com API provides 2 endpoints for searching and filtering the Furniture.com product catalog, returning up to 50 products per request with fields covering title, price, sale price, brand, seller, average rating, total ratings, stock status, and slug. The search_products endpoint accepts keyword queries alongside facet filters for color, style, type, and brand, while get_filters exposes available filter groups with per-option product counts for a given query.
curl -X GET 'https://api.parse.bot/scraper/0b207cbb-fa29-4388-9b77-611c0e4fdd46/search_products?page=1&type=Sofa&brand=Four+Hands&color=Brown&limit=5&query=sofa&style=Modern&seller=Bloomingdale%27s&on_sale=true&sort_by=RECOMMENDED&material=Fabric&zip_code=30349&max_price=5000&min_price=100' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace furniture-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Furniture.com Search API — discover filters, search, and compare products."""
from parse_apis.furniture_com_search_api import Furniture, Sort, ProductSearchFailed
client = Furniture()
# Discover available filter options for sofas
for group in client.filterresults.list(query="sofa", limit=5):
print(f"Filter: {group.display_name} ({len(group.options)} options)")
for opt in group.options[:2]:
print(f" {opt.label}: {opt.count} products")
# Search for fabric sofas sorted by price, bounded iteration
first_product = client.searchresults.search(
query="sofa", material="Fabric", sort_by=Sort.PRICE_LOW_TO_HIGH, limit=1
).first()
if first_product:
print(f"Cheapest fabric sofa: {first_product.title}, ${first_product.price}")
print(f" Seller: {first_product.seller}, In stock: {first_product.in_stock}")
# Browse highest-rated sofas
for product in client.searchresults.search(query="sofa", sort_by=Sort.HIGHEST_RATED, limit=3):
print(f"{product.title} — rating: {product.average_rating}, price: ${product.price}")
# Typed error handling
try:
for p in client.searchresults.search(query="xyznonexistent99999", limit=1):
print(p.title)
except ProductSearchFailed as exc:
print(f"Search failed: {exc}")
print("Exercised: filterresults.list / searchresults.search / Sort enum / ProductSearchFailed error")
Full-text search over the Furniture.com product catalog. Returns paginated product listings with details including price, seller, images, specifications, variations, and availability. Supports facet filtering by color, material, style, type, brand, seller, and price range. Server-side sorting by recommendation score, price, or rating. Each page returns up to 50 products.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| type | string | Filter by furniture type (e.g. 'Sofa', 'Stationary', 'Platform', 'Upholstered'). |
| brand | string | Filter by brand (e.g. 'BenchMade Modern', 'Four Hands'). |
| color | string | Filter by color (e.g. 'Brown', 'Beige & Cream', 'Gray', 'Blue'). |
| limit | integer | Number of results per page (max 50). |
| query | string | Search keyword (e.g. 'sofa', 'dining table', 'bed'). |
| style | string | Filter by style (e.g. 'Modern', 'Contemporary', 'Traditional', 'Mid-Century Modern'). |
| seller | string | Filter by seller (e.g. 'Lulu and Georgia', 'Bloomingdale\'s'). |
| on_sale | string | Filter to on-sale items only. Pass 'true' to activate. |
| sort_by | string | Sort order for results. |
| material | string | Filter by material (e.g. 'Fabric', 'Leather', 'Wood', 'Velvet', 'Polyester'). |
| zip_code | string | 5-digit US ZIP code for availability filtering. |
| max_price | number | Maximum price filter. |
| min_price | number | Minimum price filter. |
{
"type": "object",
"fields": {
"page": "current page number",
"count": "number of products returned on this page",
"limit": "results per page limit used",
"query": "search keyword used",
"products": "array of Product objects"
},
"sample": {
"data": {
"page": 1,
"count": 5,
"limit": 5,
"query": "sofa",
"products": [
{
"id": "OKL_112444046",
"url": "https://www.furniture.com/shop/thelma-ruffle-settee-jane-stripe-black-one-kings-lane-okl-112444046",
"slug": "thelma-ruffle-settee-jane-stripe-black-one-kings-lane-okl-112444046",
"brand": null,
"price": 1445,
"title": "Thelma Ruffle Skirted Settee, Jane Stripe",
"images": [
{
"fit": "COVER",
"url": "https://assets.furniture.com/images/OKL_112444046/alternate_images/a90d.../",
"type": "Lifestyle",
"aspect_ratio": 1.49
}
],
"seller": "One Kings Lane",
"partner": {
"code": "OKL",
"name": "One Kings Lane"
},
"in_stock": "Ready to ship",
"sale_price": 1445,
"variations": null,
"description": null,
"availability": [
{
"badges": [],
"in_stock": "Ready to ship",
"list_price": null,
"sale_price": 1445
}
],
"total_ratings": null,
"average_rating": null,
"specifications": {
"Material": "Cotton"
}
}
]
},
"status": "success"
}
}About the Furniture API
Endpoints and Core Data
The search_products endpoint accepts a query string and returns an array of product objects. Each product includes id, title, slug, url, brand, seller, price, sale_price, in_stock, average_rating, and total_ratings. Results are paginated via the page and limit parameters, with a maximum of 50 results per page. The response also echoes back the page, count, limit, and query values so you can build pagination logic without tracking state externally.
Filtering and Facets
Both endpoints support facet filtering. On search_products you can pass color (e.g. Brown, Gray), style (e.g. Modern, Mid-Century Modern), type (e.g. Sofa, Platform), brand (e.g. Four Hands), and seller (e.g. Lulu and Georgia) as discrete filter parameters. The get_filters endpoint takes the same query string and returns all available filter groups — each with a name, display_name, and an options array of value, label, and count — so you can populate a dynamic filter UI or determine which facet values are valid before issuing a filtered search_products call.
Coverage and Availability Context
get_filters accepts an optional zip_code parameter (5-digit US ZIP) which provides availability context in the response. The endpoint returns total_products for the query, giving you a count of all matching items before paginating. This is useful for estimating how many pages a full traversal requires when limit is set to its maximum of 50.
The Furniture API is a managed, monitored endpoint for furniture.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when furniture.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official furniture.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a furniture price comparison tool using
priceandsale_pricefields across multiple brands and sellers - Populate a dynamic filter sidebar using
get_filtersoption counts before rendering search results - Track in-stock status changes for specific furniture types with repeated
search_productscalls filtered bytype - Aggregate average ratings and total ratings across a style category to identify top-rated contemporary or mid-century pieces
- Feed a recommendation engine with brand and seller metadata to surface seller-specific assortments
- Monitor sale prices on a specific brand's catalog by combining the
brandfilter withsale_pricefield tracking - Build a ZIP-code-aware availability checker using the
zip_codeparameter onget_filters
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Furniture.com have an official developer API?+
What does `search_products` return beyond basic title and price?+
id, title, slug, url, brand, seller, price, sale_price, in_stock, average_rating, and total_ratings. You can combine keyword search via query with up to five facet filters — color, style, type, brand, and seller — in a single request.Can I retrieve individual product detail pages, dimensions, or customer review text?+
How does pagination work, and is there a hard cap on results per call?+
page and limit parameters on search_products. The limit maximum is 50 items per page. The get_filters endpoint returns total_products for a given query, which you can divide by your chosen limit to determine the total page count for a full traversal.Does the API support sorting results by price or ratings?+
average_rating and price fields are present in each product object, so client-side sorting on retrieved results is straightforward. You can fork the API on Parse and revise it to expose a dedicated sort parameter if server-side ordering is required.