Etsy Shop Scraper
Under maintenancePricing
from $3.00 / 1,000 shop or product results
Etsy Shop Scraper
Under maintenanceScrape Etsy shop information and product listings: shop name, sales count, location, rating, product titles, prices, URLs, images, favorites.
Pricing
from $3.00 / 1,000 shop or product results
Rating
0.0
(0)
Developer
Harsh
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Scrape Etsy shop profiles and product listings in one run: shop name, sales, location, rating, product titles, prices, URLs, images, and favorites. Built with TypeScript, Crawlee CheerioCrawler, and multi-strategy extraction (JSON-LD, embedded scripts, DOM).
Run it on the Apify platform for scheduling, API access, proxy rotation, monitoring, and dataset exports (JSON, CSV, Excel).
What does Etsy Shop Scraper do?
Given one or more Etsy shop URLs, this Actor:
- Loads each shop page (with optional pagination)
- Extracts shop summary fields (name, location, sales, admirers, rating, reviews, description)
- Extracts product listings (title, price, currency, URL, image, listing ID, sold-out flag, favorites)
- Deduplicates products by
listingId - Pushes dataset items (
type: "shop"andtype: "product") - Exports PRODUCTS.csv and SHOP_SUMMARY.md to the key-value store
Why use Etsy Shop Scraper?
- Competitor research — track product catalogs, pricing, and ratings across shops
- Market analysis — sample niches by scraping multiple shop URLs
- Inventory monitoring — spot sold-out listings and favorites velocity
- Lead generation — collect public shop metadata for outreach (respect Etsy ToS)
How to scrape Etsy shops
- Open the Actor in Apify Console
- Paste one or more shop URLs (e.g.
https://www.etsy.com/shop/ShopName) - Set Max products per shop and optional proxy settings
- Click Start
- Download results from the Dataset tab or key-value store exports
Input
| Field | Type | Default | Description |
|---|---|---|---|
shopUrls | string[] | sample shop | Etsy shop page URLs |
maxProducts | integer | 50 | Max listings per shop |
maxConcurrency | integer | 2 | Concurrent HTTP requests |
maxRequestRetries | integer | 3 | HTTP retry count |
requestDelayMs | integer | 800 | Delay used for rate limiting |
proxyConfiguration | object | Apify Proxy on | Proxy settings |
includeShopInfo | boolean | true | Push type=shop summary |
includeProducts | boolean | true | Push type=product items |
Example:
{"shopUrls": ["https://www.etsy.com/shop/VintageVibes"],"maxProducts": 50,"maxConcurrency": 2,"maxRequestRetries": 3,"requestDelayMs": 800,"proxyConfiguration": { "useApifyProxy": true },"includeShopInfo": true,"includeProducts": true}
See examples/input.json.
Output
Dataset items are either shop or product records:
{"type": "product","shopName": "VintageVibes","shopUrl": "https://www.etsy.com/shop/VintageVibes","title": "Vintage Brass Candle Holder","price": 28,"currency": "USD","url": "https://www.etsy.com/listing/1000000001/vintage-brass-candle-holder","image": "https://i.etsystatic.com/example/il_570xN.1001.jpg","listingId": "1000000001","isSoldOut": false,"favorites": 312,"scrapedAt": "2026-07-13T12:00:00.000Z","error": null}
{"type": "shop","shopName": "VintageVibes","shopUrl": "https://www.etsy.com/shop/VintageVibes","location": "Portland, OR, US","sales": 12345,"admirers": 2100,"rating": 4.9,"reviewCount": 1284,"description": "Curated vintage home decor and gifts.","productCount": 4,"scrapedAt": "2026-07-13T12:00:00.000Z","error": null}
You can download the dataset as JSON, HTML, CSV, or Excel. The Actor also writes:
| Key-value record | Description |
|---|---|
PRODUCTS.csv | All product rows as CSV |
SHOP_SUMMARY.md | Markdown summary of shops + product table |
Data fields
| Field | Shop | Product |
|---|---|---|
type | ✅ | ✅ |
shopName | ✅ | ✅ |
shopUrl | ✅ | ✅ |
location | ✅ | |
sales | ✅ | |
admirers | ✅ | |
rating | ✅ | |
reviewCount | ✅ | |
description | ✅ | |
productCount | ✅ | |
title | ✅ | |
price | ✅ | |
currency | ✅ | |
url | ✅ | |
image | ✅ | |
listingId | ✅ | |
isSoldOut | ✅ | |
favorites | ✅ | |
scrapedAt | ✅ | ✅ |
error | ✅ | ✅ |
Pricing
Pay-per-event (PPE): $0.003 per dataset result (shop summary or product row), plus a small Actor-start fee.
Estimate: scraping 1 shop + 50 products ≈ 51 results ≈ $0.15.
Tips
- Use Apify Proxy (residential recommended) if Etsy returns captchas or 403s
- Keep
maxConcurrencylow (1–3) andrequestDelayMsaround 800–1500 ms - Increase
maxProductsonly as needed — larger catalogs cost more and take longer - Prefer stable public shop URLs:
https://www.etsy.com/shop/ShopName - Unit tests use HTML fixtures so CI does not depend on live Etsy access
Limitations
- Cheerio parses static HTML. Heavy client-only rendering may yield fewer listings.
- Etsy may block or rate-limit automated traffic; graceful error records are pushed when detected.
- Layout and embedded JSON formats change over time; multi-strategy extraction mitigates but cannot guarantee 100% coverage.
- Always respect Etsy Terms of Use and applicable laws. Scrape only public data you are allowed to collect.
Local development
cd factory/etsy-shop-scrapernpm installnpm run lintnpm run formatnpm run buildnpm testapify run --purge
Copy examples/input.json to storage/key_value_stores/default/INPUT.json for local runs.
Deploy
apify loginapify push
Project structure
.actor/ Actor metadata, input/output/dataset schemasexamples/ Sample input/output JSONsrc/main.ts Crawler setup, exports, rate limitsroutes.ts Shop page handlers, pagination, finalizeextractors.ts JSON-LD / embedded JSON / DOM extractorscsv.ts PRODUCTS.csv + SHOP_SUMMARY.md buildersutils.ts Parsing helperstypes.ts TypeScript interfacestest/fixtures/ Offline Etsy shop HTML
Support
Report issues on the Actor’s Issues tab in Apify Console. For custom scrapers or enterprise pipelines, contact the developer via Apify.
License
Apache-2.0