Etsy Shop Scraper: Listings, Reviews & Sales avatar

Etsy Shop Scraper: Listings, Reviews & Sales

Pricing

from $2.00 / 1,000 listings

Go to Apify Store
Etsy Shop Scraper: Listings, Reviews & Sales

Etsy Shop Scraper: Listings, Reviews & Sales

Scrape any Etsy shop: a profile with total sales, ratings, followers and seller contact details, every listing with live in-cart counts, tags and 24h sales, or all shop reviews. Paste shop URLs or names. No login. Export to JSON, CSV or Excel.

Pricing

from $2.00 / 1,000 listings

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

124

Total users

41

Monthly active users

6 days ago

Last modified

Share

Etsy Shop Scraper: shop profiles, listings with live cart counts, reviews and total sales

Etsy Shop Scraper turns any list of Etsy shops into a spreadsheet. Give it shop URLs, names or IDs and choose what you want: the shop profile, every active listing, or all of the shop's reviews. It is built for competitor research, seller sourcing, catalog and price monitoring, and review analysis.

Each mode returns one kind of row:

  • Profiles: total sales, rating and sub-ratings, review count, followers, favorites, active listings, Star Seller status, location, policies, story, team, sections and FAQ.

  • Listings: price, sale price, live in-cart count, quantity, free shipping, processing time, creation and last-sale dates. Optionally tags, description, all images, variations and favorites.

  • Reviews: date, rating, text, buyer photo or video, seller response and the item reviewed.

  • Total sales, even when the shop hides them. soldCount is Etsy's own sales counter. Etsy returns it for shops that don't show it on their page, and soldCountHiddenOnSite tells you which ones.

  • Exact cart counts. inCartCount is the number of buyers who have the listing in their cart right now, not the rounded "In 20+ carts" label.

  • Filter at the source. Sort a shop's listings, search inside the shop, or limit to one section. For reviews, filter by star rating, topic (quality, shipping, customer service), photos or videos. Etsy applies the filters, so you read only matching rows.

  • Seller contact details when published. For shops registered as traders, the profile can include the legal name, email, phone, address and VAT number that Etsy shows to EU buyers. Many shops publish none.

  • Pay per row, no subscription. You pay per profile, listing or review saved. No Etsy account, API key or proxy setup. Export to JSON, CSV, Excel or Google Sheets.

Scope: This actor works with known shops. To search Etsy by keyword and get ranks, ads and tags across a whole niche, use Etsy Scraper. A listing URL scrapes the shop that sells it, not just that one listing.

What can you do with Etsy Shop Scraper?

GoalHow
Measure a competitor's real salesRun profiles mode on a schedule and subtract yesterday's soldCount from today's.
See what is in buyers' cartsRun listings mode and sort by inCartCount.
Copy a shop's catalog structureRead a profile's sections (id, title, listingCount), then pull one section with listingsSectionId.
Spot new products and price changesSchedule listings mode with listingsSortOrder set to date_desc and compare id, createdAt, price, salePrice.
Research a shop's tags and materialsTurn on includeListingDetails and read tags, materials, category.
Find what customers complain aboutUse reviews mode with reviewsRatings ["1", "2"] and reviewsTopic such as shipping.
Vet a seller or supplierRead isStarSeller, rating, ratingShipping, ratingCustomerService, shipsInternational, processingTimeText.
Build a list of business sellersUse profiles mode with includeContactInfo and keep rows with a contact object. See the personal data note below.

How it compares

What you needEtsy Shop ScraperPage-by-page Etsy scrapersCopy and paste
Shop sales totalsoldCount, also for shops that hide itOnly when shown on the shop pageOnly when shown on the shop page
Cart countsExact inCartCount for every listingOften missing or roundedRounded label on one listing
Whole catalog of a big shopPaged 36 at a time, deep offsets, no fixed ceilingVariesHours of work
Review filtersStars, topic, photos, videos, sort orderOften noneNone
Raw data for your analysisEvery field, as JSON, CSV, Excel or APIYesNo
PricePay per rowPay per rowYour time

Quick start

  1. Click Try for free and sign in to Apify.
  2. Add one or more shops to Shops: a URL, a shop name or a numeric shop ID.
  3. Select Listings, Shop profiles or Reviews.
  4. For a first run, set Max results per shop to 10.
  5. Click Start. When the run finishes, open the Output tab and export the data.
{
"shops": ["https://www.etsy.com/shop/CaitlynMinimalist"],
"mode": "listings",
"maxResultsPerShop": 10
}

The shop above is the input form's example. Replace it with your target shop.

What data can you extract?

