Chairish Marketplace Scraper avatar

Chairish Marketplace Scraper

Pricing

Pay per event

Go to Apify Store
Chairish Marketplace Scraper

Chairish Marketplace Scraper

Scrape public Chairish furniture, decor, art, and vintage listings with prices, dimensions, seller locations, materials, availability, and images.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract public Chairish furniture, decor, art, and vintage marketplace listings into a clean dataset for sourcing, appraisal comps, inventory monitoring, and market intelligence.

The Actor accepts real Chairish category, search, and product URLs. It follows public pagination, deduplicates listings by product ID, and returns prices, availability, seller location, materials, dimensions, images, and descriptions. Optional product-page enrichment adds fields such as the public seller name.

What does Chairish Marketplace Scraper do?

Chairish Marketplace Scraper turns server-rendered Chairish pages into one normalized record per listing.

It can:

  • scrape public chairish.com/collection/... category pages;
  • scrape public Chairish search URLs that contain a q parameter;
  • extract a single public Chairish product page;
  • follow category and search pagination;
  • stop exactly at your requested listing limit;
  • deduplicate the same product across multiple inputs;
  • optionally open product pages for additional structured fields;
  • export results through Apify datasets, API, webhooks, schedules, Make, or Zapier.

The Actor uses structured Product data exposed in the public HTML. It does not require login credentials and does not attempt to collect private contact details.

Who is it for?

Vintage furniture dealers can refresh active inventory and compare asking prices across categories.

Furniture resellers can discover comparable pieces, materials, dimensions, and seller locations before sourcing stock.

Interior-design sourcing teams can build project shortlists from public Chairish search or category pages.

Appraisers and researchers can collect repeatable snapshots of active asking prices and availability.

Marketplace intelligence teams can monitor listing mix, pricing, materials, colors, and geographic supply over time.

Why use this Actor?

  • HTTP-first extraction: no browser is required for the supported public pages, which keeps runs faster and less expensive. If Chairish explicitly blocks a direct category, search, or supplied product request, the Actor retries that page through a bounded US residential session.
  • Stable IDs: every row includes the numeric Chairish product ID and canonical URL.
  • Typed dimensions: width, height, and depth preserve both numeric values and Chairish unit codes.
  • Bounded enrichment: choose whether the Actor should open each product detail page.
  • Honest failure behavior: invalid URLs, blocked category/product pages, and unavailable structured data fail clearly instead of reporting a misleading successful empty run.
  • Integration-ready output: each dataset row has a consistent shape regardless of whether it came from a category, search, or product URL.

What data can you extract from Chairish?

FieldDescription
productIdStable numeric Chairish product identifier
urlCanonical public product URL
titlePublic listing title
descriptionPublic listing description, or null
categoryChairish category breadcrumb
priceNumeric asking price, excluding shipping and tax
currencyCurrency code such as USD
availabilityStructured availability such as InStock
conditionStructured condition such as UsedCondition
priceValidUntilStructured price-valid date
sellerNamePublic seller name when exposed; commonly requires detail enrichment
sellerLocalityPublic seller city or locality
sellerRegionRegion value exposed by Chairish
sellerCountryPublic seller country
colorPrimary product color
materialPrimary product material
width, height, depthNumeric value and source unit code
imagesFull image URL, thumbnail URL, and caption
sourceUrlPage from which the row was extracted
scrapedAtISO 8601 extraction timestamp

Fields that Chairish does not publish for a listing are returned as null or an empty array. The Actor does not infer missing values.

How to scrape Chairish listings

  1. Open the Actor input form.
  2. Add at least one public Chairish category, search, or product URL.
  3. Set maxItems to the maximum number of unique listings you need.
  4. Keep enrichDetails off for fast catalog extraction, or enable it when seller-name/detail freshness matters.
  5. Start the run.
  6. Open the Chairish listings dataset view.
  7. Export the records as JSON, CSV, Excel, XML, or RSS, or consume them through the API.

A low-cost first run can use:

{
"startUrls": [
{ "url": "https://www.chairish.com/collection/furniture" }
],
"maxItems": 10,
"maxPages": 2,
"enrichDetails": false
}

Input parameters

startUrls

Required array of public https://www.chairish.com URLs. Supported routes are:

  • category pages such as https://www.chairish.com/collection/furniture;
  • search pages such as https://www.chairish.com/search?q=mid-century%20chair;
  • product pages such as https://www.chairish.com/product/36646520/....

Search URLs must include a non-empty q parameter. Other domains and Chairish account/private routes are rejected.

maxItems

Maximum number of unique listing rows saved across all inputs. Default: 100. Range: 1–10,000.

