# Etsy Shop Products Scraper (`parseforge/etsy-scraper`) Actor

Scrape all products from any Etsy shop by name or URL. Returns title, price, image, description, and seller info. No login needed.

- **URL**: https://apify.com/parseforge/etsy-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation
- **Features:** Limited permissions
- **Stats:** 123 total users, 7 monthly users, 87.3% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $112.99 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)](https://apify.com/parseforge?fpr=vmoqkp)

### Etsy Shop Products Scraper

**Scrape all products from any Etsy shop, up to a million items per run.** Every product comes with its title, price, image, description, and seller info. No login or API key. Export to CSV, JSON, Excel, or XML.

**Low minimum charge:** $0.005 to start a run, then you only pay for the results you get.

Etsy's search and shop pages are designed for browsing, not bulk data extraction. Manually copying product listings from dozens of shops is slow and error-prone. This Actor reads the public product feeds of any Etsy shop directly, returning each listing as a structured row with all key details.

| Who uses it | What they scrape Etsy for |
|---|---|
| Etsy sellers | Monitor competitor shops for pricing, new listings, and product trends. |
| Market researchers | Analyze product categories, pricing strategies, and popular items across multiple shops. |
| Dropshippers | Find trending products and suppliers by scraping product data from top Etsy shops. |
| Data analysts | Build datasets of Etsy products for machine learning or business intelligence. |

### What it does

This Actor collects all products from one or more Etsy shops by shop name or URL, and returns each product as a flat row with title, price, image, description, and more.

- 🛍️ **Multi-shop input:** Provide up to dozens of shop names or URLs in one run; each shop returns its own product list.
- 📦 **Scalable output:** Set a max item limit per run, from a preview of 10 items to up to 1,000,000 items.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Etsy data

**📊 Monitor competitor shops.**

An Etsy seller runs the scraper weekly on top competitor shops to track new listings, price changes, and product descriptions.

**🔍 Research product trends.**

A market researcher scrapes 50 shops in a niche to analyze pricing, popular categories, and listing frequency.

**📦 Build a product catalog.**

A dropshipper collects product data from multiple Etsy shops to find trending items and compare suppliers.

**📈 Analyze pricing strategies.**

A data analyst scrapes hundreds of shops to build a pricing model and identify under- or over-priced products.

### Why choose this scraper

|  | What you get |
|---|---|
| **No login needed** | Scrape public Etsy shop pages without an account or API key. |
| **Full product data** | Each row includes title, price, image URL, description, and seller info. |
| **Bulk shop input** | Enter dozens of shop names at once and get all products in one dataset. |
| **Flexible export** | Download results as CSV, JSON, Excel, or XML for any workflow. |

### How it compares

No other Store actor targets Etsy the same way, so the honest comparison is with the alternatives teams actually weigh.

| | Etsy Shop Products Scraper | Build it in-house | By hand |
|---|---|---|---|
| Setup | Run it now, zero config | Days of engineering | None, but hours per pull |
| When Etsy changes | Maintained for you | You fix it | You re-learn the page |
| Proxies, retries, anti-bot | Built in | Your problem | Browser only |
| Output | Fixed JSON schema, CSV/Excel export | Whatever you build | Copy-paste |
| Cost | Pay per result | Engineering time | Analyst hours |

### Configure the run

Drive the Actor from a list of Etsy shop names or full shop URLs. The scraper reads each shop's product feed and returns all items up to your chosen limit. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "shopNames": [
    "CaitlynMinimalist",
    "SilverRainSilver",
    "TheSilverWren",
    "Divazpublishing",
    "BrigiBre",
    "MrEastShop",
    "ArtByFameli",
    "HippoAndBunny",
    "FameliArt",
    "CraftyChicSaver",
    "BuzyHandsStudio",
    "BelakMugs",
    "ShineOnInspiration",
    "StrawberryCosmo",
    "LasagneTonic",
    "ScarvesbyJojo",
    "ModParty",
    "PlanetPups",
    "NorthwoodsCandlesCo",
    "BoholoveJewelry",
    "TuesdayMorningStudio",
    "BennyAndBetsyDesigns",
    "ByStephanieLea",
    "LetsGetMuggyShop",
    "BigBrownEyesVintage",
    "CosyhomeArtIRE",
    "LadybirdDesignsPGH"
  ],
  "maxItems": 10
}
```

A larger pull:

```json
{
  "shopNames": [
    "CaitlynMinimalist",
    "SilverRainSilver",
    "TheSilverWren",
    "Divazpublishing",
    "BrigiBre",
    "MrEastShop",
    "ArtByFameli",
    "HippoAndBunny",
    "FameliArt",
    "CraftyChicSaver",
    "BuzyHandsStudio",
    "BelakMugs",
    "ShineOnInspiration",
    "StrawberryCosmo",
    "LasagneTonic",
    "ScarvesbyJojo",
    "ModParty",
    "PlanetPups",
    "NorthwoodsCandlesCo",
    "BoholoveJewelry",
    "TuesdayMorningStudio",
    "BennyAndBetsyDesigns",
    "ByStephanieLea",
    "LetsGetMuggyShop",
    "BigBrownEyesVintage",
    "CosyhomeArtIRE",
    "LadybirdDesignsPGH"
  ],
  "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.15066 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $15.07 |
| 1,000 results | $150.66 |
| 10,000 results | $1506.60 |

#### Optional extras (from October 3, 2026)

Two opt-in blocks, both off by default. The per-result price does not change, and a block that does not come back is never charged.

| Event | Price | Charged when |
|---|---|---|
| `apify-actor-start` | $0.005 per GB of run memory | the run starts |
| `shop-reviews` | $0.04 per shop | **Include recent reviews** is on and the shop row received its `recentReviews` list |
| `shop-about-policies` | $0.02 per shop | **Include About section and shop policies** is on and the shop row received the About or policy fields |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Etsy Shop Products Scraper](https://apify.com/parseforge/etsy-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Etsy through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

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

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that the shop name or URL is correct and the shop is public. Private or deactivated shops will return no data.

**The scraper only returned a few items per shop.**

The default max items is 10 for free users. Increase the maxItems value in the input settings to scrape more products.

**Some product fields are missing.**

The scraper reads what is publicly visible on the shop page. If a field is not displayed (e.g., description hidden), it will be empty.

**The run failed with a timeout error.**

Large runs with many shops or items may need more time. Reduce the number of shops or maxItems, or upgrade to a paid plan for longer run limits.

### FAQ

| Question | Answer |
|---|---|
| Do I need an Etsy API key? | No. This scraper reads public shop pages directly, so no API key or login is required. |
| Can I scrape multiple shops at once? | Yes. Enter a list of shop names or URLs, and the Actor will process each one and return all products in a single dataset. |
| What data does each product row include? | Each row includes the product title, price, image URL, description, seller name, and other public fields from the shop page. |
| Is there a limit on how many items I can scrape? | Free users get a preview of up to 10 items. Paid users can set a max up to 1,000,000 items per run. |
| Can I scrape a specific category or search within a shop? | No. The scraper returns all products from a shop's main listing page. It does not filter by category or search term. |
| What export formats are available? | You can download results as CSV, JSON, Excel, or XML directly from the Apify platform. |
| How fast is the scraper? | Speed depends on the number of shops and items. A typical run with 10 shops and 100 items each completes in a few minutes. |
| Does it work for shops outside the US? | Yes. Etsy shops from any country are supported as long as the shop URL is publicly accessible. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Etsy, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `shopNames` (type: `array`):

List of Etsy shop names or shop URLs (e.g. CaitlynMinimalist or https://www.etsy.com/shop/CaitlynMinimalist). One record is returned per shop.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `includeReviews` (type: `boolean`):

Adds a recentReviews list to each shop: the most recent buyer reviews shown on the shop page (up to 10), each with rating, text, date, reviewer, buyer photo, seller response and the listing that was bought. No extra request. Charged only for a row that receives it.

## `includeAboutAndPolicies` (type: `boolean`):

Adds the shop's About section (headline, story, photos and video with captions, shop members with role and bio) and its policies (last updated date, accepted payments, returns and exchanges, cancellations and any other policy block). No extra request. Charged only for a row that receives it.

## Actor input object example

```json
{
  "shopNames": [
    "CaitlynMinimalist",
    "SilverRainSilver",
    "TheSilverWren",
    "Divazpublishing",
    "BrigiBre",
    "MrEastShop",
    "ArtByFameli",
    "HippoAndBunny",
    "FameliArt",
    "CraftyChicSaver",
    "BuzyHandsStudio",
    "BelakMugs",
    "ShineOnInspiration",
    "StrawberryCosmo",
    "LasagneTonic",
    "ScarvesbyJojo",
    "ModParty",
    "PlanetPups",
    "NorthwoodsCandlesCo",
    "BoholoveJewelry",
    "TuesdayMorningStudio",
    "BennyAndBetsyDesigns",
    "ByStephanieLea",
    "LetsGetMuggyShop",
    "BigBrownEyesVintage",
    "CosyhomeArtIRE",
    "LadybirdDesignsPGH"
  ],
  "maxItems": 10,
  "includeReviews": false,
  "includeAboutAndPolicies": false
}
```

# Actor output Schema

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

Dataset with all scraped items

# 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 = {
    "shopNames": [
        "CaitlynMinimalist",
        "SilverRainSilver",
        "TheSilverWren",
        "Divazpublishing",
        "BrigiBre",
        "MrEastShop",
        "ArtByFameli",
        "HippoAndBunny",
        "FameliArt",
        "CraftyChicSaver",
        "BuzyHandsStudio",
        "BelakMugs",
        "ShineOnInspiration",
        "StrawberryCosmo",
        "LasagneTonic",
        "ScarvesbyJojo",
        "ModParty",
        "PlanetPups",
        "NorthwoodsCandlesCo",
        "BoholoveJewelry",
        "TuesdayMorningStudio",
        "BennyAndBetsyDesigns",
        "ByStephanieLea",
        "LetsGetMuggyShop",
        "BigBrownEyesVintage",
        "CosyhomeArtIRE",
        "LadybirdDesignsPGH"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/etsy-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 = {
    "shopNames": [
        "CaitlynMinimalist",
        "SilverRainSilver",
        "TheSilverWren",
        "Divazpublishing",
        "BrigiBre",
        "MrEastShop",
        "ArtByFameli",
        "HippoAndBunny",
        "FameliArt",
        "CraftyChicSaver",
        "BuzyHandsStudio",
        "BelakMugs",
        "ShineOnInspiration",
        "StrawberryCosmo",
        "LasagneTonic",
        "ScarvesbyJojo",
        "ModParty",
        "PlanetPups",
        "NorthwoodsCandlesCo",
        "BoholoveJewelry",
        "TuesdayMorningStudio",
        "BennyAndBetsyDesigns",
        "ByStephanieLea",
        "LetsGetMuggyShop",
        "BigBrownEyesVintage",
        "CosyhomeArtIRE",
        "LadybirdDesignsPGH",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/etsy-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 '{
  "shopNames": [
    "CaitlynMinimalist",
    "SilverRainSilver",
    "TheSilverWren",
    "Divazpublishing",
    "BrigiBre",
    "MrEastShop",
    "ArtByFameli",
    "HippoAndBunny",
    "FameliArt",
    "CraftyChicSaver",
    "BuzyHandsStudio",
    "BelakMugs",
    "ShineOnInspiration",
    "StrawberryCosmo",
    "LasagneTonic",
    "ScarvesbyJojo",
    "ModParty",
    "PlanetPups",
    "NorthwoodsCandlesCo",
    "BoholoveJewelry",
    "TuesdayMorningStudio",
    "BennyAndBetsyDesigns",
    "ByStephanieLea",
    "LetsGetMuggyShop",
    "BigBrownEyesVintage",
    "CosyhomeArtIRE",
    "LadybirdDesignsPGH"
  ],
  "maxItems": 10
}' |
apify call parseforge/etsy-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/etsy-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/R5lM13YGBIykceodK/builds/iaVuFMvSYXyzhE9pk/openapi.json
