Etsy Product & Shop Analyzer avatar

Etsy Product & Shop Analyzer

Pricing

Pay per usage

Go to Apify Store
Etsy Product & Shop Analyzer

Etsy Product & Shop Analyzer

Extract product listings, shop info, sales estimates, reviews, and keyword data from Etsy. Marketplace research tool for handmade sellers.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Richard P

Richard P

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

5 days ago

Last modified

Share

An Apify Actor for extracting product listings, shop profiles, sales estimates, reviews, and keyword data from Etsy.

Features

  • Shop scraping — Extract full shop profiles including sales count, reviews, rating, member since, location, announcement, and social links.
  • Listing scraping — Extract product details: title, description, price, currency, stock, views, favourites, materials, tags, categories, images, and variations.
  • Review extraction — Pull customer reviews with author, rating, date, and text.
  • Listing discovery — Automatically discover and scrape all listings from a shop page.
  • Multi-method parsing — Uses JSON-LD structured data, meta tags, embedded app-state JSON, and HTML parsing for maximum data coverage.
  • Rate limiting — Configurable delay between requests to avoid detection.
  • Apify proxy support — Uses the Apify proxy pool (residential recommended) to bypass Etsy's anti-bot protection.
  • Graceful abort — Handles platform abort signals cleanly.

Input

FieldTypeDefaultDescription
shopUrlsstring[][]List of Etsy shop page URLs (e.g. https://www.etsy.com/shop/CeramicMugShop)
listingUrlsstring[][]List of individual listing URLs (e.g. https://www.etsy.com/listing/1234567890/...)
maxListingsinteger50Max listings to scrape per shop. 0 = unlimited.
includeReviewsbooleantrueWhether to extract customer reviews from listing pages.
maxReviewsinteger10Max reviews to extract per listing. 0 = all available.
proxyobjectApify ResidentialProxy configuration for bypassing Etsy's bot protection.
requestDelayMsinteger2000Delay between requests in milliseconds.

Output

Each record in the dataset is either a listing or shop type.

Listing fields

FieldDescription
listingIdEtsy numeric listing ID
titleProduct title
descriptionProduct description
priceCurrent price
originalPriceOriginal price (if on sale)
currencyCurrency code (USD, EUR, GBP, etc.)
quantityAvailable stock
viewsView count
favoritesHeart / favourite count
materialsArray of materials
tagsArray of search tags
categoriesCategory hierarchy
imagesArray of image URLs
variationsProduct variations (size, colour, etc.)
shopNameShop name
shopUrlShop page URL
shopLocationShop location
shopAverageRatingShop rating out of 5
shopTotalReviewsTotal shop reviews
reviewsArray of review objects
urlFull listing URL
scrapedAtISO 8601 scrape timestamp

Shop fields

FieldDescription
shopNameShop name
shopUrlShop page URL
shopLocationLocation string
shopTotalSalesEstimated total sales
shopTotalReviewsTotal review count
shopAverageRatingAverage rating (0–5)
shopMemberSinceMember join date
numberOfListingsNumber of active listings
shopAnnouncementShop announcement text
socialLinksSocial media profile URLs
urlFull shop URL
scrapedAtISO 8601 scrape timestamp

Review object

{
"author": "CustomerName",
"rating": 5,
"review": "Great product!",
"date": "2024-03-15"
}

Usage

Local development

# Install dependencies
pip install -r requirements.txt
# Run with Apify CLI
apify run --purge

Configuration

Create or modify .actor/input_schema.json to set input defaults. For local runs, Apify reads input from the INPUT.json file in the storage/ directory.

Apify platform

  1. Push the actor: apify push
  2. Configure input in the Apify Console web UI
  3. Run the actor

How it works

The actor uses a multi-strategy parsing pipeline:

  1. JSON-LD (<script type="application/ld+json">) — Primary source for structured product and shop data from Etsy's Schema.org markup.
  2. Embedded JSON — Scans <script> tags with data-app-state, data-init-state, application/json, and window.__INITIAL_STATE__ assignments for additional data.
  3. Meta tags — Open Graph (og:title, og:price:amount, etc.), Twitter Card, and standard meta tags for fallback data.
  4. HTML parsing — Visible DOM elements for favourites, stock, materials, tags, reviews, and shop stats.

Requests are sent via httpx.AsyncClient with Chrome user-agent headers, automatic retry on 403/429/503 responses, and exponential backoff.

Notes

  • Etsy uses DataDome anti-bot protection. For production use, residential proxies (available through Apify proxy) are strongly recommended.
  • Shop listing discovery depends on the shop page HTML structure. Some listings may not be found if the shop uses pagination (only the first page is scraped).
  • Reviews are often loaded dynamically. The actor extracts whatever is in the initial HTML — for full review sets, additional API calls may be needed.
  • Sales counts are estimates based on what Etsy displays on the shop page, which may be rounded or approximated.

Limitations

  • Does not handle shop listing pagination (only the first shop page)
  • Review extraction may be incomplete due to Etsy's dynamic loading
  • Etsy rate-limits aggressively — keep requestDelayMs at 2000+
  • Some fields (views, exact stock) may not be available from all pages

License

MIT