Pamono Scraper: New Listing & Price Drop Alerts avatar

Pamono Scraper: New Listing & Price Drop Alerts

Pricing

from $1.50 / 1,000 listing returneds

Go to Apify Store
Pamono Scraper: New Listing & Price Drop Alerts

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

Adriana Voss

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

16 days ago

Last modified

Features

Limited permissions

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.

What you typeWhat you getExample
Any wordsA free-text keyword search, like Pamono's own search boxteak armchair
A brand + modelThe same keyword search — exact model names already work wellcarl hansen wishbone
designer: <name>That designer's Pamono page; falls back to a keyword search for the name if no page matchesdesigner: Hans Wegner
A pasted pamono.com linkThe category, designer, maker or search page you paste, used as-ishttps://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. wishbone to keep only Wishbone chairs out of a broader carl hansen search.
  • Exclude listings matching (excludeKeywords) — drop a row if its title or parsed designer contains one of these, e.g. reproduction to 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 catalogsearch route 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 pasted pamono.com category, designer, maker or search link also works as-is — see "How to search" above.
  • Monitoring built in, not bolted on. deltaMode remembers 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.

FieldWhat it is
listingId, url, titlePamono's listing ID, the listing link and its title
price, currencyThe price, and the currency Pamono served on this run (see "Currency" below)
regularPrice, isDiscounted, discountPctPamono's own sale price vs. regular price, and the computed discount %
designer, eraBest-effort, parsed from the title's own "by <designer>, <decade>" convention — null when a title doesn't follow it
imageUrlLink to the main photo (links only, nothing is downloaded)
isSoldTrue when Pamono shows the listing as sold out instead of a price
isNew, changeType, firstSeenAtMonitoring: new, price-drop or seen, and when this watchlist first saw it
previousPrice, priceDropPctMonitoring: the price last seen and the drop in %, on price-drop rows
searchQuery, listingCount, truncatedThe search summary
searchNoteSet when a designer: <name> search fell back to a keyword search (see "How to search") — empty otherwise
newCount, priceDropCount, monitorStatusMonitoring 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:

  1. 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).
  2. Optionally turn on Seed silently so the first run remembers today's listings without sending them all to your webhook.
  3. Save it as a Task and add an hourly Schedule in Apify.
  4. 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 minPriceDropPct below 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

  1. In the Apify Console. Open the actor page and click Start — the searches field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
  2. 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"]}'
  3. 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/excludeKeywords match the title and the parsed designer name before billing, so a maker or word you don't want never costs you a row.
  • minPrice/maxPrice are 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 box
  • carl hansen wishbone — a brand + model; exact searches like this work well
  • designer: Hans Wegner — a designer's page
  • https://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

queryfoundstatussearchQuerysearchNotelistingCounttruncatednewCountpriceDropCountmonitorStatuslistingslistingIdtitlepricecurrencyregularPriceisDiscounteddiscountPctdesignereraimageUrlisSoldavailabilitychangeTypeisNewpreviousPricepriceDropPctfirstSeenAturlscrapedAt
armchairstrueOK<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 costsWhat you getTrade-off
This actor$3 per 1,000 listings, quiet monitoring runs freeFree-text keyword search, Pamono's own sale flag treated as a price-drop signal, built-in new-listing and price-drop monitoringNo condition grade, seller identity or total-matches count — Pamono's own pages don't expose them
Checking Pamono by handFree, plus your timeFull controlDoesn'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_ROWS
and are charged only the start fee. On the very first run with "Seed silently" on, the status is SEEDED.

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".