# Etsy Reviews Scraper (`fastdataapi/etsy-reviews-scraper`) Actor

Etsy Reviews Scraper — Extract Etsy product reviews including ratings, review text, reviewer names, dates, photos, seller details, and product URLs. Useful for customer sentiment analysis, product research, competitor analysis, and marketplace insights.

- **URL**: https://apify.com/fastdataapi/etsy-reviews-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Etsy Reviews Scraper — Ratings, Review Text and Buyer Details

Etsy Reviews Scraper reads the public reviews of any Etsy shop and returns every review as one row: star rating, review text, date, buyer name, login, avatar, seller reply, and the reviewed listing. Every response is structured JSON, ready to pass directly to an LLM, index into a vector store, or feed a review-sentiment pipeline. **No Etsy account or API key needed** — paste a shop link or name and reviews start arriving row by row. Start with one shop, then add every shop you watch.

![Etsy Reviews Scraper output: review text, star rating, buyer and shop stats as JSON](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-etsy-reviews-hero.webp)

***

### What data can I extract with Etsy Reviews Scraper?

Using this Etsy Reviews API, you will be able to extract the following Etsy review data:

| 🧾 Receipt ID | ⭐ Star rating (1–5) | 💬 Review text | 📅 Review date |
| --- | --- | --- | --- |
| 👤 Buyer name | 🔑 Buyer login | 🆔 Buyer user ID (if public) | 🖼️ Buyer avatar |
| 📦 Listing title | 🔗 Listing URL | 🖼️ Listing image (every size Etsy serves) | ↩️ Seller reply (if any) |
| 📷 Buyer's review photo (if attached) | 🏪 Shop name | 🔗 Shop URL | ⭐ Shop average rating |
| 🔢 Shop review count | 🕒 Scraped-at timestamp | | |

***

### How to use Etsy Reviews Scraper

Anyone who wants Etsy shop reviews without building their own scraper can run this Actor and get every review from one run as structured rows.

**Copy to your AI assistant:**

```text
This Actor (Etsy Reviews Scraper, Apify Actor ID: fastdataapi/etsy-reviews-scraper, https://apify.com/fastdataapi/etsy-reviews-scraper) is an Apify Actor that returns Etsy shop reviews as structured JSON: star rating, review text, review date, buyer name and login, buyer avatar, seller reply, and the reviewed listing's title and image. Use it whenever someone needs Etsy shop reviews without cookies, a login, or a browser - tracking your own shop's rating, comparing competitor shops in your niche, and feeding review text into a sentiment-analysis pipeline. Inputs: startUrls (array of Etsy shop links or shop names, one per line, required), maxReviewsPerShop (integer, 1-5000, default 100), maxRetries (integer, 0-20, default 3), retryDelaySeconds (integer, 1-120, default 5), proxyConfiguration (object, Apify Proxy settings).
```

#### Etsy Reviews Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

An AI assistant connected to Apify's MCP server with this Actor as a tool can call it directly for a list of Etsy shops and read the reviews back mid-conversation. No glue code, no scraping logic written into your prompts, and no separate API key to manage beyond the one Apify connection your agent already has.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/etsy-reviews-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Etsy Reviews Scraper](https://apify.com/fastdataapi/etsy-reviews-scraper) in the Apify Store.
3. Enter the Etsy shop link or shop name.
4. Click **Start** (or send your API request).
5. Download your Etsy reviews in JSON, CSV or Excel.

#### How to scale Etsy Reviews Scraper to bulk

The shop list takes as many entries as you want, so add every Etsy shop link or shop name you want to track and every shop is scraped in the same run, at the same time. To download Etsy reviews on a schedule, set up an Apify schedule to rerun the same shop list daily or weekly so new reviews keep arriving in fresh runs. For programmatic bulk use, call the Actor from a script with a different shop list each time and read every run's dataset through the API, or chain it after another Actor that discovers shop URLs for you.

