Etsy API Scraper
Pricing
from $0.50 / 1,000 search result (plp) rows
Etsy API Scraper
Scrapes Etsy category tree, search results, listing details, and reviews via the Etsy Android app's private signed API.
Pricing
from $0.50 / 1,000 search result (plp) rows
Rating
0.0
(0)
Developer
R.L.
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
4
Monthly active users
4 hours ago
Last modified
Categories
Share
What does Etsy Scraper do?
Etsy Scraper pulls product data straight from Etsy in seconds: category tree, search results, product details, and customer reviews. Give it a search term or a category, hit Run, and get clean, structured data back — no manual copy-pasting, no browser extensions, no CAPTCHAs to fight through.
Built on the Apify platform, so every run comes with scheduling, API access, one-click export to JSON/CSV/Excel, and integrations with Google Sheets, Make, Zapier, and dozens of other tools.
Why use Etsy Scraper?
- Market research — see what's selling, how it's priced, and what shoppers say about it, across an entire category.
- Competitor tracking — watch specific shops or listings over time with a scheduled run; catch price changes, new listings, and review trends as they happen.
- Product sourcing — find listings and shops matching a niche before you commit to sourcing or dropshipping it.
- Review & sentiment analysis — pull every review for a product to feed into your own analysis, without reading them one by one.
How to use Etsy Scraper
- Click Try for free (or Run if you already have it).
- Pick a mode: search by keyword, browse a category, or look up specific listings by ID.
- Set how many results you want, and optionally filter by price or sort order.
- Click Start.
- When the run finishes, open the Output tab to view, filter, and export your data.
Input
| Field | What it does |
|---|---|
| Mode | What to fetch: a full search-and-detail crawl, search results only, category tree only, or specific listings by ID. |
| Search keywords | Free-text search, e.g. "ceramic mug". |
| Category | Narrow results to a category, or browse the category tree from here. |
| Listing IDs | Fetch specific products directly by their Etsy listing ID. |
| Result limits | Cap how many search results, product detail pages, and reviews per product to fetch. |
| Sort & filters | Sort by best match, newest, price, or reviews; optional min/max price and ship-to country. |
Full field descriptions are in the Input tab.
Output
Every result — search result, product, or review — is a row in the dataset, ready to view in the Output tab or download as JSON, CSV, Excel, HTML, or XML.
{"recordType": "listing","listingId": 123456789,"title": "Handmade Ceramic Mug","price": "24.99","currencyCode": "USD","shopId": 987654,"shopName": "ExampleShop","reviewsSummary": { "count": 312 }}
A search row looks like this:
{"recordType": "searchResult","listingId": 4590881453,"shopId": 63135914,"title": "Halloween Bomber Jacket, Shirt Match Sneakers","price": "$97.55","priceValue": 97.55,"currency": "$","discountPrice": "$48.78","discountPriceValue": 48.78,"discountDescription": "(50% off)","rating": 4.5,"ratingCount": 49,"isAd": false,"url": "https://www.etsy.com/listing/4590881453"}
Data table
| Field | Description |
|---|---|
recordType | category, searchResult, listing, or review. |
title | Product or category title. |
price | Price as Etsy renders it for your locale ("$97.55", "€200,00"). |
priceValue / currency | The same price as a sortable number, and its symbol (search rows). |
discountPrice / discountPriceValue / discountDescription | Sale price and the (50% off) label, when the listing is discounted. |
listingRating / listingRatingCount | The listing's rating and review count (search rows). |
currencyCode / shopName / quantity / isSoldOut | Listing rows only — see the note below. |
url | Link to the listing on Etsy. |
Shop profiles (SHOP mode)
Give shops a list of shop names, numeric shop ids, or etsy.com/shop/<name> URLs — mixed
freely — and get one row per shop: active listings and total sales, favourites, rating and
review count, country, currency and location, checkout and custom-request policy, the shop's
story and announcement, the languages it sells in and the countries it ships to by name
(shipsToCountries, with Etsy's catch-all destination rendered as "Everywhere Else"),
plus section and FAQ counts.
A name must match exactly. Etsy's own search box is fuzzy and answers PlanetPrintsCo
with OnePlanetPrintsCo — a different seller — so a near-miss is reported back to you rather
than scraped and billed. A numeric shop id is the only form that skips that lookup. The same
shop given twice in different forms is fetched and charged once.
What this mode does not do yet is walk a shop's whole catalogue: the profile endpoint returns the first 24 listing cards and no pagination key, so the mode returns the profile and the counts. Use SEARCH for listings.
SHOP runs are free until 2026-11-18, when the shop-row price takes effect. The platform
allows one pricing change a month and this Actor used its allowance on 2026-10-18.
Proxy default changed on 2026-10-18
This Actor used to default to residential proxy, on the basis that Etsy blocks datacenter IPs. Measured 2026-10-18 that is no longer true — 300 search rows came back through Apify's shared datacenter pool in 20 seconds with no refusals — so the default is now datacenter, which costs roughly 11x less per row. Residential is still selectable and is what to try first if you do start seeing refusals, or if you need a specific country.
Search rows changed on 2026-10-18
Etsy restructured its search response and stopped sending several per-card fields. Search
rows no longer carry shopName, currencyCode, isSoldOut, shopAverageRating,
shopTotalRatingCount, isBestseller, isVintage, isDigitalDownload, isCustomizable
or quantity, because the API no longer returns them on a search card — they are not shipped
as empty columns. LISTING_DETAILS mode still returns shopName, currencyCode,
quantity and isSoldOut, so fetch the listing when you need them.
In their place search rows gained priceValue, currency, the three discount* fields,
isAd, and a per-listing rating/ratingCount. Note those last two are the listing's
rating, where the old shopAverageRating/shopTotalRatingCount were the shop's — they are
different facts, so they have different names rather than being quietly remapped.
Prices now default to USD. The currency comes from the locale input, which previously
defaulted to euros even for a shipTo: US run; set locale to EUR|en-US|NL or
GBP|en-GB|GB for other currencies.
Pricing
Pay only for what you get:
| You get | Price |
|---|---|
| Search results | $0.50 per 1,000 rows |
| Product details | $0.50 per 1,000 rows |
| Reviews | $0.50 per 1,000 rows |
| Category tree | Free |
A category-tree-only run costs nothing but Apify platform usage. There's no separate subscription or per-call fee beyond the table above.
Tips for getting the most out of it
- Start small (a few dozen results) to check the data shape before scaling up to a full run.
- Use the result limits to control cost: fetching product details and reviews for every search result adds up fast on a broad search — narrow your keywords or cap "product details to fetch" instead.
- Schedule recurring runs (daily/weekly) to track price and review changes on the same products over time.
FAQ
Is this legal? Etsy Scraper only reads publicly visible product and review information, the same data any shopper sees when browsing Etsy. You're responsible for how you use the data — check Etsy's terms of service and applicable laws for your use case.
Why did a run return fewer results than I asked for? Some very narrow searches or categories simply don't have that many results on Etsy. Try broader keywords or a parent category.
Something's not working / found a bug? Open an issue on the Actor's Issues tab — we're happy to help, and custom extensions/integrations are available on request.
Did you find this useful?
Rate this actor on Apify! Your feedback helps other users find it and helps us keep improving it.