Etsy Shop Monitor (Beta) - Listings, Price, Sales & Reviews avatar

Etsy Shop Monitor (Beta) - Listings, Price, Sales & Reviews

Pricing

from $60.00 / 1,000 shop page reads

Go to Apify Store
Etsy Shop Monitor (Beta) - Listings, Price, Sales & Reviews

Etsy Shop Monitor (Beta) - Listings, Price, Sales & Reviews

Beta. Track competitor Etsy shops: new listings, price changes, sales started or ended, removed listings, total shop sales and new reviews since your last run. Changes only, no login. Etsy's anti-bot protection blocks some pages; blocked pages are not charged.

Pricing

from $60.00 / 1,000 shop page reads

Rating

0.0

(0)

Developer

Ivora Tools

Ivora Tools

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

Etsy Shop Monitor (Beta): New Listings, Price, Sales & Review Tracker

Beta. It works, but Etsy's anti-bot protection makes it less reliable than my other Actors. Please read the known limitations below before scheduling it.

Keep an eye on competitor Etsy shops and see only what changed since your last run: new listings, price drops and increases, sales that started or ended, listings that disappeared, how many sales the shop made, and new reviews.

I built this because checking rival shops on Etsy by hand is slow and you always miss something. Run it on a daily schedule and each run's output is a short list of changes.

  • No login, no Etsy API key. It reads the public shop pages the way a visitor would.
  • Changes only. The first run saves a baseline, and later runs output only the differences.
  • A free summary row per shop: total sales, sales since the last run, review count, rating, followers, price range and how many listings are on sale.
  • You can also watch single listings (any shop) for price, sale, stock and review-count changes.

Known limitations (please read)

  • Etsy blocks some pages. Even through residential proxies and a real browser, some pages get blocked. When that happens, a shop is read only partly or not at all. Blocked pages aren't charged.
  • Runs are slow. Expect 30–90 seconds per shop, and a few minutes when Etsy blocks and the IP has to change.
  • Big shops are read only partly. By default the first 3 pages (108 listings) are read, in the shop's own order. New listings beyond those pages and removed listings in big shops aren't detected.
  • Sales are shop-level only. Etsy doesn't show sales per listing.
  • Only the last ~10 reviews shown on the shop page are compared.
  • It may break if Etsy tightens its protection. I'll try to fix it, but I can't promise how fast.

Sample output

Change rows from a real cloud test run (Oct 2026, shop SilverRainSilver), shortened. To produce rows in that test I edited the saved baseline. On a real schedule they appear when the shop really changes.

[
{"type": "change", "changeType": "newListing", "shop": "SilverRainSilver", "listingId": "4591615189",
"title": "Sterling Silver Pearl Mistletoe Earrings and Necklace Set", "price": 29.07, "currency": "USD",
"url": "https://www.etsy.com/listing/4591615189/sterling-silver-pearl-mistletoe-earrings"},
{"type": "change", "changeType": "priceChange", "shop": "SilverRainSilver", "title": "Sterling Silver Moonstone Droplet Ear Threader Earrings",
"direction": "down", "oldPrice": 21.52, "newPrice": 17.93, "changePct": -16.7, "currency": "USD"},
{"type": "change", "changeType": "shopSales", "shop": "SilverRainSilver", "oldSales": 2194645, "newSales": 2194683, "salesDelta": 38},
{"type": "change", "changeType": "newReview", "shop": "SilverRainSilver", "reviewer": "Steven", "rating": 5, "date": "Oct 8, 2026",
"text": "cute ring. i hope my wife likes it as a gift.", "listingTitle": "Sterling Silver Bluebell Enamel Open Ring"}
]

How it works

Etsy protects its site with strong bot protection, so plain HTTP requests are always blocked. This Actor opens the pages in a real (stealth) Firefox browser through Apify residential proxy. The proxy is included in the price, so you don't need your own.

  1. For every shop it reads etsy.com/shop/<name> page by page (36 listings per page, up to maxPagesPerShop). Each listing gives its ID, title, price, original price (when on sale), currency, URL and image.
  2. From the first page it also takes the shop's total sales, review count, rating, followers and the latest reviews.
  3. It saves all of this in a named key-value store (stateStoreName). The next run compares against it:
    • New listing is a listing ID not seen before.
    • Price change includes the old and new price and the change %.
    • Sale started / ended means a crossed-out original price appeared or disappeared.
    • Removed listing is a listing that's gone from a complete read of the shop (sold out, expired, deactivated or deleted, because Etsy doesn't say which). It's only reported when every page was read in both runs.
    • Shop sales is the change in the shop's total sales counter, which tells you roughly how many orders a competitor got.
    • New review is a review in the shop's latest reviews that wasn't there before.
  4. For single listing URLs, the listing page is read and compared the same way, plus sold out / back in stock and the listing's own review count.