ModeOne row isMain data
profilesOne shopsoldCount, rating, reviewCount, followerCount, favoritesCount, activeListingCount, isStarSeller, location, policies, story, members, sections, faq, relatedLinks
listingsOne active listingprice, salePrice, inCartCount, quantity, hasFreeShipping, flags such as isBestseller and isHandmade, processing days, createdAt, renewedAt, lastSaleAt, imageUrl
reviewsOne reviewdate, rating, text, sellerResponse, photoUrl, videoUrl, listingTitle, buyerName

In listings mode, turn on includeListingDetails to add tags, materials, description, images, variations with prices, favorites, listingRating, category, shippingCost and boughtLast24h.

In profiles mode, turn on includeContactInfo to add contact for shops that publish trader details.

The full field lists for each mode are in the Output section below.

Track shops over time with scheduled runs

Most of the value comes from running the same shops again and comparing. Apify can run the actor for you on a schedule and send the results wherever you need them.

1. Save your input as a task

Open the actor, set your shops and options, then click Save as a new task. A task is a saved input you can run again with one click or on a schedule.

2. Schedule the task

In Apify Console, go to Schedules, click Create new, choose how often to run (for example daily at 00:00 in your time zone), and add your task. See Schedules and How to create a schedule.

Watch how to schedule an Actor:

Or schedule a saved task:

Common schedules:

Use caseModeFrequencyCron expression
Daily sales of a competitorprofilesDaily0 0 * * *
New listings and price changeslistingsDaily0 6 * * *
Demand watch in the holiday rushlistingsTwice a day0 6,18 * * *
New negative reviewsreviewsWeekly (Monday)0 6 * * 1

3. Send the results to a spreadsheet

Connect Google in the task's Integrations tab to save every run to Google Sheets or Google Drive automatically:

4. Compare runs

Every row has scrapedAt. Profile rows have id (the shop ID), listing rows have id and shopId, and review rows have id and receiptId, so runs are easy to join:

  • Daily shop sales: per shop, today's soldCount minus yesterday's.
  • New products: listing ids that appear for the first time, and their createdAt.
  • Price changes: price and salePrice per listing id.
  • Demand trend: inCartCount per listing id over time.
  • New reviews: review ids you have not seen before.

Input reference

FieldTypeDefaultEffect
shopsArray of stringsRequiredShop URLs, names, IDs, listing URLs or etsy.me share links. At least one valid entry is needed.
modeString"listings""listings", "profiles" or "reviews".
maxResultsPerShopInteger, minimum 0100Maximum listings or reviews saved per shop. 0 means no limit. Ignored in profiles mode.
includeContactInfoBooleanfalseProfiles mode. Adds trader contact details when the shop publishes them.
listingsSortOrderString"relevance"Listings mode. "relevance", "date_desc", "price_asc" or "price_desc".
listingsSearchQueryStringEmptyListings mode. Only listings in the shop that match this keyword.
listingsSectionIdStringEmptyListings mode. Only listings in this shop section. Section IDs are in the profile's sections.
includeListingDetailsBooleanfalseListings mode. Adds tags, description, images, variations, favorites and 24-hour sales. One extra request per listing, charged as a separate event.
reviewsSortOrderString"Recency"Reviews mode. "Recency", "Relevancy", "Highest" or "Lowest".
reviewsRatingsArray of stringsEmpty (all)Reviews mode. Star ratings to include, for example ["1", "2"].
reviewsTopicStringEmpty (any)Reviews mode. "quality", "shipping" or "customer_service", as tagged by Etsy.
reviewsWithPhotosOnlyBooleanfalseReviews mode. Only reviews with a buyer photo.
reviewsWithVideosOnlyBooleanfalseReviews mode. Only reviews with a buyer video.

Accepted shop inputs

  • Shop URL: https://www.etsy.com/shop/CaitlynMinimalist, including locale variants such as /uk/shop/… or /de-en/shop/…, query strings and sub-pages. URLs without https:// are accepted.
  • Shop subdomain: https://caitlynminimalist.etsy.com.
  • Shop name: CaitlynMinimalist.
  • Shop ID: 10204022.
  • Listing URL: https://www.etsy.com/listing/1551096207/… scrapes the shop that sells the listing.
  • Share link: https://etsy.me/… links from the Etsy app, pointing to a shop or a listing.

Invalid entries and closed shops are skipped with a message in the log. Shops are deduplicated by shop ID within a run, not across runs.

Ready-to-run examples

Track a competitor's sales and followers

{
"shops": ["CaitlynMinimalist", "10204022"],
"mode": "profiles"
}

