# 1stDibs Scraper - Luxury Items, Prices & Dealer Leads (`scrapesage/1stdibs-scraper`) Actor

Scrape 1stDibs luxury furniture, art, jewelry & watches: prices (10 currencies), designer, period, materials, dimensions, condition, photos & full dealer profiles. Search by keyword, category or URL, emit dealer leads, and monitor price drops & new listings.

- **URL**: https://apify.com/scrapesage/1stdibs-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 item listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 1stDibs Scraper — Luxury Items, Prices & Dealer Leads

Extract **complete 1stDibs data** — luxury **furniture, fine art, jewelry, watches, fashion and design** — with the fields other scrapers skip: **real prices in 10 currencies, period, style, materials, place of origin, condition, every dimension, all photos, listing views**, and the seller's **full dealer profile** (company, location, years in business, 1stDibs tier, rating, total orders, and a contact phone). Optionally turn every gallery and dealer into a **ready-to-contact B2B lead** with a 0–100 lead score.

No login, no cookies, no browser — fast JSON extraction with high reliability.

### Why this 1stDibs scraper?

Most 1stDibs scrapers return a thin listing row — name, price, image — and stop there. This actor reads 1stDibs' internal GraphQL data and ships the **richest dataset in the category**, item *and* dealer:

| Data | Typical scrapers | This actor |
|---|---|---|
| Price + 10-currency conversions | partial | ✅ USD + CHF, EUR, GBP, CAD, AUD, MXN, DKK, SEK, NOK |
| Period / style / place of origin | ❌ | ✅ |
| Materials & techniques | partial | ✅ |
| Full dimensions (in + cm) | ❌ | ✅ height/width/depth/seat/diameter |
| Condition + condition notes | ❌ | ✅ |
| Listing views (demand signal) | ❌ | ✅ |
| All photos | 1 image | ✅ every photo |
| Designer / maker (creator) | partial | ✅ |
| Dealer company, location, tier | ❌ | ✅ Gold / Platinum tier |
| Dealer years in business, total orders, rating | ❌ | ✅ |
| Dealer **contact phone** | ❌ | ✅ |
| Dealer lead score (0–100) | ❌ | ✅ opt-in |
| Price-drop / new-listing / sold monitoring | ❌ | ✅ opt-in |

### Use cases

