Etsy Scraper - Bestsellers, In-Cart Counts & Shop Sales
Pricing
from $5.10 / 1,000 listing delivereds
Etsy Scraper - Bestsellers, In-Cart Counts & Shop Sales
Scrape Etsy search results and shops: price, discount, Bestseller and Popular now badges, how many people have each item in their cart, shop total sales and sales per day since your last run. Digital downloads filter. Error rows are free.
Pricing
from $5.10 / 1,000 listing delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Etsy Scraper: Bestsellers, in-cart counts and shop sales per day
Scrape Etsy search results and shops into one table: title, price, original price and discount, the Bestseller, Popular now and Star Seller badges, whether it is an ad or a digital download, and the numbers buyers see but other scrapers skip: how many people have each item in their cart and how many sales the shop has made. Turn on the daily schedule and every run adds sales since your last run and sales per day for each shop.
Built for Etsy product research: find what sells before you make it, watch competitor shops, and track which listings are heating up. No Etsy account, no API key, no cookies to paste.
At a glance
- Price per 1,000 listings, Free plan: US$ 6.00
- Fee per run: US$ 0.02, charged only after the run gets past Etsy's bot protection
- Three modes: search results by keyword, shops (summary + every item), full listing pages
- Demand signals: Bestseller, Popular now, Star Seller, in-cart count, "bought in the past 24 hours", shop sales, seller tenure
- Sales velocity:
salesSinceLastRunandsalesPerDayper shop,inCartsChangeandbecameBestsellerper item - Filters: digital downloads only, min and max price, sort order, skip ads
- Proxy: US residential included in the price
- Error rows (blocked page, invalid input, listing not found): free, with an
errorCode
One real row
From a test on 2026-10-09, search budget spreadsheet google sheets, page 1:
{"type": "listing","source": "search","searchQuery": "budget spreadsheet google sheets","page": 1,"position": 2,"listingId": "4316136064","title": "Simple Budget Spreadsheet: Google Sheets Budgeting Planner (Digital Download)","url": "https://www.etsy.com/listing/4316136064/simple-budget-spreadsheet-google-sheets","price": 5.4,"originalPrice": 9.0,"currency": "USD","discountPercent": 40,"isAd": true,"isBestseller": true,"isPopularNow": false,"isStarSeller": true,"isDigitalDownload": true,"inCartsCount": null,"shopName": "AbbyOrganizes","shopId": "58970278","shopSalesApprox": 9900,"shopTenure": "1 year on Etsy","shopYearsOnEtsy": 1,"shipsFrom": "Pittsburgh, Pennsylvania","scrapedAt": "2026-10-09T23:41:12Z"}
And a shop summary row (Shop mode), with the comparison fields that appear from the second scheduled run on:
{"type": "shop","shopName": "DesignStudioTeti","url": "https://www.etsy.com/shop/DesignStudioTeti","slogan": "Printable Planners, Calendars, Resume Templates & more","location": "Houten, The Netherlands","rating": 4.9,"reviewCount": 7572,"totalSales": 84425,"admirers": 8063,"yearsOnEtsy": 13,"previousTotalSales": 84301,"salesSinceLastRun": 124,"hoursSinceLastRun": 24.0,"salesPerDay": 124.0}
The comparison values above show the format; they depend on your own previous run.
What you can do with it
- Validate a product idea: search the keyword, count Bestseller and Popular now badges on page 1, look at prices and discounts, and see how many sales the shops behind those listings have.
- Spy on competitor shops: schedule Shop mode daily and get each shop's sales per day, new items and which items people are adding to their carts.
- Find rising listings:
inCartsChangeandbecameBestsellertell you what started selling since the last run. - Price research: original price, sale price and discount for every card, filtered by price range.
- Lead lists of Etsy sellers: shop name, tenure, total sales and where they ship from.
Input
| Field | Type | What it does |
|---|---|---|
mode | search, shop or listing | What to scrape. Default search. |
searchQueries | list of text | Keywords, one per line, as typed on Etsy (Search mode). |
shopUrls | list of text | Shop URLs or shop names (Shop mode). |
listingUrls | list of text | Listing URLs or ids (Listing mode). |
maxItems | number | Listings per keyword or per shop. Default 48. In Shop mode, 0 returns only the summary row. |
maxPages | number | Safety cap on pages per keyword or shop. Default 5. |
sortBy | relevance, newest, price_low, price_high, top_reviews | Search order. |
digitalOnly | true/false | Only instant digital downloads. |
minPrice, maxPrice | number | Price range in USD. |
includeAds | true/false | Keep sponsored cards (marked isAd). Default true. |
compareWithPreviousRun | true/false | Add the change since your last run. Default true. |
proxyConfiguration | proxy | US residential by default. |
Example, three keywords, digital only:
{"mode": "search","searchQueries": ["digital planner", "wedding invitation template", "svg cut file"],"digitalOnly": true,"maxItems": 60}
Example, daily shop tracking:
{"mode": "shop","shopUrls": ["https://www.etsy.com/shop/DesignStudioTeti", "AbbyOrganizes"],"maxItems": 100,"compareWithPreviousRun": true}
How sales tracking works
Etsy shows each shop's total number of sales. With compareWithPreviousRun on, the Actor saves that number (and each
listing's in-cart count, price and Bestseller badge) in a key-value store named etsy-scraper-state in your own Apify
account. On the next run it subtracts:
salesSinceLastRun= total sales now minus total sales at your previous runsalesPerDay= the same, scaled to 24 hours (shown when the runs are at least one hour apart)inCartsChange,previousPriceandbecameBestsellerfor each listing seen before
Schedule the Actor once a day (Apify Schedules) for clean daily numbers. The state belongs to your account only; delete the key-value store to start over.
Output
Every row has a type:
listing: a card from a search page or a shop page.shop: a shop summary (Shop mode), one per shop.listingDetail: a full listing page (Listing mode) withrating,reviewCount,category,categoryPath,quantityAvailable,availability,description,shopRating,shopReviewCount,shopSalesApprox,shopFavorites,isBestseller, andboughtLast24h/inCartsCountwhen Etsy shows them (in a test on 2026-10-10 a budget template page showed 59 purchases in the past 24 hours).error: something that could not be read. Free.
Notes on the fields:
inCartsCountcomes from Etsy's "N people have this in their cart" note. Etsy shows it on shop pages and some listing pages, not on search cards; "Over 20" is returned as 20 with the original text ininCartsText. It shows up mostly on physical items: in a test on 2026-10-10, 1 of 190 digital-download cards in six shops carried it.- Etsy shows Bestseller and Popular now badges on search cards and listing pages, not on shop pages. To see which of a shop's items carry a badge, search its keywords or use Listing mode.
yearsOnEtsyis 0 for shops younger than one year.shopSalesApproxis the rounded figure shown on search cards ("9.9k sales"). The exact count istotalSaleson the shop row.- Search results include ads by default because they are part of what buyers see. Use
isAdto filter them.
Download as JSON, CSV, Excel or through the API from the run's Output tab.
Error codes (never charged)
| Code | Meaning |
|---|---|
INVALID_INPUT | A shop name, listing URL or option could not be understood. The message says which. |
BLOCKED | Etsy refused the page after several fresh sessions. Run again later; each run uses new IPs. |
NOT_FOUND | The shop or listing does not exist anymore (Etsy answered 404). |
NO_DATA | The listing page opened but had no product data. |
NOT_REACHED | The run timeout came before this input. Opening an Etsy session takes 30 to 90 s, so give runs at least 300 s. |
If Etsy refuses every session in a run, the run ends without delivering or charging anything.
Pricing
Pay per event, no monthly fee:
| Event | Price |
|---|---|
| Listing delivered (search or shop card) | US$ 0.006 (US$ 6.00 per 1,000) |
| Shop summary delivered | US$ 0.006 |
| Full listing page delivered | US$ 0.015 |
| Run started (only after the bot protection is passed) | US$ 0.02 |
Examples: one keyword, 60 listings: about US$ 0.38. Ten competitor shops tracked daily with their 40 newest items each: about US$ 2.48 per day. Apify platform usage and the residential proxy are included.
Limitations
- Etsy uses strong bot protection. Each run opens a real browser session first, which takes 30 to 90 seconds and
sometimes needs a few IPs (about 1 attempt in 10 is refused and the next IP is tried). After that, pages load in
about a second each. Keep the run timeout at 300 s or more; with less, inputs come back as free
NOT_REACHEDrows. - Search pages show up to about 60 listings and Etsy limits how deep search goes; use more specific keywords for more coverage instead of many pages.
- Etsy does not publish per-listing sales. Shop sales, badges and in-cart counts are the public demand signals; this Actor returns them exactly as Etsy shows them.
- Prices are in USD as seen from the US.
- Only public pages are read. No login, no buyer data, no private messages.
FAQ
Do I need an Etsy API key? No.
Why is the first page slower? The run first opens a browser to pass Etsy's protection, then reuses that session for fast page loads.
Can I get sales for a single listing? Etsy does not publish a sales total per listing. Listing mode returns
boughtLast24h when Etsy shows "N people bought this in the past 24 hours"; combine it with the shop's daily sales,
the in-cart count and the Bestseller badge.
Does it work for non-English Etsy? Pages are read in English from the US. Listings from every country appear.
Can I schedule it? Yes. Daily schedules are what make salesPerDay useful.
Changelog
- 18 Oct 2026: a run with a timeout too short to open the first session now says so (
NOT_REACHED) instead of reporting a block. An empty input runs the example search. - 0.1 (2026-10): search, shop and listing modes; demand badges; in-cart counts; shop sales; daily comparison.