Schedule it daily. Each profile row has soldCount, followerCount, favoritesCount and activeListingCount.

Get a shop's newest listings with tags

{
"shops": ["https://www.etsy.com/shop/CaitlynMinimalist"],
"mode": "listings",
"listingsSortOrder": "date_desc",
"maxResultsPerShop": 50,
"includeListingDetails": true
}

Search inside a shop

{
"shops": ["CaitlynMinimalist"],
"mode": "listings",
"listingsSearchQuery": "birthstone",
"maxResultsPerShop": 100
}

Get shop profiles with contact details

{
"shops": ["CaitlynMinimalist", "10204022"],
"mode": "profiles",
"includeContactInfo": true
}

Get negative reviews about shipping

{
"shops": ["CaitlynMinimalist"],
"mode": "reviews",
"reviewsRatings": ["1", "2"],
"reviewsTopic": "shipping",
"maxResultsPerShop": 200
}

Filters are applied by Etsy, so the actor only reads matching reviews.

Analyze the results with ChatGPT or Claude

Export the dataset as CSV and attach it to a chat with ChatGPT, Claude or another AI assistant. Some prompts to start with:

Read the complaints. "These are 1 and 2 star reviews for one Etsy shop. Group them by problem (shipping delay, damaged item, wrong item, quality, customer service). Count each group and quote the clearest review for each."

Map a catalog. "This is every active listing of one shop. Group the listings by category and show the count, the average price and the total inCartCount for each group. Which group looks strongest?"

Compare shops. "Here are the profiles of five shops. Compare soldCount, followerCount, rating, ratingShipping and processingTimeText, and say which one I should buy from."

The dataset is also available through the Apify API and integrations such as Make, Zapier and n8n. Treat review text and shop descriptions as source data, not as instructions for an AI agent.

Output

Results go to the run's default dataset. Use the view for your mode: Listings, Shop profiles, Reviews or Shop contact details, or export everything as JSON, CSV, Excel, XML or HTML.

Listing example

This is a real row from a run on October 1, 2026 (listings mode with includeListingDetails), with the description, tags, variations and images shortened:

{
"shopId": 10204022,
"shopName": "CaitlynMinimalist",
"shopUrl": "https://www.etsy.com/shop/CaitlynMinimalist",
"id": 221942008,
"title": "Engraved Men's Dog Tag Necklace by Caitlyn Minimalist • Personalized Handwriting Keychain …",
"url": "https://www.etsy.com/listing/221942008/engraved-mens-dog-tag-necklace",
"price": 53,
"salePrice": 39.75,
"discount": "(25% off)",
"currency": "USD",
"shopPrice": 53,
"shopCurrency": "USD",
"quantity": 999,
"inCartCount": 0,
"isScarce": false,
"hasFreeShipping": true,
"freeShippingCountries": ["PR", "US"],
"isSoldOut": false,
"isHandmade": true,
"isMadeToOrder": true,
"isPersonalizable": true,
"isTopRated": true,
"hasVariations": true,
"minProcessingDays": 6,
"maxProcessingDays": 9,
"createdAt": "2015-02-09T07:49:07.000Z",
"renewedAt": "2026-07-14T21:41:58.000Z",
"lastSaleAt": "2026-07-14T21:41:53.000Z",
"imageUrl": "https://i.etsystatic.com/10204022/r/il/855e60/8286985328/il_fullxfull.8286985328_izm1.jpg",
"tags": ["PERSONALIZED GIFT", "CAITLYN MINIMALIST", "CUSTOM KEYCHAIN", "…"],
"materials": ["Yellow gold", "Stainless steel"],
"whenMade": "made_to_order",
"category": "Keychains",
"categoryPath": "accessories.keychains_and_lanyards.keychains",
"sectionName": "Gifts for Him",
"favorites": 2216,
"boughtLast24h": null,
"demandMessage": null,
"listingRating": 4.94,
"listingReviewCount": 399,
"minPrice": 39.75,
"maxPrice": 47.25,
"variations": [
{
"name": "ENGRAVING",
"options": [
{ "value": "ONE SIDE", "price": 39.75, "isAvailable": true },
{ "value": "BOTH SIDES", "price": 47.25, "isAvailable": true }
]
}
],
"shippingCost": 0,
"processingTime": "6-9 business days",
"shipsFromCountryCode": "US",
"scrapedAt": "2026-09-30T22:44:51.360Z"
}

Profile example

A real profile row, with long text fields and lists shortened:

