Pamono Scraper: New Listing & Price Drop Alerts
Pricing
from $1.50 / 1,000 listing returneds
Pamono Scraper: New Listing & Price Drop Alerts
Pamono scraper by keyword, exact model or designer. Source vintage furniture and lighting on Pamono without a login: price, sale flag, designer. New listings for a designer, price drop alerts for Danish design chairs on Pamono. Search several categories in one run, export to Google Sheets or n8n.
Pricing
from $1.50 / 1,000 listing returneds
Rating
0.0
(0)
Developer
Adriana Voss
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Features
Share
Watch a search, 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 searches Pamono, a European/US design and vintage-furniture marketplace, the way you would in your browser: type a keyword or paste a category link, and get one row per listing with the title, price, designer (when the title names one), 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 — including a listing Pamono itself just put on sale.
How to search
| What you type | What you get | Example |
|---|---|---|
| Any words | A free-text keyword search, like Pamono's own search box | teak armchair |
| A brand + model | The same keyword search — exact model names already work well | carl hansen wishbone |
designer: <name> | That designer's Pamono page; falls back to a keyword search for the name if no page matches | designer: Hans Wegner |
A pasted pamono.com link | The category, designer, maker or search page you paste, used as-is | https://www.pamono.com/armchairs |
Be specific — carl hansen wishbone beats chair.
Finding one exact model
Pamono's search box already matches on brand + model, so you don't need a special mode for it —
just type it: carl hansen wishbone returns the CH24 Wishbone Chair listings directly, the same
way it would if you typed it into pamono.com's own search box.
Narrow further
Once a search is running, use the two filters below to keep only what you want without changing the search itself:
- Only include listings matching (
includeKeywords) — keep a row only if its title or parsed designer contains one of these words, e.g.wishboneto keep only Wishbone chairs out of a broadercarl hansensearch. - Exclude listings matching (
excludeKeywords) — drop a row if its title or parsed designer contains one of these, e.g.reproductionto filter out non-original pieces.
Both also take minPrice/maxPrice, applied the same way after fetching.
Who it's for
- Dealers and sourcing agents hunting mid-century and design pieces on Pamono who lose good finds to whoever refreshes the page fastest. A watchlist on "teak armchair" or "art deco mirror", run every hour, puts new listings in your Discord or Telegram without keeping a tab open.
- Interior designers researching what a designer, style or period piece genuinely costs on Pamono right now.
- Resellers watching for Pamono's own markdowns — this actor treats a listing going on sale as a price-drop alert, not just a price falling below what this monitor last saw.
- Bot and workflow builders who want a stable JSON row per listing instead of maintaining their own scraper.
Why this one
- Free-text keyword search, exact model search, or a designer page — not a fixed category
list. Pamono's own homepage advertises a
catalogsearchroute for its search box; this actor uses the same one, so a keyword or a brand+model search (carl hansen wishbone) covers everything a category browse would miss.designer: <name>goes straight to that designer's Pamono page. A pastedpamono.comcategory, designer, maker or search link also works as-is — see "How to search" above. - 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. - Pamono's own sale flag counts too. A listing that goes on sale is a price drop even the first time this monitor sees it — see "Monitoring" below.
- No login, no anti-bot dance. Pamono's category and search pages are plain server-rendered HTML with no CAPTCHA or challenge observed during this build.
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 | Pamono's listing ID, the listing link and its title |
price, currency | The price, and the currency Pamono served on this run (see "Currency" below) |
regularPrice, isDiscounted, discountPct | Pamono's own sale price vs. regular price, and the computed discount % |
designer, era | Best-effort, parsed from the title's own "by <designer>, <decade>" convention — null when a title doesn't follow it |
imageUrl | Link to the main photo (links only, nothing is downloaded) |
isSold | True when Pamono shows the listing as sold out instead of a price |
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, truncated | The search summary |
searchNote | Set when a designer: <name> search fell back to a keyword search (see "How to search") — empty otherwise |
newCount, priceDropCount, monitorStatus | Monitoring summary |
Not in this actor, because Pamono's own listing cards don't carry them (confirmed on ~290 sampled
cards across category and search pages): a posting date, seller identity of any kind, a condition
grade, or a total-matches count. totalAvailable is always empty — see "Limitations" below.
Currency. Pamono formats prices in the currency it decides for the request, and this build found no reliable way to force one: a request from a Hungarian IP was still served in US dollars, with no currency cookie, query parameter or selector anywhere in the page. This actor records whichever currency symbol Pamono actually printed on each run's prices, rather than assuming one.
Monitoring: new listings and price drops
The recipe most buyers use:
- Put your search in
searches(a keyword, or paste a Pamono category or search link), 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": ["teak armchair"],"maxPrice": 1500,"deltaMode": true,"skipFirstRun": true,"alertOnNew": true,"alertOnPriceDrop": true,"minPriceDropPct": 10}
How it decides:
- New means this watchlist has never returned that listing ID before.
- Price drop means the price is at least
minPriceDropPctbelow the price last seen. Because this actor tracks the SALE price (not the regular price) as a listing's price, a listing that goes on sale is naturally a price drop from the second run on. - Pamono's own discount, even on a first sighting. A listing your watchlist has never seen before, but which Pamono already shows as discounted, is delivered as a price-drop alert too — even if "Alert on new listings" is off — so a buyer watching only for markdowns doesn't miss one just because it's also new to the watchlist.
- 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.
Limitations. Pamono's category and search pages expose no total-matches count anywhere in the
page (checked the page's only JSON-LD block — a bare WebSite search-action node, nothing else),
so totalAvailable is always empty and truncated is a best-effort signal based on whether the
last page fetched was still full. A run only sees the newest maxListingsPerSearch listings; a
listing that drops in price after it slides out of that window is not seen again.
Price
- Listing returned: $3 per 1,000 listings
Plus a $0.003 start fee per run. Each event above is billed independently, only when it actually returns data — misses (found:false) are never charged.
- Listings: $3 per 1,000 listings returned, plus a $0.003 start fee per run.
- A monitoring run with nothing new costs the start fee only. A search 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~pamono-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["armchairs","carl hansen wishbone"]}'
- 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:
includeKeywords/excludeKeywordsmatch the title and the parsed designer name before billing, so a maker or word you don't want never costs you a row.minPrice/maxPriceare applied after fetching — Pamono has no price-filter URL parameter this build could find, so these are honoured client-side rather than dropped silently.
How to filter
Every filter below is optional and off by default — leave it out and you get the exact same rows
as before. minPrice/maxPrice and includeKeywords/excludeKeywords already existed; this
section adds availability, brands and sortBy.
1. Available only, cheapest first:
{"searches": ["armchairs"],"availability": "available","sortBy": "price_asc"}
availability filters on Pamono's own sold-out marker (no "reserved" state exists). sortBy
sorts the listings this run fetched, after filtering — Pamono's pages carry no posting date, so
only the two price sorts do anything; leaving it empty (or "Newest") keeps the page's own order.
2. A named designer, sold items included, over a price range:
{"searches": ["lounge chair"],"brands": ["hans wegner"],"minPrice": 500,"maxPrice": 3000,"availability": "all"}
brands is a case-insensitive contains match against the designer name this run already parses
from the title (no extra request) — a listing with no credited designer never matches.
3. Exclude a maker, most expensive first:
{"searches": ["teak chair"],"excludeKeywords": ["ikea"],"sortBy": "price_desc"}
Input
{"searches": ["armchairs","carl hansen wishbone"]}
Four accepted forms, one per line:
teak armchair— any words, like Pamono's own search boxcarl hansen wishbone— a brand + model; exact searches like this work welldesigner: Hans Wegner— a designer's pagehttps://www.pamono.com/armchairs— any category, search or designer URL, pasted directly
Tip: be specific — "carl hansen wishbone" beats "chair". No login required. Accepted formats: teak armchair, carl hansen wishbone, designer: Hans Wegner, https://www.pamono.com/armchairs.
Sample output
| query | found | status | searchQuery | searchNote | listingCount | truncated | newCount | priceDropCount | monitorStatus | listings | listingId | title | price | currency | regularPrice | isDiscounted | discountPct | designer | era | imageUrl | isSold | availability | changeType | isNew | previousPrice | priceDropPct | firstSeenAt | url | scrapedAt |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| armchairs | true | OK | <note (e.g. a "designer:" search that fell back to keywords)> | <monitoring status (quiet / seeded runs)> | <all listings found (full list)> | <price> | <currency (as served this run — see readme)> | <regular price, on sale items only> | <pamono's own sale flag> | <discount % (computed from price vs regular price)> | <designer, parsed from the title when named> | <decade, parsed from the title when named> | <availability (marketplace-filters standard: available/sold)> | <new / price-drop / seen> | <is this listing new?> | <price drop % (this monitor)> | 1970-01-01T00:00:00.000Z |
A real row from a teak armchair run (2026-09-22), trimmed:
{"searchQuery": "teak armchair","listingCount": 5,"listingId": "MZB-2163403","url": "https://www.pamono.com/danish-teak-lounge-chair-1","title": "Danish Teak Lounge Chair","price": 992,"currency": "USD","isDiscounted": false,"designer": null,"imageUrl": "https://cdn20.pamono.com/p/m/2/1/2163403_p41l7o40bq/danish-teak-lounge-chair.png","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~pamono-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \-X POST \-H "Content-Type: application/json" \-d '{"searches":["armchairs","carl hansen wishbone"]}'
n8n. Add an HTTP Request node: Method POST, URL https://api.apify.com/v2/acts/accountable_eel~pamono-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>, Body Content Type JSON, JSON Body {"searches":["armchairs","carl hansen wishbone"]} (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~pamono-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 "Pamono Scraper: Designer Search & Price 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 | Free-text keyword search, Pamono's own sale flag treated as a price-drop signal, built-in new-listing and price-drop monitoring | No condition grade, seller identity or total-matches count — Pamono's own pages don't expose them |
| Checking Pamono by hand | Free, plus your time | Full control | Doesn't scale past a handful of searches and misses whatever appears between visits |
Data & privacy
Data & privacy. This actor reads public search results that anyone can see without logging in. It doesn't log in, solve CAPTCHAs or reveal hidden contact details. Pamono itself exposes no seller identity on its listing cards, so none is collected. Not affiliated with Pamono.
FAQ
Is this allowed? It collects the same public listing data your browser shows, for the searches you choose. It's built for monitoring a search, not for copying the marketplace. Check that your use fits Pamono's 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 designer sometimes empty?
It's parsed from Pamono's own title text ("... by <Designer>, <Decade>"), not a
structured field Pamono provides — a title that doesn't follow that convention leaves it empty
rather than guessing.
Why is currency sometimes different between two runs?
Pamono decides the display currency per request and this build found no way to pin it down (see
"Currency" above); this actor reports whichever currency it was actually served.
What do I need to set up? Nothing. No Pamono 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 "Pamono Scraper: New Listing & Price Drop Alerts".
Related actors
- Chairish Listing Lookup: the same one row per listing shape for Chairish's US vintage furniture and decor marketplace.
- 1stDibs Listing Lookup: global luxury furniture and design, with 10-currency pricing and era tags.
- Selency Listing Lookup: France's vintage furniture and decor marketplace, with material and style tags.
- Vinted Listing Lookup: new-listing and price-drop alerts across 22 Vinted second-hand fashion sites.