- **Luxury market & price intelligence** — track asking prices, sell-through and demand (`listingViews`) for designers, periods, materials and categories across furniture, art, jewelry and watches.
- **Dealer & gallery lead generation** — every unique seller becomes a qualified B2B lead with `dealerCompany`, `dealerLocation`, `dealerPhone`, tenure, tier, rating and inventory size. Perfect for shipping/logistics, insurance, authentication, consignment, payments, and trade-platform sales teams.
- **Competitor monitoring** — watch a rival dealer, a designer, or a category and get only what's **new or changed** (price drops, sold, new listings) with monitor mode.
- **Pricing & appraisal comps** — pull comparable items by creator, period and material to support valuations and resale pricing.
- **Catalog & aggregation** — feed luxury-resale apps, marketplaces and dashboards with structured item data and photos.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **1stDibs Scraper**, enter search queries or paste 1stDibs URLs, and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "searchQueries": ["eames lounge chair", "art deco diamond ring"],
    "maxItems": 200,
    "maxPagesPerSearch": 5,
    "minPrice": 1000,
    "includeItemDetails": true,
    "includeDealerLeads": true,
    "monitorMode": false
}
```

- **searchQueries** — keywords to search on 1stDibs (e.g. `rolex datejust`, `mid century chair`, `murano glass`).
- **startUrls** — paste any 1stDibs category/browse URL (e.g. `/furniture/seating/chairs/`), search URL (`/search/?q=...`), creator page (`/creators/...`), or item page. Filters and sort in a pasted browse URL are preserved.
- **itemUrls** — direct item (PDP) URLs to scrape in full detail.
- **maxItems / maxPagesPerSearch** — caps (60 items per page).
- **minPrice / maxPrice** — filter by USD price.
- **availableOnly** — skip sold and on-hold items.
- **includeItemDetails** *(default true)* — fetch each item's page for the richest record (description, condition, period, style, origin, all materials, every dimension, all photos, listing views and the full dealer profile). Turn off for fast, cheap listing-only rows.
- **includeDealerLeads** *(default false)* — also output one deduplicated lead record per dealer (`type: "dealer"`) with a 0–100 lead score.
- **monitorMode** — only output items that are new or whose price/availability changed since the last run (adds a `changeType` field).

### Output

One record per item (`type: "item"`), plus optional dealer lead records (`type: "dealer"`):

```json
{
    "type": "item",
    "itemId": "f_50589802",
    "title": "Pair Eero Aarnio Dining Chairs",
    "url": "https://www.1stdibs.com/furniture/seating/chairs/pair-eero-aarnio-dining-chairs/id-f_50589802/",
    "vertical": "furniture",
    "category": "20th Century Finnish Mid-Century Modern Chairs",
    "creatorNames": "Eero Aarnio",
    "price": 3800,
    "currency": "USD",
    "convertedAmounts": { "EUR": 3387.3, "GBP": 2939.17, "CAD": 5485.17, "AUD": 5538.89 },
    "isSold": false,
    "isAvailable": true,
    "period": "20th Century",
    "style": "Mid-Century Modern",
    "placeOfOrigin": "Finland",
    "materials": "Chrome, Steel, Suede",
    "dateOfManufacture": "1960-1989",
    "condition": "Good",
    "dimensions": ["Height: 32 in (81.28 cm)", "Width: 24.25 in (61.6 cm)", "Depth: 23.25 in (59.06 cm)"],
    "location": "Houston, TX",
    "country": "United States",
    "listingViews": 6,
    "imageCount": 10,
    "primaryImage": "https://a.1stdibscdn.com/.../f_50589802_processed.jpg",
    "dealerCompany": "Moxie Interiors",
    "dealerPhone": "+18882947290",
    "dealerLocation": "Houston, TX",
    "dealerYearsOnPlatform": 11.8,
    "dealerEstablishmentYear": "2011",
    "dealerIsPlatinumTier": true,
    "dealerRating": 5,
    "dealerReviewCount": 20,
    "dealerTotalOrders": 507,
    "scrapedAt": "2026-06-19T12:00:00.000Z"
}
```

A dealer lead record (`type: "dealer"`) adds `dealerJoinedDate`, `dealerResponseTime`, `itemsSeen`, `sampleItemUrl` and a `leadScore`.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it hourly/daily/weekly to monitor a category, designer or dealer for new listings and price drops; perfect for pricing dashboards and lead pipelines.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, restock email) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/1stdibs-scraper').call({
    searchQueries: ['vintage rolex'],
    maxItems: 200,
    includeItemDetails: true,
    includeDealerLeads: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} items & dealer leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new dealer leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored search finds a new listing or price drop.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find mid-century lounge chairs under $5,000 with their dealers" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **marketplace & resale intelligence stack**:

- **[Catawiki Scraper](https://apify.com/scrapesage/catawiki-scraper)** — collectibles, art and luxury **auctions** with bids and estimates.
- **[eBay Scraper](https://apify.com/scrapesage/ebay-scraper)** — listings, sold prices and seller leads.
- **[Reverb Scraper](https://apify.com/scrapesage/reverb-scraper)** — music-gear listings, price guide and seller leads.
- **[Discogs Scraper](https://apify.com/scrapesage/discogs-scraper)** — vinyl & CD marketplace prices and sellers.
- **[Poshmark Scraper](https://apify.com/scrapesage/poshmark-scraper)** — fashion resale listings and sold comps.
- **[Vinted Scraper](https://apify.com/scrapesage/vinted-scraper)** — secondhand fashion listings, prices and sellers.
- **[Amazon Scraper](https://apify.com/scrapesage/amazon-scraper)** — products, prices, reviews and sellers.
- **[Shopify Store Scraper](https://apify.com/scrapesage/shopify-store-scraper)** — storefront products, variants, prices and merchant leads.

### Tips

- **Reuse your filters**: filter and sort on 1stDibs.com, then paste the resulting browse URL into `startUrls` — its category, price and attribute filters are preserved.
- **Cheap bulk vs. rich detail**: turn `includeItemDetails` off for fast listing-only rows (title, designer, price, materials, location, photo, dealer name); turn it on for full descriptions, condition, dimensions and dealer profiles.
- **Recurring monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to track only new listings and price drops for a designer, category or dealer.
- **Proxies**: the default datacenter proxy works well with 1stDibs and is the cheapest option; switch to residential only if you hit blocks during very large runs.

### FAQ

**How do I scrape a specific 1stDibs category or designer?** Paste the category/browse or `/creators/...` URL into `startUrls`, or use `searchQueries` with a keyword. Both paginate automatically (60 items per page).

**Can I get prices in my currency?** Every item ships with `price` (USD) plus `convertedAmounts` for 10 major currencies (EUR, GBP, CAD, AUD, CHF, MXN, DKK, SEK, NOK).

**Where do the dealer phone numbers come from?** 1stDibs publishes a contact phone for many dealers on the item page; the actor reads it directly. Some are 1stDibs call-tracking numbers that route to the dealer. 1stDibs keeps most buyer–seller contact on-platform, so a phone is not available for every dealer.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor price drops and new listings?** Enable `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules). Each run only outputs items that are new or changed (`changeType`: new, price\_drop, price\_rise, sold). Monitor mode works alongside the scheduler — the schedule decides *when* to run, the monitor decides *what's new*.