{
"id": 10204022,
"name": "CaitlynMinimalist",
"url": "https://www.etsy.com/shop/CaitlynMinimalist",
"headline": "Custom Jewelry & More, Crafted with Love ♡",
"location": "California, United States",
"countryCode": "US",
"currency": "USD",
"openedAt": "2014-11-01T23:08:19.000Z",
"isStarSeller": true,
"signals": ["Bestselling shop", "24 hours or less typical response time", "4.8 or higher average review rating"],
"rating": 4.82,
"reviewCount": 751443,
"ratingItemQuality": 4.84,
"ratingShipping": 4.84,
"ratingCustomerService": 4.87,
"reviewTopicCounts": {
"quality": 102057,
"shipping": 54227,
"customerService": 45948,
"withPhotos": 79529,
"withVideos": 265
},
"soldCount": 3850221,
"soldCountHiddenOnSite": true,
"activeListingCount": 2524,
"favoritesCount": 538853,
"followerCount": 525398,
"acceptsReturns": true,
"shipsInternational": true,
"isBusiness": true,
"isTrader": true,
"sections": [{ "id": 49677399, "title": "EARRINGS: Hoops", "listingCount": 338 }, "…"],
"scrapedAt": "2026-09-30T23:01:30.000Z"
}

Review example

A real review row, with the listing title shortened:

{
"shopId": 10204022,
"shopName": "CaitlynMinimalist",
"id": 5199163885,
"receiptId": 4158960349,
"date": "2026-09-30T22:35:23.000Z",
"rating": 5,
"text": "Very pleased with my necklace!",
"language": "en",
"sellerResponse": null,
"photoUrl": null,
"videoUrl": null,
"helpfulCount": 0,
"listingId": 861823046,
"listingTitle": "Initial Padlock Necklace by Caitlyn Minimalist • Custom Lock Letter Pendant Necklace • Per…",
"buyerUserId": 11161566,
"buyerName": "keeniekeen",
"scrapedAt": "2026-09-30T22:44:10.517Z"
}

Fields by mode

Profiles

  • Identity: id, name, url, headline, announcement, iconUrl, bannerUrl, ownerName, ownerUserId, ownerLoginName, ownerAvatarUrl.
  • Location: location, countryCode, shipsFromCity, shipsFromState, shipsFromPostalCode, shipsFromCountryCode, currency, languages.
  • Status: openedAt, updatedAt, isOpen, isOnVacation, isStarSeller, starSellerHighlights, signals, isBusiness, isTrader.
  • Reputation: rating, reviewCount, ratingItemQuality, ratingShipping, ratingCustomerService, reviewTopicCounts.
  • Activity: soldCount, soldCountHiddenOnSite, activeListingCount, digitalListingCount, favoritesCount, followerCount, bestSellerListingIds, featuredListingIds.
  • Policies: acceptsCustomRequests, acceptsReturns, acceptsExchanges, acceptsCancellations, returnWithinDays, shipsInternational, processingTimeText.
  • About: storyHeadline, story, members, relatedLinks, sections (id, title, listingCount), faq.
  • With includeContactInfo, when available: contact (name, email, phone, addressLine1, addressLine2, city, state, postalCode, country, vatNumber, details, traderStatement, updatedAt).

Listings

  • Identity: id, url, shopId, shopName, shopUrl.
  • Price: price, salePrice, discount, currency, shopPrice, shopCurrency, quantity, isSoldOut.
  • Demand: inCartCount, isScarce, lastSaleAt, hasFreeShipping, freeShippingCountries.
  • Flags: isDigital, isHandmade, isVintage, isMadeToOrder, isCustomizable, isPersonalizable, isBestseller, isTopRated, hasVariations, colorVariationCount, sizeVariationCount.
  • Fulfillment: minProcessingDays, maxProcessingDays, acceptsReturns, acceptsExchanges, returnDeadlineDays.
  • Dates: createdAt (first published), renewedAt (last renewal), lastSaleAt.
  • Media and category: thumbnail, imageUrl, videoUrl, reviewPhotoCount, taxonomyId.
  • With includeListingDetails: description, tags, materials, whenMade, category, categoryPath, sectionId, sectionName, favorites, boughtLast24h, demandMessage, listingRating, listingReviewCount, minPrice, maxPrice, variations (name, options with value, price, isAvailable), images, shippingCost, processingTime, shipsFromCountryCode.

Reviews

  • Identity: id (transaction ID), receiptId, shopId, shopName, shopUrl.
  • Review: date, updatedAt, rating, text, language, sellerResponse, photoUrl, videoUrl, helpfulCount.
  • Item: listingId, listingTitle, listingUrl, listingImage.
  • Buyer: buyerUserId, buyerName, buyerAvatarUrl. These are null when the buyer's name is withheld.

