Etsy Scraper - Bestsellers, In-Cart Counts & Shop Sales avatar

Etsy Scraper - Bestsellers, In-Cart Counts & Shop Sales

Pricing

from $5.10 / 1,000 listing delivereds

Go to Apify Store
Etsy Scraper - Bestsellers, In-Cart Counts & Shop Sales

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

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

9 hours ago

Last modified

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: salesSinceLastRun and salesPerDay per shop, inCartsChange and becameBestseller per 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: inCartsChange and becameBestseller tell 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

FieldTypeWhat it does
modesearch, shop or listingWhat to scrape. Default search.
searchQuerieslist of textKeywords, one per line, as typed on Etsy (Search mode).
shopUrlslist of textShop URLs or shop names (Shop mode).
listingUrlslist of textListing URLs or ids (Listing mode).
maxItemsnumberListings per keyword or per shop. Default 48. In Shop mode, 0 returns only the summary row.
maxPagesnumberSafety cap on pages per keyword or shop. Default 5.
sortByrelevance, newest, price_low, price_high, top_reviewsSearch order.
digitalOnlytrue/falseOnly instant digital downloads.
minPrice, maxPricenumberPrice range in USD.
includeAdstrue/falseKeep sponsored cards (marked isAd). Default true.
compareWithPreviousRuntrue/falseAdd the change since your last run. Default true.
proxyConfigurationproxyUS 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 run
  • salesPerDay = the same, scaled to 24 hours (shown when the runs are at least one hour apart)
  • inCartsChange, previousPrice and becameBestseller for 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) with rating, reviewCount, category, categoryPath, quantityAvailable, availability, description, shopRating, shopReviewCount, shopSalesApprox, shopFavorites, isBestseller, and boughtLast24h / inCartsCount when 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:

  • inCartsCount comes 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 in inCartsText. 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.
  • yearsOnEtsy is 0 for shops younger than one year.
  • shopSalesApprox is the rounded figure shown on search cards ("9.9k sales"). The exact count is totalSales on the shop row.
  • Search results include ads by default because they are part of what buyers see. Use isAd to filter them.

Download as JSON, CSV, Excel or through the API from the run's Output tab.

Error codes (never charged)

CodeMeaning
INVALID_INPUTA shop name, listing URL or option could not be understood. The message says which.
BLOCKEDEtsy refused the page after several fresh sessions. Run again later; each run uses new IPs.
NOT_FOUNDThe shop or listing does not exist anymore (Etsy answered 404).
NO_DATAThe listing page opened but had no product data.
NOT_REACHEDThe 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:

EventPrice
Listing delivered (search or shop card)US$ 0.006 (US$ 6.00 per 1,000)
Shop summary deliveredUS$ 0.006
Full listing page deliveredUS$ 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_REACHED rows.
  • 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.