Etsy Scraper - Bestsellers, Cart Counts & Shop Sales
Pricing
from $5.10 / 1,000 listing delivereds
Etsy Scraper - Bestsellers, Cart Counts & Shop Sales
Scrape Etsy bestsellers and search results: 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 for product research.
Pricing
from $5.10 / 1,000 listing delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
6
Monthly active users
5 days ago
Last modified
Categories
Security
Limited permissionsShare
Etsy Scraper: Etsy bestsellers, cart counts and shop sales
This Etsy scraper finds Etsy bestsellers and what is selling now. Search Etsy by keyword or open shops, and get price, discount, Bestseller and Popular now badges, how many people have each item in their cart, and shop total sales.
Run it daily to see sales per day since your last run. Use the digital downloads filter to research printables and templates. Example: printable planner, 3 pages of results.
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 attempts. Run again later. |
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. The first page of a run takes 30 to 90 s, so give runs at least 300 s. |
If Etsy refuses every attempt 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, so the first page of each run takes 30 to 90 seconds. 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 gets past Etsy's protection, which takes 30 to 90 seconds; the pages after it load fast.
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 reach the first page 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.