1stDibs Scraper: New Listing & Price Drop Alerts
Pricing
from $1.50 / 1,000 listing returneds
1stDibs Scraper: New Listing & Price Drop Alerts
1stDibs furniture and design scraper by category: price, designer, era and dealer, with new-listing and price-drop alerts for a list of categories. No login required. Pay per listing; misses and quiet runs are free.
Pricing
from $1.50 / 1,000 listing returneds
Rating
0.0
(0)
Developer
Adrian Voss
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Watch a category, get only what's new. New listings and price drops since your last run, charged per new row, free on quiet days. Schedule it hourly and send it to Discord, Slack, Google Sheets or n8n.
This actor reads 1stDibs the way you'd browse it: pick one or more furniture/design categories (or paste a category link straight from your browser), and get one row per listing with the title, price, a euro conversion 1stDibs itself computes, the designer or maker when credited, the era, the main photo and the link. Turn on monitoring and each run returns only the listings that appeared, or got cheaper, since the previous run.
Who it's for
- Dealers and sourcing agents who lose good pieces to whoever refreshes the page fastest. A watchlist on "armchairs" or a pasted category link with your price cap, run every hour, puts new listings in your Discord or Telegram without keeping a tab open.
- Interior designers researching what a style or period genuinely costs on the market right now, across categories, in one currency.
- Resellers who want a price-check before they flip a piece, or a running log of a category's price movement.
- Bot and workflow builders who are tired of maintaining their own scraper each time 1stDibs changes its site. You get a stable JSON row per listing and keep your own logic.
Why this one
- Every furniture/design category in one run. One line runs on the category you name or paste; the actor never guesses a category slug — every keyword in its known list maps to a real 1stDibs navigation path, read live off 1stDibs' own site menu.
- Monitoring built in, not bolted on.
deltaModeremembers what each watchlist has seen. New listings and price drops (with your own minimum drop %) come back; everything else is removed before billing. A quiet run returns one summary row and costs only the start fee. - Global pricing, one currency.
priceis 1stDibs' own base USD price;priceEuris 1stDibs' own EUR conversion (not a third-party rate), so no extra request is needed to compare across listings. - Dealer transparency. 1stDibs is a vetted-dealer marketplace, not a peer-to-peer one — every
listing is
sellerType: "dealer". You get an anonymous seller hash to group listings by dealer without a name, and the raw dealer company name only if you ask for it.
Categories
Keywords match this actor's known category list (read live off 1stDibs' own furniture navigation menu — never guessed). A pasted 1stDibs category URL always works too, and keeps any filters already in its query string.
| Keyword | Category | Keyword | Category |
|---|---|---|---|
armchairs, arm chairs | Armchairs | night stands, nightstands | Night Stands |
chairs | Chairs | floor lamps | Floor Lamps |
dining chairs | Dining Room Chairs | table lamps | Table Lamps |
lounge chairs | Lounge Chairs | chandeliers, chandeliers & pendants | Chandeliers & Pendants |
sofas, couches | Sofas | wall lights, sconces | Wall Lights & Sconces |
dining tables | Dining Tables | mirrors | Mirrors |
coffee tables | Coffee Tables | rugs, carpets, rugs & carpets | Rugs & Carpets |
side tables | Side Tables | wall decor | Wall Decor |
desks, writing desks | Desks | sculptures | Sculptures |
cabinets | Cabinets | vases, vases & vessels | Vases & Vessels |
dressers | Dressers | bowls, bowls & baskets | Bowls & Baskets |
bookcases | Bookcases | boxes | Boxes |
credenzas | Credenzas | clocks | Clocks |
wardrobes | Wardrobes | pillows, pillows and throws | Pillows and Throws |
mid-century modern | Mid-Century Modern (lighting) | art deco | Art Deco (lighting) |
scandinavian modern | Scandinavian Modern (lighting) | home accents | Home Accents |
A keyword outside this list is rejected with a BAD_FORMAT row explaining why, rather than guessed
into a broken URL — paste the category link from your browser instead; it will always work.
What you get
By default each listing is its own row. Every row also repeats the search it came from.
| Field | What it is |
|---|---|
listingId, url, title | 1stDibs' item ID, the listing link and its title |
price, currency | 1stDibs' own base price, always in USD |
priceEur | 1stDibs' own EUR conversion of price (not a third-party rate) |
designer | Credited designer or maker, when 1stDibs shows one — often empty, not every piece is attributed |
era | e.g. "1940s". 1stDibs has no exact listing date, so this and isNewListing/monitoring are the only "how old/new" signals |
category | 1stDibs' internal category code |
imageUrl | Link to the main photo (links only, nothing is downloaded) |
country | The dealer's country |
sellerType, sellerHash | Always dealer (see "Why this one"), and an anonymous 16-character dealer hash |
isNewListing, isSold | 1stDibs' own flags |
isNew, changeType, firstSeenAt | Monitoring: new, price-drop or seen, and when this watchlist first saw it |
previousPrice, priceDropPct | Monitoring: the price last seen and the drop in %, on price-drop rows |
searchQuery, listingCount, totalAvailable, truncated | The search summary |
newCount, priceDropCount, monitorStatus | Monitoring summary |
Not available anywhere on 1stDibs' category pages, so not in this actor: a structured condition grade
(1stDibs vintage/antique listings don't carry one — only free-text framing like "Vintage 1940s
European Mid-Century Modern"), and an exact listing date (only the era, e.g. "1940s").
Monitoring: new listings and price drops
The recipe most buyers use:
- Put your categories in
searches(keywords from the table above, or paste a category link with your own price filter already applied), and turn on Only return listings that are new, or cheaper, since the last run (deltaMode). - Optionally turn on Seed silently so the first run remembers today's listings without sending them all to your webhook.
- Save it as a Task and add an hourly Schedule in Apify.
- Add a webhook or integration on the Task for Run succeeded: Discord or Slack webhook, Telegram bot via n8n or Make, a Google Sheets append, or an HTTP call to your own bot.
{"searches": ["armchairs"],"maxPrice": 3000,"deltaMode": true,"skipFirstRun": true,"alertOnNew": true,"alertOnPriceDrop": true,"minPriceDropPct": 10}
How it decides:
- New means this watchlist has never returned that item ID before.
- Price drop means the USD price is at least
minPriceDropPctbelow the price last seen. The remembered price updates every run, so a second cut is measured from the latest price. - Unchanged listings are removed before you are billed. A run with nothing new returns one summary
row with
monitorStatus: NO_NEW_ROWS,listingCount: 0, and costs only the start fee. - Each watchlist remembers up to 5,000 listings, oldest forgotten first.
The window limitation. A run only sees the newest maxListingsPerSearch listings sorted by
1stDibs' own "Newest" order (60 by default, up to 300). A listing that drops in price after it has
slid out of that window is not seen again. For price-drop alerts keep categories narrow or raise
maxListingsPerSearch.
A slow origin. 1stDibs' own pages take 5-20 seconds to respond. This actor pages up to 5 times (300 listings) per search per run and defaults "Max concurrency" to 2 rather than the usual 5 — don't raise it much on this actor, it will just queue behind the same slow origin.
Price
- Listings: $3 per 1,000 listings returned, plus a $0.00005 start fee per run.
- A monitoring run with nothing new costs the start fee only. A category that returns nothing is never billed.
How to use
- In the Apify Console. Open the actor page and click Start — the
searchesfield is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found. - Via the API. Call it directly with a POST request — no Console needed once you have an API token:
curl "https://api.apify.com/v2/acts/accountable_eel~1stdibs-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["armchairs"]}'
- On a schedule. Save this actor as an Apify Task with the input you want, then add a Schedule (hourly, daily, weekly) so it runs on its own — no server of your own required.
Tips:
- Paste a category link from 1stDibs when you need a sub-category not in the keyword table, or a category already filtered your way.
includeKeywords/excludeKeywordsmatch the title, designer and category before billing, so "reproduction" inexcludeKeywordsnever costs you a row.- 1stDibs' own robots.txt blocks free-text search (
/search/,/soa/) — that's why this actor works by category, not open keyword search.
Input
{"searches": ["armchairs"]}
One per line: a pasted 1stDibs furniture/design category URL, or a category keyword from this actor's known list (e.g. "armchairs", "coffee tables", "chandeliers"). 1stDibs' own robots.txt blocks free-text search, so unmapped keywords are rejected with a clear reason instead of guessed. Accepted formats: armchairs, coffee tables, https://www.1stdibs.com/furniture/seating/lounge-chairs/.
Sample output
| query | found | status | searchQuery | listingCount | totalAvailable | truncated | newCount | priceDropCount | monitorStatus | listings | listingId | title | price | currency | priceEur | designer | era | category | imageUrl | country | sellerType | sellerHash | sellerId | sellerName | isNewListing | isSold | changeType | isNew | previousPrice | priceDropPct | firstSeenAt | url | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| armchairs | true | OK | <total matching on 1stdibs> | <monitoring status (quiet / seeded runs)> | <all listings found (full list)> | <1stdibs item id> | <price (usd)> | <price in eur (1stdibs' own conversion)> | <designer / maker (when 1stdibs credits one)> | <era (e.g. "1940s") — 1stdibs has no exact date> | <1stdibs category code> | <seller's country> | <seller type (always "dealer" — 1stdibs is a vetted-dealer marketplace)> | <seller id (raw seller info only)> | <seller company name (raw seller info only)> | <1stdibs' own "new listing" flag> | <new / price-drop / seen> | <is this listing new?> | <previous price seen by this monitor (usd)> | <price drop % (this monitor)> | 1970-01-01T00:00:00.000Z |
A real row from an armchairs run (2026-09-22), trimmed:
{"searchQuery": "armchairs","listingCount": 60,"totalAvailable": 18987,"truncated": true,"listingId": "f_51834272","url": "https://www.1stdibs.com/furniture/seating/lounge-chairs/mid-century-lounge-chair-cane-walnut/id-f_51834272/","title": "Mid-Century Lounge Chair in Cane and Walnut","price": 4400,"currency": "USD","priceEur": 3911.71,"designer": null,"era": "1940s","category": "F_SEA_LOU","imageUrl": "https://a.1stdibscdn.com/mid-century-lounge-chair-in-cane-and-walnut-for-sale/f_9331/f_518342721789555095360/tmp_image_master.JPEG","country": "Netherlands","sellerType": "dealer","sellerHash": "3a91f2c8e4b6d017","isNewListing": false,"isSold": false}
Use it from Clay, n8n, Make, or an AI agent
This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.
curl "https://api.apify.com/v2/acts/accountable_eel~1stdibs-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["armchairs"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~1stdibs-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["armchairs"]} (swap in an expression from an earlier node for a real value).
Clay. Add an "HTTP API" column: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~1stdibs-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body {"searches":["{{search}}"]}, mapping the row's search into the searches array.
MCP. In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "1stDibs Scraper: Furniture Price & New Listing Alerts" — the agent will find and run this actor.
Discord or Slack alerts without code. Schedule the monitoring Task hourly, then add an
integration on the Task: in n8n or Make, trigger on "Apify: run succeeded", read the run's dataset,
skip rows where listingCount is 0, and post title, price, designer and url to a Discord or
Slack webhook. Google Sheets users can append the same rows for a running price log.
vs. alternatives
| What it costs | What you get | Trade-off | |
|---|---|---|---|
| This actor | $3 per 1,000 listings, quiet monitoring runs free | Category search across 1stDibs' furniture/design catalog, dealer transparency, built-in new-listing and price-drop monitoring | Category search only (1stDibs' robots.txt blocks free text); no structured condition grade, because 1stDibs doesn't publish one |
| Generic scrape-on-demand actors | Varies, usually per-run | A dump of one page's results | No monitoring; you rebuild "what's new" and price-drop detection yourself |
| Checking 1stDibs by hand | Free, plus your time | Full control | Doesn't scale past a handful of categories and misses whatever appears between visits |
Data & privacy
Data & privacy. This actor reads public category results that anyone can see without logging in. It
doesn't log in, solve CAPTCHAs or reveal hidden contact details. Dealer identity is off by default: you
get a dealer flag and an anonymous seller hash so you can group listings by dealer without
names. Turning on seller info makes you responsible for having a lawful reason to process it. Not
affiliated with 1stDibs.
FAQ
Is this allowed? It collects the same public listing data your browser shows, for the categories you choose. It's built for monitoring a category, not for copying the marketplace. Check that your use fits 1stDibs' terms and your local law.
Why did my monitoring run return nothing? Nothing new or cheaper appeared since the last run. You get one row with
monitorStatus: NO_NEW_ROWSSEEDED.
Why is truncated true?
Either the run stopped at its maxListingsPerSearch cap before reaching the end of the category, or
1stDibs refused a page partway through (the listings collected up to then are delivered and billed;
nothing else is).
Can I search by keyword instead of category? No — 1stDibs' own robots.txt disallows its search pages, so this actor only reads category pages. Use the category table above, or paste a category link.
Why is designer often empty?
1stDibs only credits a designer/maker on listings where the dealer entered one — most vintage
pieces are attributed by style and era instead. This isn't a parsing gap; it's genuinely absent on
those listings.
What do I need to set up? Nothing. No 1stDibs account, no cookies, no proxy settings.
Can an AI agent call this? Yes, through the Apify MCP server or the API call shown above. Ask for "1stDibs Scraper: Furniture Price & New Listing Alerts".
Related actors
- Selency Listing Lookup: the same one row per listing shape for Selency's French vintage furniture and decor marketplace.
- Grailed Listing Lookup: sold-price comps and new-listing alerts for resale menswear and streetwear.
- Vinted Listing Lookup: new-listing and price-drop alerts across 22 Vinted second-hand fashion sites.