Input example

{
"shops": ["SilverRainSilver", "https://www.etsy.com/shop/MignonandMignon"],
"listingUrls": ["https://www.etsy.com/listing/870847843/letter-necklace"],
"maxPagesPerShop": 3,
"firstRunBehavior": "baseline",
"changeTypes": ["newListing", "priceChange", "saleChange", "removedListing", "shopSales", "newReview"],
"minPriceChangePct": 2,
"stateStoreName": "my-etsy-competitors"
}
OptionWhat it does
shopsShop names or shop URLs
listingUrlsOptional single listings to watch
maxPagesPerShopPages per shop (36 listings each). The default of 3 covers 108 listings
firstRunBehaviorbaseline (default) only saves state. outputListings also outputs the listings it read (charged per row)
listingRowsLimitCaps those first-run listing rows per shop
changeTypesWhich changes to output. Unselected types are not charged
minPriceChangePctIgnore small price moves
stateStoreNameOne name per independent monitor or task
proxyCountryCountry of the residential IP (default US, so prices are in USD)

Output

  • change rows (charged): changeType is one of newListing, priceChange, saleChange, stockChange, removedListing, shopSales, newReview or listingReviews. Each row also has direction, old and new values, and the listing's title, price, currency, URL and image.
  • listing rows (charged, only when asked for on the first run).
  • summary rows (free, one per shop): totalSales, salesSinceLastRun, reviewCount, rating, followers, listingsRead, allListingsRead, onSaleListings, price range, change counts and notes.
  • error rows (free): not_found (wrong shop name or inactive listing) or blocked.

Honest limits

  • Etsy fights scrapers hard. Some pages get blocked even through residential IPs. On the first page of a shop the Actor tries up to 3 fresh IPs. On later pages it tries once and then stops that shop, to keep runs short, but a run can still end with a page or a shop marked blocked. That happened in my tests, mostly from the 3rd page of a shop onward. Blocked pages and shops are not charged. The summary says when only part of a shop was read.
  • It's slow. It uses a real browser, so expect about 30–90 seconds per shop, and longer when Etsy blocks and the IP has to change. Daily monitoring of a handful of shops works fine. Exporting thousands of listings is not what this is for.
  • Listings come in the shop's own order. Etsy blocks the "newest first" sort for robots. A new listing placed on a page beyond maxPagesPerShop won't be noticed, and removed listings are detected only when the whole shop fits in maxPagesPerShop. For big shops, watch the important listings with listingUrls.
  • Sales are shop-wide. Etsy doesn't publicly show sales per listing, so shopSales is the shop's total counter.
  • Reviews: only the latest reviews shown on the shop page (about 10) are compared. If a huge shop gets more than that between two runs, some reviews will be missed. The review count in the summary is always exact.
  • Sold-out listings usually just vanish from the shop page, so in shop mode they show up as removedListing. Single listing URLs show sold out / back in stock explicitly.
  • Prices follow the proxy country's currency (USD by default). Titles may sometimes come in another language if Etsy guesses the language from the IP. That doesn't affect change detection, which works on listing IDs and prices.

Pricing (pay per event)

EventPrice
Actor start$0.01 per GB of memory, so $0.02 per run at the default 2 GB
Shop page read (up to 36 listings)$0.06
Single listing checked$0.06
Change row (or first-run listing row when requested)$0.002

Summary and error rows are free. Blocked pages aren't charged. The price is higher than for my non-browser Actors because each page needs a real browser and residential proxy.

Examples:

  • 5 competitor shops of up to 108 listings, checked daily, with about 5 changes each: $0.02 + 15 × $0.06 + 25 × $0.002 = $0.97 per day.
  • 5 small shops (one page each), daily: $0.02 + 5 × $0.06 + 25 × $0.002 = $0.37 per day (about $11 per month).

Daily alerts to Slack or email

  1. Fill in the input and click Save as a new task.
  2. In Schedules, add the task to a daily schedule.
  3. In the task's Integrations tab, add Slack, Gmail or a webhook (Zapier, Make, n8n). Read the changes from https://api.apify.com/v2/datasets/{defaultDatasetId}/items?view=changes.

Questions or a shop that doesn't work? Open an issue in the Issues tab, and I'll take a look.