Etsy Scraper
Pricing
Pay per event
Etsy Scraper
Scrape Etsy product listings by search query or shop URL. Get titles, prices, images, sellers, ratings, review counts, tags, and shipping info.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Daniel Wilson
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Etsy Scraper — Product & Shop Listings
Extract product listings from Etsy search results and shop pages at scale. Get structured data — titles, prices, ratings, reviews, seller info, tags, images, and more — delivered as a clean JSON dataset you can download as CSV, Excel, JSON, or HTML.
Powered by Crawlee and BeautifulSoup for fast, efficient static HTML parsing. Runs on Apify — no infra to manage, built-in proxy rotation, scheduling, and webhook integrations.
Why use Etsy Scraper?
- Market research — Track pricing trends, popular products, and bestseller badges across categories
- Competitor monitoring — Watch specific shops for new listings, price changes, and inventory
- Product catalog building — Build a searchable database of Etsy products with structured metadata
- Price comparison — Compare prices across sellers for identical or similar products
- SEO & keyword analysis — Extract listing tags to understand how top sellers optimize their products
- Data enrichment — Augment your own datasets with real-time Etsy product information
How to use Etsy Scraper
- Set up locally — Clone this repo and install dependencies:
pip install -r requirements.txt - Run a search — Create a test input file with
search_queryset to what you want to find, then runapify run --input-file=test-input.json - Scrape a shop — Provide a
shop_urllikehttps://www.etsy.com/shop/ShopNameinstead of a search query - Adjust the limits — Set
max_resultsto cap output (default 25, max 200). First 10 results are free per run; subsequent results use PPE billing at $0.004/result - Sort the results — Choose from relevance, newest, price ascending/descending, or best selling
- Filter by price — Set
min_priceandmax_priceto narrow results - Deploy to Apify — Run
apify login, thenapify pushto deploy. Schedule runs, set up webhooks, and integrate with Zapier, Make, or Google Drive
What data does it extract?
Each scraped product listing includes:
| Field | Type | Description |
|---|---|---|
title | string | Product listing title |
url | string | Full Etsy listing URL |
price | string | Current price (e.g. "$24.99") |
original_price | string or null | Original price if on sale |
currency | string | Currency code (USD, EUR, GBP, etc.) |
image_url | string | Main product image URL |
seller | string | Shop name |
seller_url | string | Full shop URL |
rating | number or null | Average rating (0.0–5.0) |
reviews_count | number or null | Number of reviews |
tags | array of strings | Listing tags/keywords |
is_bestseller | boolean | Whether the listing has a bestseller badge |
free_shipping | boolean | Whether the listing offers free shipping |
Example output
{"title": "Handmade Sterling Silver Ring with Moonstone","url": "https://www.etsy.com/listing/1234567890","price": "$48.00","original_price": null,"currency": "USD","image_url": "https://i.etsystatic.com/xxx/il/xxx.jpeg","seller": "MoonstoneJewelryCo","seller_url": "https://www.etsy.com/shop/MoonstoneJewelryCo","rating": 4.8,"reviews_count": 234,"tags": ["moonstone ring", "sterling silver", "handmade jewelry", "birthstone"],"is_bestseller": true,"free_shipping": true}
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
search_query | string | No* | — | Etsy search query (e.g. "handmade jewelry") |
shop_url | string | No* | — | Full Etsy shop URL (e.g. https://www.etsy.com/shop/ShopName) |
max_results | integer | No | 25 | Max results to return (1–200) |
sort | string | No | relevance | Sort order: relevance, newest, price_asc, price_desc, bestselling |
min_price | number | No | — | Minimum price filter |
max_price | number | No | — | Maximum price filter |
proxyConfiguration | object | No | disabled | Apify proxy configuration for anti-bot protection |
*Either search_query or shop_url is required.
Pricing / How much does it cost to scrape Etsy?
This Actor uses pay-per-event (PPE) billing on the Apify platform. You get 10 free results per run — ideal for testing and small-scale scraping. Beyond that, each result costs $0.004. The Actor start event costs $0.00005.
Example cost estimate: A run with 50 results costs 40 × $0.004 = $0.16 (after the 10 free results). With 200 max results: 190 × $0.004 = $0.76 per run.
Running locally on your machine costs nothing beyond your own bandwidth.
Tips / Advanced options
- Proxy for large scrapes — If you're scraping many pages, enable Apify proxy to avoid rate limiting. Configure it in the input under
proxyConfigurationor via the Apify Console. - Limited by results, not pages — The
max_resultslimit counts individual products, not page views. Each search page contains ~48 products, so a run withmax_results: 50typically only needs 2 page requests. - Search vs shop mode — Only one of
search_queryorshop_urlshould be provided. If both are present, search takes priority. - Price filters work with search —
min_priceandmax_priceonly apply to search queries, not shop URLs. - Running locally — Use
apify run --input-file=test-input.jsonto test. Data lands in the localstorage/directory. - Deploying to the cloud — Run
apify pushto deploy. Your Actor will appear at console.apify.com under My Actors.
FAQ, disclaimers, and support
Is scraping Etsy legal? Web scraping publicly available data is generally legal, but you should review Etsy's Terms of Service and robots.txt before scraping at scale. This Actor respects robots.txt by default and is designed for responsible data collection.
Does this scrape individual product detail pages? No — this scraper extracts data from search result cards and shop listing pages, which contain all the fields listed in the output schema. Individual product pages provide additional data (descriptions, variations, shipping details) but are not covered in this version.
What if a field comes back null? Some fields like rating, reviews_count, and original_price may be null for listings that don't have reviews, aren't on sale, or whose cards use a different HTML structure. The scraper uses multiple selector fallbacks to maximize coverage.
Rate limits and blocking — Etsy may rate-limit aggressive scraping. For production use at scale, enable Apify proxy and keep max_results reasonable. The scraper uses retry-on-blocked behavior by default.
Found a bug or need a custom solution? Open an issue in this repository or contact us for custom Actor development. We can extend this scraper to handle individual listing pages, more detailed shop data, or integrate with your specific workflow.
Data accuracy — This scraper extracts data as it appears on Etsy's public pages at the time of scraping. Etsy may change its HTML structure, which could affect parsing. We maintain multiple fallback selectors to stay resilient, but no guarantee of 100% uptime is made.