***

### ✨ Features

Etsy Reviews Scraper fetches clean, structured reviews from Etsy shops, so you can scrape Etsy reviews without opening a browser or creating an account. It's ideal for reputation monitoring, competitor research, product research before a launch, and review-sentiment analysis. It extracts, per review:

- **Star rating** – the 1–5 score the buyer gave
- **Review text** – what the buyer wrote, when they left one
- **Buyer details** – name, login, numeric user ID and avatar
- **Seller reply** – the shop owner's response, when there is one
- **Listing details** – the reviewed item's title, link and image in every size Etsy serves
- **Shop details** – shop name, link, average rating and review count

⚡ Every page of reviews is saved as soon as it's ready, so results start filling the dataset within seconds of starting the run — the same engine also works as an Etsy shop rating scraper, since the shop's average rating and review count travel with every row.

***

### Use cases 💡

- **Shop owner** — run an Etsy seller reviews scraper on your own shop and flag reviews with no reply.
- **Competitor researcher** — compare review volume and ratings across shops in your niche.
- **Product researcher** — read buyer feedback on specific listings before copying the idea.
- **Sentiment analyst** — use this Etsy customer reviews scraper to run text analysis across many shops at once.
- **AI agent builder** — feed review text and ratings into a RAG pipeline as grounded context.