A buyer who reviews several items from one order produces one row per item, with a shared receiptId.

Notes on fields

  • soldCount is the shop's total sales count. Etsy returns it even for shops that hide it on their page. rating is null for shops without reviews.
  • price and salePrice are in US dollars. shopPrice and shopCurrency give the regular price in the shop's own currency. With variations, price is the starting price; details add minPrice, maxPrice and per-option prices.
  • inCartCount is the live count at the time of the run.
  • boughtLast24h is set only when Etsy shows its "In demand" message on the listing. null means no message, not zero sales.
  • createdAt is the first publish date. renewedAt is the last renewal.
  • Without listing details, each listing has its main image only. Detail fields are omitted when details are off or the detail request fails. A failed detail request is not charged.
  • Every row has scrapedAt in UTC. Missing values are null. contact is left out when not requested or not published by the shop.
  • Titles, review text and descriptions have HTML entities decoded.

Contact details and personal data

Etsy shows trader contact details to buyers in the EU. Only shops registered as traders publish them, so many shops, including some EU shops, have none. The actor charges the contact details event only for shops where it returns them.

Contact details and reviews contain personal data. You are responsible for having a lawful basis to process it and for complying with laws such as GDPR and CAN-SPAM. Do not use it for unsolicited marketing where that is not permitted.

FAQ

How many listings or reviews can I get from one shop?

All of them. Listings are read 36 per request and reviews 100 per request, until the shop runs out or reaches maxResultsPerShop. Set maxResultsPerShop to 0 for no limit, but remember that large shops have thousands of listings and hundreds of thousands of reviews, so set a limit or a maximum cost per run.

Why did a shop fail with "This shop appears to be closed"?

Etsy returns this for shops that are closed, suspended or don't exist. Check the spelling of the shop name.

Can some shops fail while the run succeeds?

Yes. The actor continues after a shop fails and succeeds if at least one shop finishes. If none finish, the run fails. Rows saved before an error remain in the dataset. Check the log for failed shops.

Can I get sold or inactive listings?

No. Listings mode returns active public listings. Etsy doesn't publish sales per listing. The profile's soldCount gives the shop's total sales, and each listing's lastSaleAt gives the time of its latest sale. For sales over a period, compare soldCount between scheduled runs.

Is soldCount an estimate?

No. It is Etsy's own counter for the shop at the time of the run.

Why is contact missing?

The shop is not registered as a trader, or it published no contact details. Turn on includeContactInfo in profiles mode and expect many shops to have none.

Do I need proxies, an Etsy account or an API key?

No. The actor handles connections and retries itself. It rotates IP addresses on blocked or rate-limited requests and retries up to five times, switching to residential IPs for later attempts. It doesn't log in and doesn't use your Etsy account. Persistent blocks can still stop collection.

How is this different from Etsy's official API?

Etsy's Open API needs an approved developer app and doesn't offer live cart counts or review filters by topic. This actor returns what a shopper sees on a shop, plus those signals.

The actor collects publicly visible shop, listing and review data. Reviews and contact details can be personal data. You are responsible for how you use it, including Etsy's terms and laws such as GDPR.

How do I search Etsy by keyword?

Use Etsy Scraper. It collects keyword results with search rank, ad slots, cart counts, tags and shop sales, and splits large searches by price to go past Etsy's limit of about 1,000 results.

Cost

This actor uses pay-per-event pricing. You pay only for rows saved, with no subscription:

EventPricePer 1,000Charged when
profile$0.003$3A shop profile is saved.
contact-details$0.01$10Contact details are added to a profile. Only when the shop publishes them.
listing$0.002$2A listing is saved.
listing-detail$0.003$3Details are added to a listing and the detail request succeeds.
review$0.0015$1.50A review is saved.

There is also a small fee for starting a run: $0.00005 per GB of run memory, with a minimum of one event.

Example runs:

RunCost
100 listings without details$0.20
100 listings with details$0.50
1,000 listings with details$5
1,000 reviews$1.50
50 shop profiles$0.15
3 shops x 500 listings, daily for 30 days$90

Turn off includeListingDetails for the cheapest runs. Set maxResultsPerShop and a maximum cost per run; the actor stops cleanly when the cost limit is reached. The Pricing tab always shows the current prices.

Support

Report problems or request features in the Issues tab. Include the run ID, the selected mode, the input and what you expected. We read every issue.

This actor is not affiliated with or endorsed by Etsy, Inc. "Etsy" is a trademark of Etsy, Inc.