Etsy Shop Scraper avatar

Etsy Shop Scraper

Under maintenance

Pricing

from $3.00 / 1,000 shop or product results

Go to Apify Store
Etsy Shop Scraper

Etsy Shop Scraper

Under maintenance

Scrape 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

Harsh

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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:

  1. Loads each shop page (with optional pagination)
  2. Extracts shop summary fields (name, location, sales, admirers, rating, reviews, description)
  3. Extracts product listings (title, price, currency, URL, image, listing ID, sold-out flag, favorites)
  4. Deduplicates products by listingId
  5. Pushes dataset items (type: "shop" and type: "product")
  6. 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

  1. Open the Actor in Apify Console
  2. Paste one or more shop URLs (e.g. https://www.etsy.com/shop/ShopName)
  3. Set Max products per shop and optional proxy settings
  4. Click Start
  5. Download results from the Dataset tab or key-value store exports

Input

FieldTypeDefaultDescription
shopUrlsstring[]sample shopEtsy shop page URLs
maxProductsinteger50Max listings per shop
maxConcurrencyinteger2Concurrent HTTP requests
maxRequestRetriesinteger3HTTP retry count
requestDelayMsinteger800Delay used for rate limiting
proxyConfigurationobjectApify Proxy onProxy settings
includeShopInfobooleantruePush type=shop summary
includeProductsbooleantruePush 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 recordDescription
PRODUCTS.csvAll product rows as CSV
SHOP_SUMMARY.mdMarkdown summary of shops + product table

Data fields

FieldShopProduct
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 maxConcurrency low (1–3) and requestDelayMs around 800–1500 ms
  • Increase maxProducts only 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-scraper
npm install
npm run lint
npm run format
npm run build
npm test
apify run --purge

Copy examples/input.json to storage/key_value_stores/default/INPUT.json for local runs.

Deploy

apify login
apify push

Project structure

.actor/ Actor metadata, input/output/dataset schemas
examples/ Sample input/output JSON
src/
main.ts Crawler setup, exports, rate limits
routes.ts Shop page handlers, pagination, finalize
extractors.ts JSON-LD / embedded JSON / DOM extractors
csv.ts PRODUCTS.csv + SHOP_SUMMARY.md builders
utils.ts Parsing helpers
types.ts TypeScript interfaces
test/
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