collections /etsy /reviews-scraper
R

Etsy Reviews Scraper

astravalabs/etsy-reviews-scraper

Collect recent samples or complete public review histories for as many as 50 shops in one run. Each row contains the buyer rating and text, reviewed listing, buyer-uploaded photos, and the seller's public response when Etsy exposes one.

// run this actor

Use the Apify CLI for a quick local run, or the HTTP API from any language or automation platform.

Option 01 / Apify CLICLI docs ↗
apify call astravalabs/etsy-reviews-scraper --input '{"shops":["ArtFablePets","WilshireGoodsShop"],"reviewsSort":"Recency","maxReviews":100,"maxTotalResults":5000}'
Option 02 / HTTP API + cURLAPI reference ↗
# Set API token
API_TOKEN=<YOUR_API_TOKEN>

# Prepare Actor input
cat > input.json << 'EOF'
{
  "shops": [
    "ArtFablePets",
    "WilshireGoodsShop"
  ],
  "reviewsSort": "Recency",
  "maxReviews": 100,
  "maxTotalResults": 5000
}
EOF

# Run the Actor using the HTTP API
# Full API reference: https://docs.apify.com/api/v2
curl "https://api.apify.com/v2/acts/astravalabs~etsy-reviews-scraper/runs?token=$API_TOKEN" \
  -X POST \
  -d @input.json \
  -H 'Content-Type: application/json'

// Replace <YOUR_API_TOKEN> before running the cURL example. Keep tokens out of committed files.

inputtypebehavior
shops *string[]1–50 shop names or full Etsy shop URLs.
reviewsSortenumNewest first or Etsy's relevancy order. Default: Recency.
maxReviewsintegerPer-shop ceiling; 0 requests the full public history. Default: 100.
maxTotalResultsintegerExact whole-run result ceiling. Default: 5000.

// output — 13 top-level fields per review

review
shop / shop_idmixedReviewed shop identity
review_idstringEtsy review identifier
ratingintOne-to-five-star rating
textstringFull public review text
buyerstringDisplayed buyer name
review_datestringDate displayed by Etsy
listing_id / listing_titlestringReviewed product reference
photosstring[]Buyer-uploaded photo URLs
seller_responsestring?Public seller reply
seller_response_datestring?Date of public reply
scraped_atdatetimeUTC collection timestamp

// use cases

  • Sentiment and topic analysis
  • Competitor feedback monitoring
  • Customer-service research
  • Buyer-photo and listing-level research

// boundaries

  • Inputs are currently shop-based; filter listing_id after collection for product-level analysis.
  • Rating filters are applied to the exported dataset rather than during collection.
measured performance / 2026-07-18

Measured runs returned 994 reviews from 10 shops in 7.0 seconds and 1,000 reviews from 50 shops in 9.3–11.1 seconds; all 26 benchmark samples completed without a failed shop.

last tested / 2026-07-18

What “last tested” means

The published input contract, output field list, pricing unit, and documentation were checked against the current actor, and a sample run completed on the date shown. This is a dated product check, not an uptime guarantee; public source behavior can change after testing.

Inspect representative JSON →

// sanitized illustrative values; field names and nesting follow the published output contract

// use in a workflow

// companion actors