The Actor stops adding records as soon as this limit is reached.

maxPages

Maximum total number of pages fetched. Default: 250. Range: 1–500.

A run may finish earlier when maxItems is reached or Chairish exposes no next page.

enrichDetails

When false (default), category and search JSON-LD supplies the normalized listing fields with minimal requests.

When true, each discovered product page is opened before its row is saved. This commonly adds the public seller name and refreshes product-level structured data, but it increases runtime and upstream requests. Detail enrichment stays direct HTTP; if an individual detail request is blocked, the complete list-page row is still saved instead of spending residential bandwidth per item.

Chairish scraper output example

A current public Chairish furniture listing produces a row like this:

{
"productId": "36646520",
"url": "https://www.chairish.com/product/36646520/antique-scandinavian-hand-painted-folk-art-chest-of-drawers-with-coastal-landscape-decoration",
"title": "Antique Scandinavian Hand-Painted Folk Art Chest of Drawers With Coastal Landscape Decoration",
"description": "A wonderfully whimsical antique hand-painted chest of drawers...",
"category": "Furniture > Cabinets & Storage > Dressers",
"price": 4900,
"currency": "USD",
"availability": "InStock",
"condition": "UsedCondition",
"priceValidUntil": "2026-08-03",
"sellerName": "Coleville Home",
"sellerLocality": "New York",
"sellerRegion": "LFP",
"sellerCountry": "US",
"color": "Yellow",
"material": "Oak",
"width": { "value": 40, "unitCode": "INH" },
"height": { "value": 34, "unitCode": "INH" },
"depth": { "value": 24, "unitCode": "INH" },
"images": [
{
"url": "https://chairish-prod.freetls.fastly.net/image/product/master/...",
"thumbnailUrl": "https://chairish-prod.freetls.fastly.net/image/product/sized/...",
"caption": "Antique Scandinavian Hand-Painted Folk Art Chest of Drawers..."
}
],
"sourceUrl": "https://www.chairish.com/collection/furniture",
"scrapedAt": "2026-07-27T02:17:26.379Z"
}

Values change as sellers update listings. Treat the dataset as a snapshot captured at scrapedAt.

How much does it cost to scrape Chairish marketplace listings?

The Actor uses pay-per-event pricing: one Run started event per run plus one Item extracted event for each saved listing. Failed, rejected, duplicate, and empty records do not generate item events.

EventFREEBRONZESILVERGOLDPLATINUMDIAMOND
Run started (once per run)$0.005$0.005$0.005$0.005$0.005$0.005
Saved listing$0.000041071$0.000035714$0.000027857$0.000021429$0.000014286$0.000010000

At the FREE item tier, example Actor charges are approximately:

  • 10 saved listings: $0.005411 including the start event;
  • 100 saved listings: $0.009107 including the start event;
  • 1,000 saved listings: $0.046071 including the start event.

Your account tier determines the per-listing price. Platform usage treatment is shown by Apify before you start a run. Detail enrichment and an automatically triggered residential session do not create a second record charge, but they can take longer because the Actor visits more pages or uses a protected route.

Reliable monitoring and sourcing workflows

Daily inventory watch

Schedule a category or search input daily, export each dataset, and compare rows by productId. Use availability, price, and scrapedAt to detect changes.

Dealer price comps

Run narrow category or search URLs with detail enrichment enabled. Group records by category, material, dimensions, seller locality, or price range in your analysis system.

Interior-design shortlist

Use a project-specific Chairish search URL, retain canonical URLs and images, then send new matches to Airtable, Google Sheets, Notion, or a webhook.

Appraisal research

Collect active asking-price snapshots for comparable public listings. Asking prices are not sold prices or appraisals, so combine them with qualified professional judgment and other evidence.

Tips for accurate results

  • Prefer a narrow Chairish search or category URL when you need a focused dataset.
  • Keep enrichDetails off for broad inventory scans when list-page fields are sufficient.
  • Enable enrichment when public seller names or freshest product-page values matter.
  • Use productId rather than title as the deduplication key in downstream systems.
  • Keep scrapedAt so repeated snapshots can be compared safely.
  • Increase maxPages when your requested item count spans many result pages.
  • Schedule moderate recurring runs instead of sending many overlapping runs at once.

