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: design and vintage furniture from Pamono's EU/US marketplace with price, sale flag and designer info, plus new-listing and price-drop alerts. 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

Adrian Voss

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

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.

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, 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 search covers everything a category browse would miss. A pasted pamono.com/<category> or pamono.com/catalogsearch/... link also works.
  • 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
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

  • 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 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":["teak armchair"]}'
  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.

Input

{
"searches": [
"teak armchair"
]
}

One search per line — any keyword (e.g. "teak armchair", "art deco mirror") or a pasted pamono.com category or search link. No login required. Accepted formats: teak armchair, art deco mirror, https://www.pamono.com/armchairs, https://www.pamono.com/catalogsearch/result/?q=chaise+lounge.

Sample output

queryfoundstatussearchQuerylistingCounttruncatednewCountpriceDropCountmonitorStatuslistingslistingIdtitlepricecurrencyregularPriceisDiscounteddiscountPctdesignereraimageUrlisSoldchangeTypeisNewpreviousPricepriceDropPctfirstSeenAturlscrapedAt
teak armchairtrueOK<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><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":["teak armchair"]}'

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":["teak armchair"]} (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: Design Furniture 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".