Etsy Reviews Scraper avatar

Etsy Reviews Scraper

Pricing

$19.99/month + usage

Go to Apify Store
Etsy Reviews Scraper

Etsy Reviews Scraper

Etsy Reviews Scraper extracts customer reviews from Etsy product listings and shops. Collect reviewer names, ratings, review text, dates, and product details to analyze customer feedback, track sentiment, study competitors, or gather insights for product and market research. 🛍️📊

Pricing

$19.99/month + usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

24

Total users

4

Monthly active users

6 days ago

Last modified

Share

Etsy Reviews Scraper — Ratings, Review Text and Buyer Details

Etsy Reviews Scraper pulls every buyer review from any public Etsy shop — star rating, review text, buyer name and login, review photos, seller responses, and the listing each review is attached to — and returns one flat JSON row per review. Paste a shop URL or plain shop name; no Etsy account or developer key needed. Brand-monitoring teams, Etsy sellers, and market researchers use it to track shop reputation, benchmark competitor ratings, and mine review text for sentiment, across as many shops as one run needs.

What is Etsy Reviews Scraper?

Etsy Reviews Scraper is an Apify Actor that collects every public review posted to one or more Etsy shops and returns them as structured, ready-to-analyze records — no scraping code, no Etsy developer account, no manual copy-pasting from storefront pages.

  • 🔗 Discovery by shop, not by search — add Etsy shop URLs (https://www.etsy.com/shop/ShopName) or plain shop names; the actor scrapes each shop and combines all reviews into one dataset.
  • 👤 Buyer identity resolved, not just referencedbuyer_real_name, buyer_login_name, buyer_user_id, and buyer_image are extracted and attached to every row.
  • Ratings and feedback text as the core secondary dataproduct_rating, review, response (the seller's reply), and appreciation_image (the buyer's uploaded photo, when present).
  • 📦 Listing context includedlisting_title, product_url, listing_image_full, and listing_images tie every review back to the exact product it was left on.
  • 📊 Shop-level stats on every rowshop_average_rating and shop_total_rating_count, so you don't need a second call to know how the shop looks overall.
  • 📤 Standard Apify dataset export — results land in an Apify Dataset and can be downloaded as JSON, CSV, Excel, XML, or RSS, or read via the API/SDK.

What data can I extract with Etsy Reviews Scraper?

Every review comes back as one flat record — buyer, rating, review text, seller response, and listing context all on the same row.

FieldExample ValueUse Case
receipt_id4934801880Ties the review back to Etsy's internal order/receipt
buyer_user_id84577298Track the same reviewer across shops, when resolvable
buyer_real_name"Therese"Attribute a quote in a report or case study
buyer_login_name"b8ddtlb335qm713s"The buyer's Etsy username/handle
buyer_image"https://i.etsystatic.com/…"Avatar for a review-wall UI
listing_title"Desert Garden Wooden Birthday Card"Identify which product the review is about
review"I ordered two cards and love them both!"Sentiment analysis, keyword mining
appreciation_imagenullBuyer-uploaded photo of the received item, or null if none
product_rating5Per-review star rating, 1–5
responsenullThe seller's reply text, or null if unanswered
reviews_count10481Shop's total review count at scrape time
date"2026-02-08 00:00:00"Trend ratings/sentiment over time
shop_average_rating4.9Shop-wide average rating for benchmarking
shop_total_rating_count10481Shop-wide total rating count
product_url"https://www.etsy.com/listing/629949817/…"Link straight back to the reviewed listing
seller_name"HereafterLA"Group and filter reviews by shop
seller_url"https://www.etsy.com/shop/HereafterLA"Link back to the shop's storefront
listing_image_fullfull-resolution photo URLFull-size listing image for display
listing_imagesarray of URLsThe listing's photo at every Etsy CDN size variant
scrapedAt"2026-07-30T09:12:00Z"Freshness check / incremental-load cursor

Ratings and seller responses

product_rating carries the 1–5 star score, review the free-text feedback, and response the seller's reply — null when the seller hasn't answered. A buyer can also attach a photo of the item they received, captured in appreciation_image (null if they didn't upload one). A common workflow: filter rows where product_rating is 1 or 2 and response is null to surface negative reviews a shop hasn't followed up on yet — the exact rows a seller or agency would want to escalate first.

Shop and listing identifiers

seller_name/seller_url identify which shop a row belongs to when startUrls contains several shops in one run, and listing_title/product_url identify which product the review was left on. date lets you sort or bucket reviews by time. There's no built-in category, price, or location field — Etsy shop reviews don't carry them — so segmentation happens on these identifying fields plus product_rating and date after export.

How does Etsy Reviews Scraper differ from the official Etsy API?

Etsy's Open API v3 does expose a reviews endpoint (GET /application/shops/{shop_id}/reviews, per Etsy's official API reference, checked 2026-07-30), but it needs a numeric shop_id — not the shop's URL or name — and returns bare TransactionReview records: shopId, listingId, buyerUserId, rating, review, and imageUrlFullxfull as raw IDs and text, with no buyer name, no buyer avatar, no listing title or image, and no shop-wide rating stats.

FeatureEtsy Open API v3Etsy Reviews Scraper
SetupRegister a developer app, obtain an API keyPaste a shop URL or name
Shop identificationNumeric shop_id (needs a separate lookup call to resolve)Shop URL or plain shop name
Buyer identitybuyerUserId only, a numeric referencebuyer_real_name, buyer_login_name, buyer_user_id, buyer_image resolved on every row
Listing contextlistingId only, a numeric referencelisting_title, product_url, listing_image_full, listing_images resolved on every row
Seller response textNot part of the TransactionReview schemaresponse field carries the seller's reply
Shop-wide rating statsNot returned by the reviews endpointshop_average_rating, shop_total_rating_count on every row
Paginationlimit/offset, 25 results per call by defaultmaxReviewsPerShop up to 5,000; the actor paginates automatically
Rate limitsPer-app queries-per-day/queries-per-second, set in Etsy's Developer PortalHandled by the actor's own retry and proxy logic

Why does Etsy's API return only numeric IDs for the buyer and listing?

Etsy's TransactionReview schema (per the official Open API v3 reference, checked 2026-07-30) exposes shopId, listingId, and buyerUserId as bare numeric references, not resolved names, avatars, or listing photos. Pulling that same context — who wrote the review and what product it was about — means chaining a separate getListing call and a user lookup per review, on top of first resolving the shop's numeric ID from its URL or name. At the scale of dozens of shops that multiplies quickly. Etsy Reviews Scraper covers the gap by resolving buyer_real_name, buyer_login_name, buyer_image, listing_title, listing_image_full, and product_url directly from the shop's storefront pages, so every row already carries them.

Use Etsy's official API when you already have a developer account and just need the raw review record to slot into your own app's existing user/listing tables. Use Etsy Reviews Scraper when you want rows that already carry buyer and listing context, without registering a developer app first.

How to use data extracted from Etsy?

Etsy sellers and brand teams

Point startUrls at your own shop (or a competitor's) and pull every review with product_rating and response. Filter for low ratings with a null response to find unanswered negative feedback that needs a reply, or track shop_average_rating over successive runs to see whether recent changes moved the needle.

Agencies and reputation-management services

Run the same startUrls list across a portfolio of client shops on a recurring Apify schedule, and diff shop_average_rating/shop_total_rating_count run over run to flag any client whose rating is sliding, or to benchmark a client against named competitor shops in the same report.

Market research and intelligence

Add a basket of shops in one category to startUrls and aggregate product_rating and review text across listing_titles to see which product types or phrasing patterns draw the strongest (or weakest) buyer feedback — useful groundwork before entering a new product category.

AI agents and automated pipelines

Feed the review field into a sentiment-classification or summarization pipeline, or index it for RAG so a customer-support or seller-assistant agent can answer questions like "what do buyers say about shipping speed" using real review text tied back to listing_title and date.

🔼 Input sample

ParameterRequiredTypeDescriptionExample Value
startUrlsYESarrayEtsy shop URLs (e.g. https://www.etsy.com/shop/ShopName) or plain shop names. Add multiple shops — the actor scrapes each one and combines all reviews into a single dataset.["https://www.etsy.com/shop/HereafterLA"]
maxReviewsPerShopnointegerMaximum number of reviews to fetch per shop (1–5000). The actor paginates through review pages until this limit or until no more reviews are available. Default is 100.100
maxRetriesnointegerHow many times to retry a single request before moving on (e.g. after a network error or a temporary block). Default is 3. Min 0, max 20.3
retryDelaySecondsnointegerBase delay in seconds between retries; the delay increases with each attempt. Default is 5. Min 1, max 120.5
proxyConfigurationnoobjectProxy used to fetch shop pages and reviews. Defaults to Apify's residential proxy group, which gives the most reliable results against Etsy's anti-bot protections. You can pick a different proxy group or disable proxy entirely, but non-residential or no-proxy setups are more likely to get blocked.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}
{
"startUrls": [
"https://www.etsy.com/shop/HereafterLA",
"AnotherEtsyShop"
],
"maxReviewsPerShop": 200,
"maxRetries": 3,
"retryDelaySeconds": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

⚠️ Common pitfall: startUrls needs the shop's URL (containing /shop/ShopName) or its URL slug — not a listing URL, a category-tab URL, or the shop's human-readable display name shown at the top of the page, which can differ from the slug in the address bar. Pasting the wrong one means the actor either finds no reviews or scrapes the wrong shop.

🔽 Output sample

Every review lands as one flat record in the Apify Dataset — typed fields, no nested objects to unpack, except listing_images, which is a plain array of that listing's photo URLs. Export it as JSON, CSV, Excel, XML, or RSS straight from the Console, or pull it via the API/SDK.

{
"receipt_id": 4934801880,
"buyer_user_id": 84577298,
"buyer_real_name": "Therese",
"buyer_login_name": "b8ddtlb335qm713s",
"buyer_image": "https://i.etsystatic.com/site-assets/images/avatars/default_avatar.png?width=75",
"listing_title": "Desert Garden Wooden Birthday Card",
"review": "I ordered two cards and love them both! Beautiful quality.",
"appreciation_image": null,
"product_rating": 5,
"response": null,
"reviews_count": 10481,
"date": "2026-02-08 00:00:00",
"shop_average_rating": 4.9,
"shop_total_rating_count": 10481,
"product_url": "https://www.etsy.com/listing/629949817/desert-garden-wooden-birthday-card",
"seller_name": "HereafterLA",
"seller_url": "https://www.etsy.com/shop/HereafterLA",
"listing_image_full": "https://i.etsystatic.com/12345678/r/il/abcdef/1234567890/il_fullxfull.1234567890_abcd.jpg",
"listing_images": [
"https://i.etsystatic.com/12345678/r/il/abcdef/1234567890/il_570xN.1234567890_abcd.jpg",
"https://i.etsystatic.com/12345678/r/il/abcdef/1234567890/il_680x540.1234567890_abcd.jpg"
],
"scrapedAt": "2026-07-30T09:12:00Z"
}

Each pushed review is one charged row_result event — you pay per review returned, not per shop or per run.

How do you filter and target specific reviews?

Etsy Reviews Scraper has one real targeting control besides which shops you pick: maxReviewsPerShop caps how deep the actor paginates into each shop's review history (1–5000, default 100), and it stops earlier if the shop simply has fewer reviews than that. There's no built-in rating, date-range, or keyword filter in the input — those apply after export by filtering the dataset on product_rating, date, or review text. What you do control precisely is scope: add exactly the shops you need to startUrls (one, or dozens in the same run) and set maxReviewsPerShop low for a quick reputation snapshot or high (up to 5,000) for a full historical pull.

▶️ Want to try other Etsy scrapers?

Scraper NameWhat it extracts
eBay Search ScrapereBay search results with buyer reviews and ratings
eBay Product Details ScrapereBay product details, sold price, and deal analytics
Shein Search Products ScraperShein products by category, store, and product URL

How to extract Etsy data programmatically

Etsy Reviews Scraper runs like any Apify Actor: one API call starts the run, and the results come back as structured JSON from the Apify Dataset — no scraping code of your own to maintain.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<store-username>/etsy-reviews-scraper").call(run_input={
"startUrls": ["https://www.etsy.com/shop/HereafterLA"],
"maxReviewsPerShop": 200,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["seller_name"], item["product_rating"], item["review"])

Export to spreadsheets or CRM

Every dataset supports a one-click CSV export from the Console (or apify_client's .dataset().download_items()), so seller_name, product_rating, review, response, and date drop straight into columns for a spreadsheet or a CRM import — no reshaping needed.

Yes — Etsy Reviews Scraper only collects reviews already displayed publicly on a shop's storefront page, information Etsy shows to any visitor without login. Because that output includes personal data about real individuals — buyer_real_name, buyer_login_name, buyer_user_id, and buyer_image — GDPR and CCPA considerations apply to how you store and use it, not just Etsy's own Terms of Use. Scraping public pages is generally permissible, but storing personal data at scale requires a lawful basis and reasonable safeguards (retention limits, access controls, honoring deletion requests). Consult legal counsel for commercial applications involving bulk storage of personal data.

❓ FAQ

What happens if a listing referenced in a review is no longer for sale?

The actor returns whatever listing_title, product_url, and listing_image_full were shown next to the review at scrape time — it doesn't verify that the listing is still active, so product_url can lead to a delisted or renamed page later.

Can I get the seller's response along with the review?

Yes — response carries the seller's reply text on every row, and is null when the seller hasn't answered. There's no separate call or extra input needed to include it.

How accurate is the buyer identity data?

buyer_real_name and buyer_login_name come straight from the reviewer's own Etsy profile link, so they're accurate as displayed. buyer_user_id is resolved on a best-effort basis (from Etsy's own page data, the reviewer's profile link, or their avatar URL) and can be null when none of those expose it for a given review.

How many reviews can I get per run?

Up to maxReviewsPerShop (1–5000, default 100) per shop listed in startUrls, and the actor stops earlier per shop once it has collected however many reviews that shop actually has. Add more shops to startUrls to scale total volume in one run.

Can I scrape reviews for more than one Etsy shop in a single run?

Yes — startUrls accepts any number of shop URLs or names, and every review from every shop lands in the same dataset, with seller_name/seller_url identifying which shop each row came from.

How does Etsy Reviews Scraper compare to pulling reviews via Etsy's own API?

Etsy's Open API v3 reviews endpoint returns raw numeric IDs (buyerUserId, listingId) and requires a registered developer app plus a numeric shop ID; Etsy Reviews Scraper needs only a shop URL or name and returns buyer and listing details already resolved into the row. See the full comparison above.

Does Etsy Reviews Scraper work with Claude, ChatGPT, and AI agent frameworks?

There's no dedicated MCP server for this actor. It's callable as a standard Apify Actor run via apify_client or the REST API, so any agent framework that can make an HTTP call or shell out to the Apify CLI can trigger a run and read back the resulting JSON.

Can I use Etsy Reviews Scraper without an Etsy API key or developer account?

Yes. You only need an Apify account to run the actor — no Etsy developer registration, API key, or login is required, since it reads the same public storefront pages any shopper can see.

Conclusion

Etsy Reviews Scraper turns any public Etsy shop's review history into flat, structured JSON — buyer identity, star rating, review text, seller response, and listing context on every row, without an Etsy developer account or any scraping code to maintain. It's built for sellers watching their own reputation, agencies benchmarking clients, researchers mining review sentiment, and AI pipelines that need real customer feedback as context. Add your shop URLs to startUrls and run it from the Apify Console to get your first dataset.