Limits and failure behavior

  • Only public Chairish category, search, and product URLs are supported.
  • The Actor does not log in, bypass CAPTCHA, or retrieve private seller contact data.
  • Chairish can change its HTML, structured data, pagination, inventory, or access controls without notice.
  • A genuinely empty search succeeds with zero rows.
  • A category or product page that unexpectedly exposes no Product data fails with a clear message.
  • Temporary timeouts, HTTP 429, and selected 5xx responses are retried with bounded backoff.
  • An explicit HTTP 403, 418, 429, or challenge on a category, search, or supplied product page triggers a bounded US residential-session retry for that page; the Actor does not use a browser.
  • Detail-enrichment requests do not trigger per-item residential fallback. If one is blocked, the complete list-page row is saved and the run log identifies the skipped enrichment.
  • Permanent access errors and unsupported inputs are not retried blindly.
  • Prices are active asking prices, not transaction history, shipping-inclusive totals, or appraisals.
  • Seller region values are preserved from Chairish and may use marketplace-specific codes.

Use the Chairish scraper with the Apify API

Replace <APIFY_TOKEN> with your token. The Actor remains private until its first Store publication.

cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~chairish-marketplace-scraper/runs?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [{"url":"https://www.chairish.com/search?q=mid-century%20chair"}],
"maxItems": 50,
"maxPages": 3,
"enrichDetails": false
}'

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const actor = client.actor('automation-lab/chairish-marketplace-scraper');
const run = await actor.call({
startUrls: [{ url: 'https://www.chairish.com/collection/furniture' }],
maxItems: 100,
maxPages: 5,
enrichDetails: false,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/chairish-marketplace-scraper').call(run_input={
'startUrls': [{'url': 'https://www.chairish.com/collection/furniture'}],
'maxItems': 100,
'maxPages': 5,
'enrichDetails': False,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use Chairish Marketplace Scraper with MCP

Apify MCP lets supported AI clients run this Actor and inspect its datasets.

Claude Code

claude mcp add --transport http apify \
"https://mcp.apify.com?tools=automation-lab/chairish-marketplace-scraper"

Claude Desktop, Cursor, and VS Code

Add this MCP JSON block to the client’s MCP configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/chairish-marketplace-scraper"
}
}
}

Example prompts:

  • “Run Chairish Marketplace Scraper on the furniture collection and return 20 listings with prices and dimensions.”
  • “Extract 50 results from this Chairish mid-century chair search and group them by seller locality.”
  • “Run detail enrichment for this Chairish product URL and summarize material, size, price, seller, and availability.”

Integrations

Use Apify schedules for recurring inventory snapshots. Connect successful runs to webhooks, Make, Zapier, Google Sheets, Airtable, cloud storage, or your own data warehouse.

For incremental monitoring, store the last seen productId, price, availability, and scrapedAt in your destination. This Actor returns current snapshots; it does not maintain a hidden cross-run history table.

This Actor extracts data that Chairish exposes on public pages. Public availability does not remove your obligations.

  • Review Chairish terms and applicable law for your use case.
  • Collect only the data you need.
  • Do not use the Actor to harass sellers, circumvent access controls, or build prohibited profiles.
  • Respect intellectual-property rights in descriptions and images.
  • Apply suitable retention, security, and deletion policies.
  • Obtain professional legal advice for regulated or high-risk uses.

You are responsible for the inputs you provide and how you use exported data.

Troubleshooting

Why did my search return zero rows?

Open the exact URL in a normal browser and confirm it currently has public results. A valid Chairish search with no matching products is treated as a successful empty result. Check that the URL contains a non-empty q parameter.

Why did a category or product run fail?

Inspect the run log for the URL and HTTP status. Chairish may have removed the listing, changed the route, or returned an access challenge. Retry later with a small input rather than repeatedly launching overlapping large runs.

Why is sellerName null?

Category and search structured data often exposes location but not the seller name. Set enrichDetails to true so the Actor visits the public product page.

Why did I receive fewer rows than maxItems?

maxItems is a ceiling, not a guaranteed count. The source may have fewer products, deduplication may remove repeats, or maxPages may be reached first.

Choose Chairish Marketplace Scraper when your source must specifically be the public Chairish catalog and product pages.

FAQ

Does this Actor require a Chairish account?

No. The supported v1 routes use public Chairish pages and do not accept login credentials.

Does it scrape seller email addresses or phone numbers?

No. It does not promise or attempt to retrieve private seller contact data.

Can it scrape one product URL?

Yes. Add the public /product/<numeric-id>/... URL to startUrls.

Can it scrape multiple categories in one run?

Yes. Add multiple category or search URLs. The global maxItems and maxPages limits apply across the run, and duplicate product IDs are saved only once.

Does it download product images?

No. It extracts public image and thumbnail URLs without downloading image binaries into the dataset.

Does it include sold prices?

No. Output reflects public current listing data and availability. It does not claim sold-listing history.

Can I schedule it?

Yes. Save the input as an Apify task and attach a schedule. Use webhooks or integrations to deliver each completed dataset to your monitoring system.