**Is scraping 1stDibs legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and 1stDibs' terms.

**A field is null — why?** Some items genuinely don't publish a designer (anonymous maker), a price (price upon request), or a specific attribute. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords to search on 1stDibs, e.g. <code>eames chair</code>, <code>rolex datejust</code>, <code>art deco ring</code>. Each query is run as a 1stDibs search and paginated.

## `startUrls` (type: `array`):

Direct 1stDibs URLs: category / browse pages (e.g. <code>https://www.1stdibs.com/furniture/seating/chairs/</code>), search result pages (<code>/search/?q=...</code>), creator pages (<code>/creators/...</code>), or individual item pages (<code>/.../id-f\_12345678/</code>). Paste a filtered/sorted browse URL straight from your browser to reuse its filters.

## `itemUrls` (type: `array`):

Direct 1stDibs item (PDP) URLs to scrape in full detail. Used in addition to searches.

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

Maximum number of items to scrape across all queries and URLs.

## `maxPagesPerSearch` (type: `integer`):

Maximum result pages to paginate per search/category URL (60 items per page).

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

Only include items priced at or above this amount (USD). Items with price-on-request are kept unless you also enable "Available items only".

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

Only include items priced at or below this amount (USD).

## `availableOnly` (type: `boolean`):

Skip items that are sold or on hold.

## `includeItemDetails` (type: `boolean`):

Fetch each item's page for the richest record: full description, condition, period, style, place of origin, all materials, every dimension, all photos, listing views and the seller's full dealer profile (location, years in business, tier, rating). One extra request per item. Turn OFF for fast, cheap listing-only rows.

## `includeDealerLeads` (type: `boolean`):

In addition to item records, push one deduplicated lead record per unique dealer/gallery (type = "dealer") with company, location, years in business, 1stDibs tier, rating, inventory size seen and a 0–100 lead score. Best with "Include full item details" on.

## `deduplicateItems` (type: `boolean`):

Drop duplicate items (same item appearing in multiple searches/pages) within a run.

## `monitorMode` (type: `boolean`):

Remember items across runs in a named key-value store and only output items that are NEW or whose price/availability CHANGED since the last run (adds a <code>changeType</code> field: new, price\_drop, price\_rise, sold). Pair with Apify Schedules to track a city, category or dealer. Works alongside the built-in scheduler — the schedule decides WHEN to run, monitor decides WHAT is new.

## `monitorKey` (type: `string`):

Optional name to separate monitor states for different searches (e.g. <code>warsaw-rings</code>). Reuse the same key across scheduled runs to keep one continuous history.

## `maxConcurrency` (type: `integer`):

Maximum number of parallel requests.

## `proxyConfiguration` (type: `object`):

Proxies to use. Datacenter proxies (the default) work well with 1stDibs and are the cheapest. If you ever hit blocks during very large runs, switch to Residential proxies.

## Actor input object example

```json
{
  "searchQueries": [
    "mid century chair"
  ],
  "maxItems": 100,
  "maxPagesPerSearch": 5,
  "availableOnly": false,
  "includeItemDetails": true,
  "includeDealerLeads": false,
  "deduplicateItems": true,
  "monitorMode": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped item records and optional dealer lead records as JSON items in the default dataset.

# 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 = {
    "searchQueries": [
        "mid century chair"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/1stdibs-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 = {
    "searchQueries": ["mid century chair"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/1stdibs-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 '{
  "searchQueries": [
    "mid century chair"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/1stdibs-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sLYK4WkmkjmNflmee/builds/6Z1dFOG0gcWrYTYUT/openapi.json