Building an AI agent? [Connect Etsy Reviews Scraper over MCP](#etsy-reviews-scraper-mcp-server-use-these-actors-from-chatgpt-claude-or-cursor) and let it call the actor on its own.

***

### Why choose this actor?

1. **Every review a shop has, saved as it's found.** A recorded run against the shop HereafterLA returned 30 of 30 reviews in 5.6 seconds, with a numeric buyer ID resolved for every reviewer who has a public profile.
2. **Full buyer and listing context, not just a star count.** Each review carries the buyer's name, login and avatar, the reviewed listing's title and all 20 image sizes Etsy serves for it, and the shop's overall rating and review count.
3. **One Actor for every shop in your list.** Add as many Etsy shop links or shop names as you want in a single run, and every shop is scraped at the same time.

***

### ⬇️ Input

![Etsy Reviews Scraper input form with shop links, max reviews per shop and retries](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-etsy-reviews-input.webp)

Enter one or more Etsy shop links or shop names, one per line; the shop list is the only required field.

| Parameter | Required | Type | Description | Example value |
| --- | --- | --- | --- | --- |
| `startUrls` | Yes | Array | Etsy shop links or shop names, one per line. Several shops run in the same session and every shop's reviews go into one dataset. | `["https://www.etsy.com/shop/HereafterLA"]` |
| `maxReviewsPerShop` | No | Integer | Maximum reviews to collect per shop, 1–5000 (default 100). A shop with fewer reviews gives all it has. | `30` |
| `maxRetries` | No | Integer | Attempts per request before a longer pause, 0–20 (default 3). | `3` |
| `retryDelaySeconds` | No | Integer | Base pause in seconds before the retry rounds, 1–120 (default 5). | `5` |
| `proxyConfiguration` | No | Object | Apify Proxy settings. On, every request goes through the proxy from the start; off, requests start direct and switch to the proxy automatically after a block. | `{"useApifyProxy": false}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 reviews per run (all shops together) and 200 reviews per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

```json
{
  "startUrls": ["https://www.etsy.com/shop/HereafterLA"],
  "maxReviewsPerShop": 30,
  "maxRetries": 3,
  "retryDelaySeconds": 5,
  "proxyConfiguration": {"useApifyProxy": false}
}
```

***

### ⬆️ Output

![Etsy Reviews Scraper output fields: review, product_rating, response and shop_average_rating](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/i-etsy-reviews-output.webp)

Every review is one typed, normalized JSON item with the same field names on every run. Export your results as JSON, CSV or Excel straight from the run, so you can download Etsy reviews to CSV for a spreadsheet or feed the JSON straight into a pipeline.

#### Example output

```json
{
  "receipt_id": 5226351837,
  "buyer_user_id": 14752586,
  "buyer_real_name": "Etsy buyer",
  "buyer_login_name": "Bramblemead",
  "buyer_image": "https://i.etsystatic.com/site-assets/images/avatars/default_avatar.png?width=75",
  "listing_title": "Desert Garden Wooden Birthday Card [Personalized Birthday Card, Custom Message, Handmade, 21st Birthday Card, Wood Card, Cactus Card]",
  "review": "Card is beautiful! A work of art. Highly recommended",
  "appreciation_image": null,
  "product_rating": 5,
  "response": null,
  "reviews_count": 10539,
  "date": "2026-10-01 00:00:00",
  "shop_average_rating": 4.9,
  "shop_total_rating_count": 10539,
  "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/2980295207/r/il/c56e81/2980295207/il_fullxfull.2980295207_pi2l.jpg",
  "listing_images": [
    "https://i.etsystatic.com/2980295207/r/il/c56e81/2980295207/il_fullxfull.2980295207_pi2l.jpg",
    "https://i.etsystatic.com/2980295207/r/il/c56e81/2980295207/il_75x75.2980295207_pi2l.jpg"
  ],
  "scrapedAt": "2026-10-07T06:51:28.261145Z",
  "product_details": {
    "shop_average_rating": "4.9",
    "shop_total_rating_count": "10539",
    "product_url": "https://www.etsy.com/listing/629949817/desert-garden-wooden-birthday-card",
    "seller_name": "HereafterLA",
    "seller_url": "https://www.etsy.com/shop/HereafterLA",
    "reviewer_image": "https://i.etsystatic.com/2980295207/r/il/c56e81/2980295207/il_fullxfull.2980295207_pi2l.jpg",
    "image": [
      "https://i.etsystatic.com/2980295207/r/il/c56e81/2980295207/il_fullxfull.2980295207_pi2l.jpg"
    ]
  }
}
```

***

### How does it work?

This Etsy shop reviews scraper reads the same public review pane any visitor sees on a shop page, through plain HTTP requests, no browser involved. Requests go through Apify Proxy, either from the first request or automatically after Etsy blocks a direct one, and a blocked request is retried on a fresh connection rather than failing the run. Only data any visitor can see without an Etsy account is returned, nothing behind a login. Each review is normalized into the same set of fields on every run, so the schema an integration reads today keeps working even when Etsy redesigns its shop pages or changes its anti-bot checks. A numeric buyer user ID is resolved from the reviewer's public profile, when one exists.

***

### How do you integrate Etsy Reviews Scraper into your stack?

It works with what you already use: a REST API for any language — call it as an Etsy reviews API from your own backend — MCP for AI agents, and no-code tools.

#### MCP integration for AI agents

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/etsy-reviews-scraper"
```

This registers Apify's MCP server with Etsy Reviews Scraper already available as a tool your agent can call directly. Once connected, Claude, Cursor or Windsurf can call it with a shop link or shop name right away, no separate integration code required on your side. The agent gets the same structured JSON rows back that a normal run produces, ready to read or summarize in the same conversation.

#### No-code tools (n8n, Make, LangChain)

In n8n, use the Apify node's "Run an Actor" operation, or the HTTP Request node pointed at the run-sync endpoint with your token. In Make, use the Apify app's "Run an Actor" module, then "Get Dataset Items" to read the reviews. In LangChain, the `langchain-apify` package wraps any Apify Actor, including this one, as a callable tool.

***

### Is it legal to scrape Etsy data?

Scraping publicly available Etsy data is generally lawful, although Etsy's Terms of Use restrict automated access to its site. Etsy Reviews Scraper returns only reviews that any visitor can see without logging in, nothing from behind an Etsy account. Buyer names, usernames, user IDs and avatars are personal data under GDPR and CCPA, so storing and using them must have a lawful basis and follow local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Etsy Reviews Scraper return?

The top fields are star rating, review text, review date, buyer name and login, and the seller's reply. See [the data fields section](#what-data-can-i-extract-with-etsy-reviews-scraper) for the full list.

#### Does Etsy Reviews Scraper require an Etsy account or login?

No. Only public review data is extracted, and no Etsy credentials are needed to run it.

#### How fast does Etsy Reviews Scraper run?

A recorded run returned 30 of 30 reviews from one shop in 5.6 seconds. Results are read live from Etsy, not served from a cache.

#### What happens if a shop is private or doesn't exist?

A shop name or link that doesn't match any Etsy shop is reported in the log and the run's status message while the other shops in the same run continue; a shop that exists but has no reviews yet is reported as empty, not as an error.

#### Can I scrape multiple Etsy shops at once?

Yes. The shop list takes multiple entries, and every shop runs in the same session with all reviews landing in one dataset.

#### Does Etsy Reviews Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — it is available as an MCP tool. Use `claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/etsy-reviews-scraper"` to register Apify's MCP server with this Actor already available as a tool in Claude Code, Cursor or Windsurf. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Etsy Reviews Scraper return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names, no HTML parsing and no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when Etsy changes its layout or anti-bot system?

The team behind this Actor maintains it, and when Etsy changes, the Actor is updated so your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Etsy Reviews Scraper without managing proxies or browser infrastructure?

Yes. Proxy rotation and retrying after a block run on the Actor's side. You send one request and get structured JSON back, with no proxy accounts and no browser setup to maintain.

#### Which Etsy review fields work best for AI training data and RAG indexing?

For RAG, the text-rich fields: the review text, the listing title and the seller's reply. For training data, the numeric and boolean fields: star rating, shop average rating and review count. All fields are typed primitives — strings, integers, booleans — so no extra normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know so we can keep this Etsy review extractor accurate as Etsy changes. The team behind this Actor reads every report and ships fixes.

# Actor input Schema

## `startUrls` (type: `array`):

Etsy shop links (e.g. https://www.etsy.com/shop/ShopName) or plain shop names, one per line. Several shops are scraped at the same time and all reviews go into one dataset. A shop listed twice is scraped once, entries that are not a shop name or shop link are skipped and named in the log, and a shop that does not exist on Etsy is reported in the log and the status message.

## `maxReviewsPerShop` (type: `integer`):

Maximum number of reviews to collect per shop (1-5000), in the order Etsy shows them. A shop with fewer reviews gives all it has. Free plan: up to 20 reviews per run (all shops together) and 200 per month; paid plans have no limit.

## `maxRetries` (type: `integer`):

Attempts per request before the actor pauses and tries the same request again (0 counts as 1 attempt). Every attempt uses a fresh connection; a page of reviews is retried in up to 3 more rounds before it is given up.

## `retryDelaySeconds` (type: `integer`):

Base pause in seconds before the extra retry rounds; the rounds wait about 1x, 3x and 6x this value.

## `proxyConfiguration` (type: `object`):

With Apify Proxy on, every request goes through it (the residential group when no group is chosen; US unless you pick a country). With it off, requests start on a direct connection and switch to the residential proxy automatically when Etsy blocks them. If the proxy refuses the connection, the run continues directly.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.etsy.com/shop/HereafterLA"
  ],
  "maxReviewsPerShop": 100,
  "maxRetries": 3,
  "retryDelaySeconds": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped reviews, one row per review. Rows appear page by page while the run goes on.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.etsy.com/shop/HereafterLA"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/etsy-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": ["https://www.etsy.com/shop/HereafterLA"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/etsy-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.etsy.com/shop/HereafterLA"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call fastdataapi/etsy-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fastdataapi/etsy-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Cs70IgQlTyytWw1CL/builds/yc5POCflSHYfGqbmx/openapi.json
