---
title: "How to Scrape Etsy Data: Products and Prices | Scrape.ly"
description: "Scrape Etsy data by keyword or URL: price, sale price, shop rating, favorites and variations, with a real run, its cost and code for curl, Python and Node."
url: https://scrape.ly/blog/scrape-etsy
markdown: https://scrape.ly/blog/scrape-etsy.md
---

[Tutorials](https://scrape.ly/blog/category/tutorials.md)

# How to Scrape Etsy Data: Products, Prices and Shops

Scrape Etsy by keyword or paste shop, category and listing URLs, and get each product as a row: price, sale price, shop name and rating, favorites, variations, photos and related searches. A real run, its cost, and code for curl, Python, Node.js and AI agents.

[Shelfbright Actor publisher on the Scrape.ly Store](https://scrape.ly/blog/author/shelfbright.md)

- Published

  Oct 23, 2026

- Reading time

  9 min read

![Pixel-art robot with an orange >\_ on its terminal head pulls a product card with a photo and an orange price off a market stall with a striped awning, handmade goods on its counter and the orange Etsy logo on its sign, and drops it into a crate](https://scrape.ly/media/scrape-etsy.png?w=1080)

To scrape Etsy data, give a scraper a keyword or a list of Etsy shop, category or listing URLs and let it save each product as a row: title, current price, the original price when the item is on sale, shop name and rating, favorites, variations such as size and color, photos and the date it was listed. The fastest way is the Etsy Scraper on Scrape.ly, which costs $3.40 per 1,000 listings and needs no Etsy account, API key or proxy of your own.

This guide covers the no-code steps, the API (curl, Python, Node.js and AI agents over MCP), the cost and the pitfalls. Everything comes from a real run on 23 October 2026: wall art between $10 and $500.

## What data you can get from Etsy

The [Etsy Scraper](https://scrape.ly/store/shelfbright/etsy-scraper.md) writes one row per listing. These are the fields you'll use most:

| Field                          | What it holds                                                             |
| ------------------------------ | ------------------------------------------------------------------------- |
| `name`, `id`, `url`            | Listing title, Etsy listing ID and link                                   |
| `Price`                        | The current price as Etsy shows it, in US dollars ("Now$21.00" on a sale) |
| `Original Price`               | The price before the sale, when there is one                              |
| `seller`                       | Shop name, shop URL, shop rating and the shop's review count              |
| `numberOfReviews`, `favorites` | Review count and how many shoppers favorited the listing                  |
| `listedOn`                     | The date the listing was published or renewed                             |
| `variations`                   | Option groups and values: size, color, frame, material                    |
| `variationPrices`              | The price for each option, when you switch it on                          |
| `highlights`                   | Materials and badges such as "Made to order"                              |
| `images`, `videos`             | Photo and video URLs                                                      |
| `relatedSearches`              | Up to 12 related Etsy market searches with links                          |
| `shipping`                     | Shipping details when the public page shows them                          |
| `description`                  | The listing description, when you switch it on                            |

Sale prices, videos, highlights and shipping appear only when the listing page shows them.

## How to scrape Etsy data without code

1. Open the [Actor's page](https://scrape.ly/store/shelfbright/etsy-scraper.md) in the Scrape.ly Store.
2. Pick a ready-made input. We used [Wall art from 10 to 500 USD, 10 listings](https://scrape.ly/store/shelfbright/etsy-scraper/presets/search.md). Other presets cover [products from one Etsy shop](https://scrape.ly/store/shelfbright/etsy-scraper/presets/url.md) and [one listing with description and variant prices](https://scrape.ly/store/shelfbright/etsy-scraper/presets/url-2.md).
3. Change the keyword and price range to yours. This is the exact input of our run:

```json
{
  "search": "wall art",
  "maxItems": 10,
  "minPrice": 10,
  "maxPrice": 500,
  "startUrls": [],
  "sort": "most_relevant",
  "endPage": 1,
  "includeDescription": false,
  "includeVariationPrices": false
}
```

4. Click **Start**. Ten listings took 23 seconds.
5. Export the listings as JSON, CSV or Excel.

The fields that matter most:

- `search`: a keyword, as you'd type it into Etsy's search box. The keyword search runs first.
- `startUrls`: Etsy listing, shop, category, market or search URLs. Use a shop URL to pull a competitor's catalog, or a category URL for a whole niche.
- `maxItems`: listings to save for the whole run (default 10).
- `minPrice`, `maxPrice`: a US dollar range for searches.
- `endPage`: the last result page to read. A logged-out keyword search shows about 12 listings per page; category and market pages show about 48.
- `sort`: `most_relevant`, `price_asc`, `price_desc`, `highest_reviews` or `date_desc`.
- `includeDescription`, `includeVariationPrices`: add the description and the price of every option. They make runs slower, so they're off by default.

Scrape.ly Store Etsy Scraper Etsy listings by keyword or by shop, category and listing URL: price, sale price, shop rating, favorites, variations and photos. No login or API key. $3.40 per 1,000 listings.

[Try it free](https://scrape.ly/store/shelfbright/etsy-scraper.md) [Browse the Store](https://scrape.ly/store.md)

## How to scrape Etsy with the API

Create an API token under **Settings → API & Integrations** and export it as `SCRAPELY_TOKEN`.

Our run took 23 seconds, inside the 45-second window of the synchronous endpoint, so one request returns the listings:

```shell
curl -X POST "https://api.scrape.ly/v2/actors/shelfbright~etsy-scraper/run-sync-get-dataset-items"
  -H "Authorization: Bearer $SCRAPELY_TOKEN"
  -H "Content-Type: application/json"
  -d '{"search": "wall art", "minPrice": 10, "maxPrice": 500, "maxItems": 10}'
```

For more than a few dozen listings, or with descriptions and variation prices switched on, use the asynchronous flow instead: start the run with `/runs`, wait, then read the dataset, as the [Actors API docs](https://scrape.ly/docs/api-actors.md) show. A call that runs past 45 seconds answers `408` while the run keeps going, so don't send it again.

Python (`pip install scrapely-client-python`). `call()` waits however long the run takes. Etsy prices arrive as display text, so this example turns them into numbers and shows the discount:

```python
import os
import re
from scrapely_client import ScrapelyClient

client = ScrapelyClient(os.environ["SCRAPELY_TOKEN"], api_url="https://api.scrape.ly")

def usd(text):
    return float(re.sub(r"[^\d.]", "", text)) if text else None

run = client.actor("shelfbright/etsy-scraper").call(
    run_input={"search": "wall art", "minPrice": 10, "maxPrice": 500, "maxItems": 10}
)
print(run.status)  # SUCCEEDED, FAILED, ABORTED or TIMED-OUT
for item in client.dataset(run.default_dataset_id).iterate_items():
    now, was = usd(item["Price"]), usd(item.get("Original Price"))
    off = f"{100 * (1 - now / was):.0f}% off" if was else ""
    print(f'{now:8.2f} {off:8} {item["favorites"]:>6} favs  {item["seller"]["name"][:20]:20} {item["name"][:45]}')
```

Node.js (`npm install scrapely-client`), here pulling five listings from one shop:

```javascript
import { ScrapelyClient } from 'scrapely-client';

const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN, baseUrl: 'https://api.scrape.ly' });

const run = await client.actor('shelfbright/etsy-scraper').call({
  startUrls: [{ url: 'https://www.etsy.com/shop/EnjoyTheWood' }],
  maxItems: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.name, i.Price, i['Original Price'], i.favorites, i.listedOn]));
```

For AI agents, add the Scrape.ly MCP server. In Cursor, put this in `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "scrapely": {
      "url": "https://api.scrape.ly/mcp",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}
```

In Claude Code, run `claude mcp add --transport http scrapely https://api.scrape.ly/mcp` and sign in with `/mcp`. Then ask: "Use scrapely to run shelfbright/etsy-scraper for 'linen napkin', 10 listings, and give me a table of price, sale price, favorites and shop rating." A 10-listing run finishes inside the 45 seconds `call-actor` waits; for longer runs the agent polls `get-actor-run` and then reads the rows. The [Etsy API](https://scrape.ly/api/etsy-api.md) page shows the same Actor as an API product.

## A real run: wall art from $10 to $500

We ran the "Wall art from 10 to 500 USD, 10 listings" preset on 23 October 2026. It returned 10 listings in 23 seconds and was charged $0.0387. The first five rows:

| Listing                                                                          | Price      | Original price | Shop                | Shop rating | Favorites | Listed on    |
| -------------------------------------------------------------------------------- | ---------- | -------------- | ------------------- | ----------- | --------- | ------------ |
| Original Wine Bar Oil Painting, Three Women In Hats Artwork, Gold Framed Canvas… | Now$183.75 | $245.00        | GoldFrameVintageArt | 4.87        | 6         | Oct 21, 2026 |

|                 |                            |                    |           |        |                  |      |     |              |
| --------------- | -------------------------- | ------------------ | --------- | ------ | ---------------- | ---- | --- | ------------ |
| Coastal Wave \\ | Neutral Wave Canvas Art \\ | Ocean Waves Print… | Now$21.00 | $28.00 | TailoredCanvases | 4.87 | 389 | Oct 22, 2026 |

|                                                                                     |           |        |               |      |       |              |
| ----------------------------------------------------------------------------------- | --------- | ------ | ------------- | ---- | ----- | ------------ |
| Personalized City Map Print Set: Custom Home Town Art (Set of 3)                    | Now$25.98 | $64.95 | TheArtable    | 4.81 | 285   | Oct 22, 2026 |
| Dancing People Vinyl Record Framed Wall Art Print, Retro Music Decor, New Home Gift | Now$15.62 | $31.24 | DoormatCenter | 4.74 | 1,935 | Oct 21, 2026 |
| 3D Wooden World Map, Framed Travel Push Pin Board, Wall Art Living Room             | Now$49.00 | $81.67 | EnjoyTheWood  | 4.82 | 1,852 | Oct 22, 2026 |

Etsy shops are businesses, so their names stay in. What the full ten show:

- **Everything was on sale.** All 10 listings showed a sale price next to an original price, with discounts from 20% to 60%. If you track Etsy prices, store both fields, or a "price drop" may just be a sale banner.
- **Favorites measure demand.** Favorites ranged from 4 to 1,935. The two most-favorited listings (a vinyl record print and a wooden world map) were both under $50 on sale.
- **Shop quality comes with every row.** Shop ratings ran from 4.37 to 4.98, so you can filter out weak sellers without a second request.
- **Rich listings.** Nine of ten offered variations (size, frame, color), seven had a video, and every listing had between 4 and 20 photos.
- **Fresh dates.** `listedOn` ranged from 11 to 22 October 2026. Etsy shows the date a listing was published or renewed, so treat it as "last renewed", not "created".
- **Shipping was blank.** None of the ten public pages showed shipping details, which is common for Etsy. Budget for it separately in price comparisons.

The log, without the platform's start-up lines:

```plaintext
20261023T03:01:28.662Z [Scrapely] Container started (setup 3.0 s)
20261023T03:01:29.815Z [scrapely.actor] INFO  Challenge solver source: platform.
20261023T03:01:29.937Z [scrapely.actor] INFO  Searching for wall art
20261023T03:01:37.461Z [scrapely.actor] INFO  Fetching 10 listings.
20261023T03:01:48.110Z [scrapely.actor] INFO  Challenge solves: 1, failed: 0, proxy rotations: 0
20261023T03:01:48.110Z [scrapely.actor] INFO  Saved 10 listings.
20261023T03:01:48.890Z [Scrapely] Container state: status=exited exitCode=0 oomKilled=false
```

Etsy put up one bot check during the run. The Actor solved it with the platform's own solver on the default datacenter proxy, without rotating a single proxy, and carried on. You don't configure anything for it.

## What it costs

The Actor charges one event: $0.0034 per listing saved, which is $3.40 per 1,000 listings. Platform usage (compute and datacenter proxy) is billed on top.

For our run: 10 listings × $0.0034 = $0.034 in listing fees. The run was charged $0.0387 in total, because it also used $0.0031 of compute, $0.0016 of datacenter proxy traffic and $0.00005 of dataset writes. A 1,000-listing job costs $3.40 in listing fees plus usage, well inside the Free plan's $5 of monthly credit, and a maximum charge per run stops a job before it goes over.

## What to watch out for when scraping Etsy

- **Prices are display text, in US dollars.** `Price` reads "Now$21.00" on a sale and "$129.00" otherwise. Strip everything but digits and the decimal point, as in the Python example, and keep `Original Price` beside it.
- **Sort on category URLs.** Etsy currently refuses sorted keyword searches from logged-out visitors. The Actor falls back to relevance order and says so in its status instead of failing; for a price-sorted or newest-first list, paste a category URL, where sorting works.
- **Page size differs by source.** A keyword search shows about 12 listings per page (20 pages give about 240); category and market pages show about 48. For big jobs, paste category URLs and raise `endPage`.
- **Big runs take minutes.** 1,000 listings took about 12 minutes in the publisher's tests, so use the asynchronous API or a schedule, and leave descriptions and variation prices off unless you need them.
- **Filters apply to searches only.** Price range and sort affect keyword, search and category pages; listing URLs ignore them.
- **Sellers own their photos and text.** Use images and descriptions for analysis, not to republish on your own store.

## Is it legal to scrape Etsy?

The Actor reads public listing pages that anyone can open without an account. It never logs in and has no access to buyer accounts, orders or private shop statistics. Prices, titles, ratings and favorites are public product information, and shops are businesses.

Etsy sets rules for its platform. Its developer documentation says apps built on the [Open API](https://developers.etsy.com/documentation/) "must not sidestep the API to retrieve or post Etsy data" and that "Screen-scraping is not allowed" for those apps, and Etsy's Terms of Use govern how the site itself may be used. Read the current versions before you build a product on Etsy data, keep request volumes modest, and respect sellers' rights over their photos and descriptions.

Privacy law matters less here than on most sites, because the output holds shop and product data rather than buyer data. If you add descriptions, they may name the person behind a shop; treat that as personal data under the GDPR and the CCPA. Our guide on [whether web scraping is legal](https://scrape.ly/blog/is-web-scraping-legal.md) covers the general rules. This is not legal advice.

## Why Scrape.ly for Etsy

- **No app review, no API key.** Etsy's Open API v3 is built for "inventory, sales orders, and shop management". To use it you register an app for a keystring and shared secret; Personal Apps go through "a deeper review process", Commercial Access is "reviewed manually", and every key has per-second and per-day [rate limits](https://developers.etsy.com/documentation/essentials/rate-limits). The Actor runs the moment you press Start.
- **More than name and price.** ScraperAPI's Etsy tutorial (March 2026) collects name, price and URL with CSS classes such as `h3.v2-listing-card__title` and `span.currency-value`; when Etsy renames a class, the script returns nothing. The Actor returns the sale price, original price, shop rating, favorites, variations and related searches as named fields.
- **Bot checks handled.** Etsy challenged our run once; the platform's solver cleared it without any setup.
- **Built for cross-marketplace pricing.** The same publisher maintains the [eBay Scraper](https://scrape.ly/store/shelfbright/ebay-scraper.md) and scrapers for Amazon, Walmart and Google Shopping. Our [price scraping](https://scrape.ly/blog/price-scraping.md) guide shows how to compare them, and [how to scrape eBay](https://scrape.ly/blog/how-to-scrape-ebay.md) covers the resale side.

## FAQ

### Does Etsy have an API for product data?

Yes, the Etsy Open API v3, but it's designed for shop management and needs a registered app. Apps beyond your own shop go through Etsy's review, and every key has rate limits. For public listing data without an app, use a scraper such as the Etsy Scraper.

### Can I scrape Etsy with Python?

Yes. Install `scrapely-client-python`, call `shelfbright/etsy-scraper` with a keyword or URLs, and iterate over the dataset, as in the example above. You don't need BeautifulSoup selectors or a proxy service.

### How do I scrape all products from an Etsy shop?

Paste the shop URL, such as `https://www.etsy.com/shop/EnjoyTheWood`, into `startUrls` and set `maxItems` to the number of listings you want. The [shop preset](https://scrape.ly/store/shelfbright/etsy-scraper/presets/url.md) shows the shape.

### Can I scrape Etsy sales numbers?

Not as order data: buyer accounts, orders and private shop statistics aren't public. Favorites, review counts and the shop's review count are public, and they're the usual stand-ins for demand.

### How much does it cost to scrape Etsy data?

$0.0034 per listing, so $3.40 per 1,000, plus a little compute and proxy usage. Our 10-listing run was charged $0.0387 in total.

Scrape.ly Store Scrape Etsy listings Run the wall art preset as-is, type your own keyword, or paste a shop or category URL. $3.40 per 1,000 listings.

[Try it free](https://scrape.ly/store/shelfbright/etsy-scraper.md) [Browse the Store](https://scrape.ly/store.md)

About the author

[Shelfbright](https://scrape.ly/blog/author/shelfbright.md) Actor publisher on the Scrape.ly Store

Prices, stock and seller data from shops and marketplaces, from Amazon and AliExpress to Vinted and Leboncoin. For price trackers, catalogue teams and resellers. A Scrapely studio.

- [Website](https://scrape.ly/users/shelfbright.md)

Keep reading

## More in Tutorials

- [![Pixel-art robot with an orange >\_ on its terminal head pulls a review card with five green rating bubbles out of a hotel tower whose sign shows the green Tripadvisor owl logo, and drops it into a crate](https://scrape.ly/media/scrape-tripadvisor.png?w=750)](https://scrape.ly/blog/scrape-tripadvisor.md)
  ### [How to Scrape Tripadvisor: Hotels, Restaurants, Attractions and Reviews](https://scrape.ly/blog/scrape-tripadvisor.md)
  [Scrape Tripadvisor hotels, restaurants and attractions by city or URL, then pull the reviews: ratings, rankings, prices, contacts, trip types and owner replies. Two real runs, their exact cost, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-tripadvisor.md)
- [![Pixel-art robot with an orange >\_ on its terminal head lifts an AI overview card marked with an orange sparkle off a search page headed by the Google G logo, where an AI answer panel sits above the results, and drops it into a crate](https://scrape.ly/media/scrape-google-ai-overviews.png?w=750)](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  ### [How to Scrape Google AI Overviews and AI Mode Answers](https://scrape.ly/blog/scrape-google-ai-overviews.md)
  [Check which keywords trigger a Google AI Overview and get the answer text with every cited source, by country and language. Add AI Mode answers with brand and domain tracking. Real runs, real costs, and code for curl, Python, Node.js and AI agents.](https://scrape.ly/blog/scrape-google-ai-overviews.md)
- [![Pixel-art robot with an orange >\_ on its terminal head takes a classified ad slip with a purple title off a cork board topped with the purple Craigslist peace-sign logo and drops it into a crate](https://scrape.ly/media/scrape-craigslist.png?w=750)](https://scrape.ly/blog/scrape-craigslist.md)
  ### [How to Scrape Craigslist Listings: Prices, Locations and Full Ads](https://scrape.ly/blog/scrape-craigslist.md)
  [Scrape Craigslist by search URL or by city and category and get every ad as a row: title, price, neighborhood, category, posting date, attributes and the full description. A real run on New York bike ads, its cost, code for curl, Python and Node.js, and how to use the data responsibly.](https://scrape.ly/blog/scrape-craigslist.md)

## The internet is full of data. Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

[Get Started Free](https://my.scrape.ly/register) [Chat with Support](mailto:support@scrape.ly?subject=Question%20about%20Scrape.ly\&body=Hi%2C%20I%20have%20a%20question%20about%20Scrape.ly.)

No credit card. No setup calls.
