Etsy Shop Scraper: Listings, Reviews & Sales
Pricing
from $2.00 / 1,000 listings
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
Maintained by CommunityActor stats
0
Bookmarked
124
Total users
41
Monthly active users
6 days ago
Last modified
Categories
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.
soldCountis Etsy's own sales counter. Etsy returns it for shops that don't show it on their page, andsoldCountHiddenOnSitetells you which ones. -
Exact cart counts.
inCartCountis 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?
| Goal | How |
|---|---|
| Measure a competitor's real sales | Run profiles mode on a schedule and subtract yesterday's soldCount from today's. |
| See what is in buyers' carts | Run listings mode and sort by inCartCount. |
| Copy a shop's catalog structure | Read a profile's sections (id, title, listingCount), then pull one section with listingsSectionId. |
| Spot new products and price changes | Schedule listings mode with listingsSortOrder set to date_desc and compare id, createdAt, price, salePrice. |
| Research a shop's tags and materials | Turn on includeListingDetails and read tags, materials, category. |
| Find what customers complain about | Use reviews mode with reviewsRatings ["1", "2"] and reviewsTopic such as shipping. |
| Vet a seller or supplier | Read isStarSeller, rating, ratingShipping, ratingCustomerService, shipsInternational, processingTimeText. |
| Build a list of business sellers | Use profiles mode with includeContactInfo and keep rows with a contact object. See the personal data note below. |
How it compares
| What you need | Etsy Shop Scraper | Page-by-page Etsy scrapers | Copy and paste |
|---|---|---|---|
| Shop sales total | soldCount, also for shops that hide it | Only when shown on the shop page | Only when shown on the shop page |
| Cart counts | Exact inCartCount for every listing | Often missing or rounded | Rounded label on one listing |
| Whole catalog of a big shop | Paged 36 at a time, deep offsets, no fixed ceiling | Varies | Hours of work |
| Review filters | Stars, topic, photos, videos, sort order | Often none | None |
| Raw data for your analysis | Every field, as JSON, CSV, Excel or API | Yes | No |
| Price | Pay per row | Pay per row | Your time |
Quick start
- Click Try for free and sign in to Apify.
- Add one or more shops to Shops: a URL, a shop name or a numeric shop ID.
- Select Listings, Shop profiles or Reviews.
- For a first run, set Max results per shop to
10. - 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?
| Mode | One row is | Main data |
|---|---|---|
profiles | One shop | soldCount, rating, reviewCount, followerCount, favoritesCount, activeListingCount, isStarSeller, location, policies, story, members, sections, faq, relatedLinks |
listings | One active listing | price, salePrice, inCartCount, quantity, hasFreeShipping, flags such as isBestseller and isHandmade, processing days, createdAt, renewedAt, lastSaleAt, imageUrl |
reviews | One review | date, 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 case | Mode | Frequency | Cron expression |
|---|---|---|---|
| Daily sales of a competitor | profiles | Daily | 0 0 * * * |
| New listings and price changes | listings | Daily | 0 6 * * * |
| Demand watch in the holiday rush | listings | Twice a day | 0 6,18 * * * |
| New negative reviews | reviews | Weekly (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
soldCountminus yesterday's. - New products: listing
ids that appear for the first time, and theircreatedAt. - Price changes:
priceandsalePriceper listingid. - Demand trend:
inCartCountper listingidover time. - New reviews: review
ids you have not seen before.
Input reference
| Field | Type | Default | Effect |
|---|---|---|---|
shops | Array of strings | Required | Shop URLs, names, IDs, listing URLs or etsy.me share links. At least one valid entry is needed. |
mode | String | "listings" | "listings", "profiles" or "reviews". |
maxResultsPerShop | Integer, minimum 0 | 100 | Maximum listings or reviews saved per shop. 0 means no limit. Ignored in profiles mode. |
includeContactInfo | Boolean | false | Profiles mode. Adds trader contact details when the shop publishes them. |
listingsSortOrder | String | "relevance" | Listings mode. "relevance", "date_desc", "price_asc" or "price_desc". |
listingsSearchQuery | String | Empty | Listings mode. Only listings in the shop that match this keyword. |
listingsSectionId | String | Empty | Listings mode. Only listings in this shop section. Section IDs are in the profile's sections. |
includeListingDetails | Boolean | false | Listings mode. Adds tags, description, images, variations, favorites and 24-hour sales. One extra request per listing, charged as a separate event. |
reviewsSortOrder | String | "Recency" | Reviews mode. "Recency", "Relevancy", "Highest" or "Lowest". |
reviewsRatings | Array of strings | Empty (all) | Reviews mode. Star ratings to include, for example ["1", "2"]. |
reviewsTopic | String | Empty (any) | Reviews mode. "quality", "shipping" or "customer_service", as tagged by Etsy. |
reviewsWithPhotosOnly | Boolean | false | Reviews mode. Only reviews with a buyer photo. |
reviewsWithVideosOnly | Boolean | false | Reviews 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 withouthttps://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,optionswithvalue,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 arenullwhen 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
soldCountis the shop's total sales count. Etsy returns it even for shops that hide it on their page.ratingisnullfor shops without reviews.priceandsalePriceare in US dollars.shopPriceandshopCurrencygive the regular price in the shop's own currency. With variations,priceis the starting price; details addminPrice,maxPriceand per-option prices.inCartCountis the live count at the time of the run.boughtLast24his set only when Etsy shows its "In demand" message on the listing.nullmeans no message, not zero sales.createdAtis the first publish date.renewedAtis 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
scrapedAtin UTC. Missing values arenull.contactis 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.
Is it legal to scrape Etsy?
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.
Related Actors
- Etsy Scraper: keyword search, ranks, ads, tags and cart counts across a niche.
- eBay Search Results Scraper: compare prices for the same products on eBay.
- eBay Sold Listings API: real sold prices for resale research.
Cost
This actor uses pay-per-event pricing. You pay only for rows saved, with no subscription:
| Event | Price | Per 1,000 | Charged when |
|---|---|---|---|
profile | $0.003 | $3 | A shop profile is saved. |
contact-details | $0.01 | $10 | Contact details are added to a profile. Only when the shop publishes them. |
listing | $0.002 | $2 | A listing is saved. |
listing-detail | $0.003 | $3 | Details are added to a listing and the detail request succeeds. |
review | $0.0015 | $1.50 | A 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:
| Run | Cost |
|---|---|
| 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.