# Chairish Furniture Scraper (`crawlerbros/chairish-furniture-scraper`) Actor

Scrape vintage, antique and designer furniture and decor listings from chairish.com. Browse a category, search by keyword, or fetch exact URLs. Returns price, condition, dimensions, materials, seller and images.

- **URL**: https://apify.com/crawlerbros/chairish-furniture-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Chairish Furniture Scraper

Scrape vintage, antique and designer furniture and home-decor listings from [chairish.com](https://www.chairish.com/) — the curated marketplace for one-of-a-kind furniture, art, lighting and decor. Browse any category, search by keyword, or fetch exact product/collection URLs. Returns price, condition, dimensions, material, color, seller and images. HTTP-only via the site's public schema.org structured data. No auth, no proxy, no cookies required.

### What this actor does

- **Four modes:** `collection` (category browse), `search` (keyword), `byUrls` (exact URL lookup), `bySeller` (browse one seller's shop)
- **Filters:** min/max price (server-side facet), condition (New / Used server-side facet, Refurbished client-side), color (server-side facet, 17 swatches), design style (server-side facet, 49 styles), sets/pieces (server-side facet: single item / a pair / a set of 3+), on-sale-only (server-side facet), free-shipping-only (server-side facet), shipping-under-$50-only (server-side facet), availability (server-side facet: hide sold out / ready to ship), featured collection (server-side facet: new arrivals / A-List curated picks), item location (server-side facet: US / Europe, now applied server-side on both `collection` and `search`), min/max width, depth, and height in inches (server-side per-category dimension facet)
- **Sort order:** Curated, Newest, Price low-to-high, Price high-to-low, Most Favorited (mode=collection, search)
- **Rich listing detail:** dimensions (depth/height/width in inches), material, color, brand, category, seller name and region
- **Multiple images per listing**, capped at 10
- **Empty fields are omitted** — no null/blank/sentinel values in the output

### Output per listing

- `productId`, `title`, `productUrl`, `sourceUrl`
- `description`
- `price`, `currency`, `priceValidUntil`, `availability`
- `condition` — `New` / `Used` / `Refurbished`
- `category` — Chairish's full taxonomy path (e.g. `Furniture > Chairs > Arm Chairs, Recliners & Sleeper Chairs`)
- `color`, `material`, `brand`
- `depthIn`, `heightIn`, `widthIn` — dimensions in inches
- `sellerName`, `sellerImageUrl`, `sellerRegion`, `sellerLocality`, `sellerCountry`
- `sellerSlug` — the Chairish shop slug queried; present only on `mode=bySeller` records
- `sellerRating`, `sellerReviewCount` — seller's aggregate rating (1-5 scale); only present on individual product-detail fetches (`mode=byUrls`, or when a listing/search result is opened for detail), not on collection/search listing pages
- `discountPercentage`, `onSale` — present when Chairish is currently running a markdown on the listing (scraped from the same results page, not a separate fetch); `onSaleOnly` filters to these
- `taxonomyPath[]` — Chairish's own internal category breadcrumb (e.g. `["Decor", "Room Accents & Accessories", "Candles & Home Fragrance", "Candle Holders", "Candelabras"]`), more granular than `category`
- `isLocalPickupAvailable`, `isMadeToOrder`, `isNewlyMade`, `isPromotedListing` — real-time listing flags scraped from the same page (no extra fetch)
- `imageUrl`, `imageUrls[]`
- `recordType: "product"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `collection` | `collection` / `search` / `byUrls` |
| `collectionHandle` | string | `sofas` | Category to browse (mode=collection) — fixed dropdown of curated Chairish collection slugs (only listed values are accepted; use `byUrls` for a collection slug not in the list) |
| `searchQuery` | string | `mid century credenza` | Keyword query (mode=search) |
| `productUrls` | array | – | Exact product or collection URLs (mode=byUrls) |
| `sellerSlug` | string | – | Seller/dealer shop slug or full `/shop/<slug>` URL (mode=bySeller) |
| `minPrice` / `maxPrice` | int | – | Price range in USD — applied server-side on `collection`/`search` via Chairish's own `price` facet, plus a post-filter safety net |
| `condition` | string | – | `New` / `Used` (applied server-side via Chairish's `item_type` facet) / `Refurbished` (client-side post-filter) |
| `color` | string | – | One of 17 Chairish color-swatch facets (e.g. `Blue`, `Brown`) — applied server-side on `collection`/`search` via Chairish's `colors` facet, plus a substring post-filter in every mode |
| `style` | string | – | Design style facet (e.g. `Art Deco`, `Mid-Century Modern`) — applied server-side on `collection`/`search` |
| `setSize` | string | – | `1` (single item) / `2` (a pair) / `3P` (a set of 3+) — applied server-side via Chairish's own "Sets/Pieces" facet on `collection`/`search` |
| `onSaleOnly` | boolean | `false` | Restrict to marked-down items — applied server-side on `collection`/`search` |
| `freeShippingOnly` | boolean | `false` | Restrict to items with free shipping — applied server-side on `collection`/`search` via Chairish's `shipping_options` facet |
| `underFiftyShippingOnly` | boolean | `false` | Restrict to items with shipping cost under $50 — applied server-side on `collection`/`search` via Chairish's `shipping_options` facet; ignored if `freeShippingOnly` is also on |
| `availability` | string | – | `hideSoldOut` / `readyToShip` — applied server-side on `collection`/`search` via Chairish's own `misc_availability` facet |
| `featured` | string | – | `newArrivals` / `aList` — applied server-side on `collection`/`search` via Chairish's own `misc_featured` facet |
| `itemLocation` | string | – | `USA` / `Europe` — applied server-side on `collection`/`search` via Chairish's own `pickup_bloc_codes` facet, plus a post-filter safety net against the listing's `sellerCountry` |
| `minWidthIn` / `maxWidthIn` | int | – | Width range in inches — applied server-side on `collection`/`search`/`bySeller` via Chairish's own per-category dimension facet, plus a post-filter safety net; listings without a published width always pass |
| `minDepthIn` / `maxDepthIn` | int | – | Depth range in inches — applied server-side on `collection`/`search`/`bySeller` via Chairish's own per-category dimension facet, plus a post-filter safety net; listings without a published depth always pass |
| `minHeightIn` / `maxHeightIn` | int | – | Height range in inches — applied server-side on `collection`/`search`/`bySeller` via Chairish's own per-category dimension facet, plus a post-filter safety net; listings without a published height always pass |
| `sortBy` | string | – | `Curated` / `Newest` / `Price: Low to High` / `Price: High to Low` / `Most Favorited` — `collection`/`search` |
| `maxItems` | int | `30` | Hard cap (1–500) |

#### Example: browse vintage sofas under $3000

```json
{
  "mode": "collection",
  "collectionHandle": "sofas",
  "maxPrice": 3000,
  "condition": "Used",
  "maxItems": 50
}
```

#### Example: search for a specific style

```json
{
  "mode": "search",
  "searchQuery": "art deco mirror",
  "maxItems": 20
}
```

#### Example: browse a seller's shop

```json
{
  "mode": "bySeller",
  "sellerSlug": "schumacher",
  "sortBy": "price",
  "maxItems": 50
}
```

#### Example: look up specific listings

```json
{
  "mode": "byUrls",
  "productUrls": ["https://www.chairish.com/product/36569681/antique-rug-wingback-chair"]
}
```

### Use cases

- **Interior designers & stylists** — source one-of-a-kind vintage and antique pieces by category, style, and dimensions for client projects.
- **Vintage/antique resellers** — monitor a competitor's or supplier's Chairish shop (`bySeller`) for new inventory and pricing.
- **Price/market research** — track pricing trends for a design style or category (e.g. Mid-Century Modern credenzas) over time.
- **Home decor aggregators** — pull curated collections of furniture and decor for a shopping or inspiration site.
- **Deal hunting** — filter for `onSaleOnly` or discounted listings across a category or seller's shop.

### FAQ

**Do I need a proxy or login?** No. The actor reads chairish.com's public product pages directly — no cookies, no API key, no residential proxy.

**Is this new or used furniture?** Both — Chairish is a marketplace for vintage, antique, and new designer pieces from individual sellers and dealers; use the `condition` filter to narrow results.

**How current is the data?** Every run fetches live data at request time; nothing is cached. Sold/removed listings simply won't appear.

**Can keyword search return exact matches?** Chairish's search resolves a query to the closest matching category or filtered view (e.g. `walnut credenza` → the Credenzas category filtered to walnut); this mirrors the site's own search behavior.

**Can I browse a specific seller's shop?** Yes — use `mode=bySeller` with the seller's shop slug (e.g. `schumacher`) or full `/shop/<slug>` URL to get that seller's full catalog with the same filters as category/search browsing.

**Are prices in USD?** Yes — Chairish is a US-focused marketplace and all prices are listed in USD, regardless of seller location.

**Why do some listings have fewer fields than others (e.g. no `sellerRating`)?** Some fields, like seller rating/review count, are only present on individual product-detail pages, not on collection/search listing cards. Use `mode=byUrls` on a specific listing to get the fullest field set.

**Does `condition=Refurbished` narrow results the same way as `New`/`Used`?** Not quite — `New` and `Used` map to a real Chairish server-side facet, while `Refurbished` is applied as a post-filter on the scraped results since Chairish has no dedicated server-side facet for it.

### Limitations

- Chairish is a US-focused marketplace; prices are in USD and sellers are predominantly US-based.
- `collectionHandle` accepts a curated list of the most common furniture/decor categories plus free-text override; the site has 190+ collections (including jewelry, books and seasonal collections outside furniture/decor scope).
- Individual seller shipping cost and lead time are not part of the structured listing data and are not included.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `collectionHandle` (type: `string`):

Category to browse, from Chairish's own collection facets. Required for mode=collection. (Only the listed values are accepted -- the platform's input validation rejects any other slug, even though chairish.com hosts additional collection pages; use mode=byUrls to fetch one of those directly.)

## `searchQuery` (type: `string`):

Free-text keyword search, e.g. `mid century credenza`, `walnut desk`, `art deco mirror`.

## `sellerSlug` (type: `string`):

Chairish seller/dealer shop slug (e.g. `schumacher`) or a full `chairish.com/shop/<slug>` URL. Required for mode=bySeller. Returns that seller's real catalog, paginated, with the same price/color/style/sort filters as `collection`/`search`.

## `productUrls` (type: `array`):

Exact chairish.com product or collection URLs to fetch directly.

## `minPrice` (type: `integer`):

Drop listings priced below this. Applied server-side via Chairish's own "Price" facet (mode=collection, search, bySeller), so it narrows the source results (not just a post-filter); always applied as a post-filter too.

## `maxPrice` (type: `integer`):

Drop listings priced above this. Applied server-side via Chairish's own "Price" facet (mode=collection, search, bySeller), so it narrows the source results (not just a post-filter); always applied as a post-filter too.

## `condition` (type: `string`):

Restrict results to one item condition. `New` and `Used` are applied server-side via Chairish's own item\_type facet (narrows the source results, not just a post-filter); `Refurbished` is a post-filter only (Chairish has no server-side facet for it). Not available in mode=byUrls.

## `color` (type: `string`):

Restrict results to one Chairish color-swatch facet. Applied server-side on `collection`/`search` (narrows the source results, not just a post-filter); also used as a substring post-filter against the listing's color field in every mode.

## `freeShippingOnly` (type: `boolean`):

Restrict results to items with free shipping. Applied server-side via Chairish's own shipping-options facet, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `underFiftyShippingOnly` (type: `boolean`):

Restrict results to items with shipping cost under $50. Applied server-side via Chairish's own "Shipping Options" facet, so it narrows the source results (not just a post-filter). Ignored if `freeShippingOnly` is also on (free shipping is a strict subset). Not available in mode=byUrls.

## `style` (type: `string`):

Restrict results to one Chairish design-style facet (e.g. Mid-Century Modern, Art Deco). Applied server-side, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `setSize` (type: `string`):

Restrict results to single items, pairs, or sets of 3+ pieces (e.g. dining chair sets, matching armchair pairs). Applied server-side via Chairish's own "Sets/Pieces" facet, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `availability` (type: `string`):

Restrict results by stock/lead-time status. Applied server-side via Chairish's own "Availability" facet, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `itemLocation` (type: `string`):

Restrict results to items shipping from the US, or from a European seller. Applied server-side via Chairish's own "Item Location" facet, so it narrows the source results (not just a post-filter); also enforced as a post-filter against each listing's seller address country. Not available in mode=byUrls.

## `featured` (type: `string`):

Restrict results to a Chairish-curated featured group: brand-new listings, or hand-picked "A-List" designer picks. Applied server-side via Chairish's own "Featured" facet, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `onSaleOnly` (type: `boolean`):

Restrict results to items currently marked down from their original price. Applied server-side via Chairish's own "Sale" facet, so it narrows the source results (not just a post-filter). Not available in mode=byUrls.

## `minWidthIn` (type: `integer`):

Drop listings narrower than this (inches). Applied server-side via Chairish's own per-category dimension facet ("Width" slider), so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published width always pass. Not available in mode=byUrls.

## `maxWidthIn` (type: `integer`):

Drop listings wider than this (inches). Applied server-side via Chairish's own per-category dimension facet, so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published width always pass. Not available in mode=byUrls.

## `minDepthIn` (type: `integer`):

Drop listings shallower than this (inches). Applied server-side via Chairish's own per-category dimension facet ("Depth" slider), so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published depth always pass. Not available in mode=byUrls.

## `maxDepthIn` (type: `integer`):

Drop listings deeper than this (inches). Applied server-side via Chairish's own per-category dimension facet, so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published depth always pass. Not available in mode=byUrls.

## `minHeightIn` (type: `integer`):

Drop listings shorter than this (inches). Applied server-side via Chairish's own per-category dimension facet ("Height" slider), so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published height always pass. Not available in mode=byUrls.

## `maxHeightIn` (type: `integer`):

Drop listings taller than this (inches). Applied server-side via Chairish's own per-category dimension facet, so it narrows the source results (not just a post-filter); also enforced as a post-filter. Listings without a published height always pass. Not available in mode=byUrls.

## `sortBy` (type: `string`):

Order in which the source returns results. Only affects which items are captured first when `maxItems` is below the collection/search total. Not available in mode=byUrls.

## `maxItems` (type: `integer`):

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "collection",
  "collectionHandle": "sofas",
  "searchQuery": "mid century credenza",
  "sellerSlug": "schumacher",
  "productUrls": [],
  "condition": "",
  "color": "",
  "freeShippingOnly": false,
  "underFiftyShippingOnly": false,
  "style": "",
  "setSize": "",
  "availability": "",
  "itemLocation": "",
  "featured": "",
  "onSaleOnly": false,
  "sortBy": "",
  "maxItems": 30
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped Chairish listings.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "collection",
    "collectionHandle": "sofas",
    "searchQuery": "mid century credenza",
    "sellerSlug": "schumacher",
    "productUrls": [],
    "freeShippingOnly": false,
    "underFiftyShippingOnly": false,
    "onSaleOnly": false,
    "maxItems": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/chairish-furniture-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "collection",
    "collectionHandle": "sofas",
    "searchQuery": "mid century credenza",
    "sellerSlug": "schumacher",
    "productUrls": [],
    "freeShippingOnly": False,
    "underFiftyShippingOnly": False,
    "onSaleOnly": False,
    "maxItems": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/chairish-furniture-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "collection",
  "collectionHandle": "sofas",
  "searchQuery": "mid century credenza",
  "sellerSlug": "schumacher",
  "productUrls": [],
  "freeShippingOnly": false,
  "underFiftyShippingOnly": false,
  "onSaleOnly": false,
  "maxItems": 30
}' |
apify call crawlerbros/chairish-furniture-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=crawlerbros/chairish-furniture-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Be1LgJFqDj9U9YqSy/builds/9mP4010aOxON3uk5s/openapi.json
