Etsy Scraper | 💵$3 per 1,000 listings
Pricing
from $2.40 / 1,000 listing scrapeds
Etsy Scraper | 💵$3 per 1,000 listings
[💵 $3 / 1K] Etsy search listings with the sponsored/organic split as a real field, plus typed sale price, original price and discount percent in one pinned currency. Batch many keywords, deduplicated across them. No proxy setup, no captcha.
Pricing
from $2.40 / 1,000 listing scrapeds
Rating
0.0
(0)
Developer
WebData Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Etsy Scraper
Scrape Etsy search results into typed rows: sale price, original price, discount percent, shop rating, and a real sponsored-vs-organic flag on every listing.
Etsy search is a wall of cards where paid placements sit next to organic results with nothing but a small "Ad from shop" label to tell them apart, and every price is a string with a currency symbol glued to it. Most Etsy scrapers hand you that mess back: one price field with "€360.83" in it, no idea which rows Etsy was paid to show you, and a currency that silently changes with the exit country. This Actor returns the numbers already separated and typed, in one currency you pin for the whole run, with isAd on every row so you can measure how much of a keyword is bought rather than earned.
✅ What you get / ❌ what this isn't
| ✅ What you get | ❌ What this isn't |
|---|---|
isAd on every row, so you can compute ad density per keyword | Not a dump that quietly mixes paid placements into "top results" |
price, originalPrice, discountPercent as separate numbers | Not one string field with a currency symbol you have to strip |
| One currency for the whole run, pinned by input | Not whatever currency Etsy guessed from the exit IP |
Sorts that Etsy actually applies (price_asc, price_desc, date_desc) | Not an enum with values Etsy silently ignores while returning relevance order |
| Many keywords per run, deduplicated across them | Not one query per run, billing you twice for listings two keywords share |
| Rows streamed and charged as each page is parsed | Not a run that buffers everything and delivers nothing if it times out |
🔎 Why use this Actor
- Sponsored split as a first-class field. Etsy fills roughly a third of a search page with paid slots.
isAdpluspositionandpagelets you measure ad density for a keyword, or drop paid rows entirely with one checkbox. - Price economics, not price strings. A discounted listing arrives as
price,originalPriceanddiscountPercent, so you can sort a niche by real discount depth without parsing anything. - One pinned currency. Etsy converts prices for you when the run declares its currency and destination country, so a US run and a German run are directly comparable.
- Verified filters only. Every sort and filter offered here was tested against live Etsy and shown to change the result set. Etsy accepts some plausible-looking sort values and ignores them; those are not in the input schema.
- Keyword batching with cross-query dedup. Run twenty related keywords in one job; a listing that ranks for three of them is returned once and charged once.
- Streamed delivery. Every row is pushed and charged the moment its page is parsed, so an aborted run still leaves you with everything collected up to that point.
👥 Who it's for
Etsy sellers, print-on-demand and dropshipping operators, and marketplace analysts who need a niche's real price and competition picture rather than a screenshot of page one.
- Price a new product against the listings that actually rank for its keyword.
- Measure what share of a keyword is paid placement before deciding to buy Etsy Ads.
- Track discount depth across a category to time a promotion.
- Build a shop shortlist from ratings and bestseller badges in a niche.
- Feed a pricing model with a clean, single-currency table instead of scraped strings.
Example tasks
- Scrape Etsy listings for any keyword
- Track Etsy prices and discounts in a niche
- See how much of an Etsy keyword is paid ads
- Find top-rated Etsy shops in a niche
- Scrape Etsy listings with UK prices
- Monitor the newest Etsy listings for a keyword
⚙️ How to scrape Etsy search results
- Open the Actor and click Try for free.
- Put one or more terms in Search queries. They are scraped in order and deduplicated against each other.
- Set Max listings (default 100,
0for no cap) so your first run stays cheap. - Optionally set a price band, sort order, free shipping only or on sale only.
- Pick a currency and ship to country if you want something other than USD and the United States.
- Click Start, then read results in the run's Output tab or export CSV, JSON or Excel from the Dataset tab.
📥 Input
{"searchQueries": ["handmade necklace", "silver ring"],"maxItems": 200,"sort": "price_asc","minPrice": 20,"maxPrice": 200,"freeShippingOnly": false,"onSaleOnly": true,"includeAds": true,"currency": "USD","country": "US"}
searchQueries- list of Etsy search terms. Required. Deduplicated case-insensitively; results are deduplicated across terms.maxItems- stop after this many unique listings across all queries. Default100,0means no cap.sort-relevance(default),price_asc,price_desc, ornewest.minPrice/maxPrice- price band in the currency you selected. Optional.freeShippingOnly- keep only listings that ship free to the destination country. Defaultfalse.onSaleOnly- keep only discounted listings. Defaultfalse.includeAds- keep sponsored placements withisAd: true. Defaulttrue; turn off for organic only.currency- ISO code every price is returned in. DefaultUSD.country- ISO destination country results are ranked and priced for. DefaultUS.
📤 Output
| title | price | originalPrice | discountPercent | currency | shopName | shopRating | isAd |
|---|---|---|---|---|---|---|---|
| Baroque Pearl Necklace with Gold Chain | 360.83 | 451.03 | 20.0 | USD | Bayemeyc | 4.8 | true |
| Navy Beaded Necklace: Blue Glass Beads | 14.00 | USD | AccessoriesByAirita | 4.9 | false | ||
| Silver Samara Maple Seed Necklace | 52.50 | 70.00 | 25.0 | USD | LUKATO | 5.0 | false |
Every row also carries listingId, url (tracking parameters stripped), imageUrl and videoUrl where the listing has one, shopId and shopUrl, shopReviewCount with the shopReviewCountText it was derived from, the badges isBestseller, isEtsysPick, isPopularNow, isStarSeller, hasFreeShipping and isLimitedStock, the locale-relative shipsFromLabel, plus searchQuery, page, position, resultsForQuery (Etsy's own total hit count for the term) and scrapedAt. The run's OUTPUT record holds a summary: listings collected, sponsored versus organic split, pages fetched, and per-query result totals.
💵 How much does it cost?
You pay $3 per 1,000 listings delivered, and nothing for pages that return no new listing. A default run of 100 listings costs about $0.30. A keyword typically returns 50 to 60 listings per page, so a 1,000-listing job is roughly 17 to 20 pages. Sponsored rows are charged like any other row; turn includeAds off if you only want to pay for organic results.
🔁 Run it on the Apify platform
Schedule the same queries daily or weekly to build a price history, call the Actor from the API or any Apify client, and push results straight into Google Sheets, Make, Zapier, a webhook or your own database. The dataset exports as CSV, JSON, XML or Excel.
⚠️ Limits and caveats
- Large shop review counts are rounded by Etsy on search cards. Under about a thousand you get the exact number (556); above it Etsy prints "18.8k" and
shopReviewCountexpands that to 18,800.shopReviewCountTextalways carries what Etsy actually printed, so you can tell the two apart. - Etsy serves more than one card layout. The Actor handles the layouts seen in the US, UK and EU, but Etsy tests these constantly and badge availability varies between them: a page that shows "Bestseller" to one shopper may show "Etsy's Pick" to another.
- Sponsored listings only appear among the server-rendered slots. Etsy does not include paid placements in the lazy-loaded part of a page, so ad density is measured over the slots where ads can appear, not over the whole page.
shipsFromLabelis locale-relative. Etsy renders "Ships from nearby" for a shopper close to the seller and a country code otherwise, so it is a hint rather than a country field.- No listing detail data. Materials, tags, full descriptions, view counts and stock quantity live on the listing page and are not collected here. This Actor covers the search grid.
- Etsy keeps serving pages past the end of a result set. The Actor stops a query when a page returns no listing it has not already seen, which is the only honest end-of-results signal Etsy gives. You are never charged for a repeat.
- Some broad, high-intent keywords are capped by Etsy at roughly one page. Measured on "personalized gift": Etsy claims 1.1 million results but serves the identical listings for
page=2,3,4and5, with or without a pagination referrer. The Actor detects this and stops, so such a query returns about 50 listings no matter what you setmaxItemsto. Narrower keywords ("ceramic mug", "leather journal", "silver ring") paginate normally. If a query returns far fewer rows than you asked for, split it into more specific terms. - Result totals are Etsy's own estimate.
resultsForQuerymoves by a few hits between requests for the same term; it is a scale indicator, not a count you can reconcile against.
🧩 Related Actors
- eBay Listings Scraper - price the same product against eBay's active listings.
- Poshmark Sold Comps Scraper - what comparable items actually sold for, not what they are asking.
- Mercari Sold Comps Scraper - sold-price comparables for the resale side of a niche.
- Google Shopping Scraper - check whether a handmade niche is being undercut by mass-market sellers.
❓ FAQ
Do I pay for sponsored listings? Yes, they are charged like any other row. Set includeAds to false and you will neither collect nor pay for them.
Am I charged for a query that returns nothing? No. Charging happens per delivered listing, so an empty or exhausted query costs nothing.
Can I get prices in my own currency? Yes. Set currency and country and Etsy converts and ranks results as if a shopper there ran the search.
Why does the same keyword return a slightly different total each run? Etsy's hit count is an estimate that drifts between requests. The listings themselves are stable; the headline total is not.
Do I need a proxy or a captcha solver? No. Session handling is internal to the Actor and there is nothing to configure.
How many listings can I get for one keyword? Etsy paginates deeply and the Actor walks until a page adds no new listing. In testing, a broad keyword kept returning fresh listings well past 100 pages.
🛠️ Support
Something wrong? Open an issue on the Actor's Issues tab with the run URL, the input you used, and what you expected. That is the fastest path to a fix.
⭐ Rate this Actor
If this saved you an afternoon, please leave a rating on the Reviews tab. Review count is the main trust signal buyers use on the Store, and reviews tell me which fields to add next. If something is broken, please open an issue first so it can be fixed before you rate.