Etsy Scraper: Search, Listings, Shops & Reviews avatar

Etsy Scraper: Search, Listings, Shops & Reviews

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Etsy Scraper: Search, Listings, Shops & Reviews

Etsy Scraper: Search, Listings, Shops & Reviews

Scrape Etsy search results and full product details: prices, ratings, images, and every variation. Pull shop and seller profiles with sales and admirers, and every review for a listing or a whole shop, thousands, not just the first page. Export to JSON, CSV, Excel.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Sourabh Kumar

Sourabh Kumar

Maintained by Community

Actor stats

1

Bookmarked

119

Total users

49

Monthly active users

11 days ago

Last modified

Share

Etsy scraper: listings, shop profiles, full reviews & keyword research

One actor for the whole of Etsy: search listings by keyword, pull full product details, grab shop profiles and stats, and export every review for a listing or a whole shop. It also returns Etsy's own search suggestions for keyword research.

$3 per 1,000 results. Same flat rate for every mode.

Reviews are not capped at the first page. Point it at a shop and it pulls every review across every listing, thousands of them, not just the newest handful.

Why this scraper?

  • 🧾 Five modes in one actor, so you are not stitching together a separate scraper for search, details, shops, reviews, and keywords.
  • ⭐ Whole-shop reviews, the feature no other Etsy scraper ships: every review across a shop's entire catalog, sorted by relevance or date.
  • 🛡️ Proxies and bot protection handled for you. No proxy setup and no browser config. Every mode runs without a browser and typically finishes in seconds. Etsy still turns a page away now and then, and the run tells you when it does rather than quietly returning less.
  • 💵 Flat $3 per 1,000 results in every mode, with no surprise tiers.
  • 🔎 Keyword research built in, pulling Etsy's live autosuggest for SEO and listing titles.
  • 🧮 You are billed per result, once. Duplicate inputs and repeated cards are deduped before you pay.
  • 📋 Full details straight from search. Turn on includeDetails and every search row also carries the whole listing page: favourites, reviews, shop sales, badges and demand signals, in one run, at the same price per row.
  • 📦 Deep product records. A listing row carries the full variant matrix with per-option prices, favourites, recent sales, badges, delivery estimates, and the listing video.
  • 🌍 US pricing and currency by default, with results returned in the storefront you scrape.

What data can you extract?

🏷️ Title💲 Price and sale price⭐ Rating🗣️ Review count
🖼️ Images and video📦 Shipping and delivery🧵 Materials🗂️ Category path
🎨 Variants and per-option prices❤️ Favourites🔥 Bought in last 24h🏅 Etsy's Pick and bestseller
✏️ Personalizable🪵 Handmade or vintage💾 Digital download🎁 Gift wrapping
🏪 Shop name👥 Shop team📈 Sales count❤️ Admirers
✍️ Review text🙋 Buyer name📅 Review date🔑 Keyword suggestions

Scraping modes

Find listings by keyword, with optional price range, sort order, and free-shipping filter. Sorting by price or recency runs at the same speed as an unsorted search. Every card returns its listing ID and shop ID, title, price and any pre-discount price, currency and symbol, shop name, listing URL, free-shipping flag, and whether the card is a paid ad. The rating and review count printed on a search card are the shop's overall numbers, not the listing's, so they are returned as shopRating and shopReviewCount. For a listing's own rating and review count, use listing mode, or turn on includeDetails to get every listing-mode field on each search row in the same run, at the same price per row.

{
"mode": "search",
"searchQueries": ["leather wallet"],
"minPrice": 20,
"maxPrice": 200,
"sortBy": "price_asc",
"freeShippingOnly": false,
"maxItems": 100
}

Full details on every search row. Set includeDetails to true and each search result also loads its listing page, so the row carries every listing-mode field as well: the listing's own rating and review count, favourites, shop sales, sale price range, variations, badges and demand signals. One run instead of a search followed by a listing run, and the same price per row. It adds about 1 to 2 seconds per listing. Fields that appear on both the search card and the listing page keep the search card's value.

{
"mode": "search",
"searchQueries": ["leather wallet"],
"includeDetails": true,
"maxItems": 30
}

📄 Listing

Everything on a product page, in one row. Price and sale price, the full price range across variants, rating and review count, every image and the listing video, materials, category path, shipping origin and delivery estimate, returns, and a sample of reviews.

It also returns the things buyers actually judge a listing by: favourites, how many people bought it in the last 24 hours, whether Etsy counts it as recently purchased, how many are left in stock, Etsy's Pick and bestseller badges, whether it is personalizable, handmade or a digital download, gift wrapping, and the shop's lifetime sales.

Variants come back in full. Each option carries its own price range and whether it is sold out, so you can see that a wallet runs $49.77 to $65.26 across 48 combinations without opening the page.

{
"mode": "listing",
"listingUrls": ["https://www.etsy.com/listing/993944520", "1089150061"]
}

🏪 Shop

Shop profile and stats: description, logo, banner, team members, rating, review count, total active listings, lifetime sales, admirers, and a grid of listing previews, plus the seller's own About headline and story and the shop announcement, in their words. Preview prices are always in USD.

{
"mode": "shop",
"shopNames": ["Walletree"]
}

⭐ Reviews

All reviews for a single listing, or every review across an entire shop. Each row carries the rating, date and text, the buyer's name, profile link and avatar, any photo or video the buyer attached, whether they recommend the item, Etsy's machine translation for a foreign-language review, and the seller's reply with the replying seller's name. A shop with 17,000 reviews returns all of them, eight per page: 17,802 rows in about four minutes, measured.

{
"mode": "reviews",
"reviewScope": "shop",
"reviewSources": ["Walletree"],
"reviewSort": "recency",
"maxItems": 1000
}

🔑 Keyword

Etsy's own search suggestions for any seed term, up to about 20 per term. Ideal for listing titles, tags, and SEO research. Suggestions follow Etsy's live autosuggest, so they change over time, and Etsy often includes the seed term itself.

{
"mode": "keyword",
"keywords": ["leather wallet", "engraved ring"]
}

How to scrape Etsy: step by step

  1. Create a free Apify account. Takes 30 seconds, no card needed.
  2. Open Etsy Scraper in the Apify Console.
  3. Pick a mode and paste your input: a search term, a listing URL, a shop name, or a seed keyword.
  4. Click Start. A typical search run finishes in well under a minute.
  5. Export as JSON, CSV, or Excel, or pull the results through the API.

How much does Etsy Scraper cost?

Etsy Scraper uses pay-per-result pricing: $3 for 1,000 results, the same in every mode. The Apify Free plan gives you $5 in monthly credits, enough for roughly 1,600 results. The $29/month Starter plan covers about 9,600 results a month. A per-run start fee covers the compute to launch each run: $0.01 per GB of run memory. In reviews mode, each review counts as one result.

Input

{
"mode": "search",
"searchQueries": ["leather wallet"],
"minPrice": 20,
"maxPrice": 200,
"sortBy": "relevancy",
"freeShippingOnly": false,
"maxItems": 100
}
FieldTypeDefaultNote
modestringsearchOne of search, listing, shop, reviews, keyword.
searchQueriesarraySearch terms (Search mode).
minPrice / maxPriceintegerPrice range filter (Search mode).
sortBystringrelevancyrelevancy, price_asc, price_desc, most_recent (Search mode).
freeShippingOnlybooleanfalseOnly free-shipping listings (Search mode).
includeDetailsbooleanfalseAdd every listing-mode field to each search row, in one run, same price per row (Search mode).
listingUrlsarrayListing URLs or numeric IDs (Listing mode).
shopNamesarrayShop names or shop URLs (Shop mode).
reviewScopestringlistinglisting or shop (Reviews mode).
reviewSourcesarrayListing URLs/IDs, or shop names/URLs (Reviews mode).
reviewSortstringrelevancyrelevancy or recency (Reviews mode).
keywordsarraySeed terms (Keyword mode).
maxItemsintegerStop after this many result rows. Leave empty for no cap.
proxyConfigurationobjectUSCountry to scrape from. Etsy prices in that country's currency, so US returns USD and DE returns EUR. Shop mode previews are always in USD.

Output

Search

{
"scrapedFrom": "search",
"query": "leather wallet",
"id": "547491922",
"shopId": "15980284",
"title": "Leather Wallet•Wallet•Man Leather Wallet•Minimalist Wallet•Personalize Wallet•Leather Anniversary•Slim Leather Wallet•Man Wallet",
"price": 80.5,
"originalPrice": null,
"currency": "USD",
"currencySymbol": "$",
"shopName": "TexasValleyLeather",
"url": "https://www.etsy.com/listing/547491922/leather-walletwalletman-leather",
"shopRating": 4.8,
"shopReviewCount": 8000,
"freeShipping": true,
"isAd": false
}

Search with includeDetails

The same listing as above, from a run with includeDetails on. The real row has about 100 fields, every search field plus every listing field; it is shortened here, with all values taken from that one row.

{
"scrapedFrom": "search",
"query": "leather wallet",
"id": "547491922",
"shopId": "15980284",
"title": "Leather Wallet•Wallet•Man Leather Wallet•Minimalist Wallet•Personalize Wallet•Leather Anniversary•Slim Leather Wallet•Man Wallet",
"price": 80.5,
"originalPrice": null,
"currency": "USD",
"shopName": "TexasValleyLeather",
"url": "https://www.etsy.com/listing/547491922/leather-walletwalletman-leather",
"shopRating": 4.8,
"shopReviewCount": 8000,
"freeShipping": true,
"isAd": true,
"rating": 4.9,
"reviewCount": 1008,
"priceHigh": 80.5,
"onSale": null,
"favoritesCount": 5391,
"shopSales": 38700,
"bestseller": null,
"starSeller": true,
"urgencySignal": "In 20+ carts",
"inCartCountMin": 20,
"inCartIsFloor": true,
"boughtLast24h": null,
"recentlyPurchased": false,
"quantityLeft": null,
"variationCount": 2,
"shipsFrom": "Sugar Land, TX",
"listedOn": "Sep 28, 2026",
"detailsFetched": true
}

Listing

One real row, trimmed only where an array repeats (at most two items shown).

{
"scrapedFrom": "listing",
"id": "993944520",
"title": "Personalised Men's Wallet, Genuine Soft Black Bifold Leather Wallet , Personalized Engraved Christmas Gift for Him, Boyfriend, Dad, Husband",
"url": "https://www.etsy.com/listing/993944520/personalised-mens-wallet-genuine-soft",
"shopName": "Walletree",
"category": "Bags & Purses < Wallets & Money Clips < Wallets",
"material": "Leather",
"rating": 4.8,
"reviewCount": 2887,
"currency": "USD",
"availability": "https://schema.org/InStock",
"offerCount": 47737,
"price": 49.14,
"priceHigh": 64.43,
"originalPrice": 62.2,
"originalPriceHigh": 81.56,
"onSale": true,
"shippingOriginCountry": "GB",
"images": [
"https://i.etsystatic.com/29233561/r/il/119fa4/5293652641/il_fullxfull.5293652641_4x4a.jpg",
"https://i.etsystatic.com/29233561/r/il/b264af/4949358787/il_fullxfull.4949358787_mo11.jpg"
],
"imageCount": 18,
"videoUrl": "https://v.etsystatic.com/c/video/upload/ac_none,du_15,q_auto:good/Video_04-11-2021_12_32_53_ebpm7h.mp4",
"videoDuration": "PT15S",
"breadcrumb": [
"Bags & Purses",
"Wallets & Money Clips"
],
"sampleReviews": [
{
"rating": 5,
"date": "2026-09-28",
"text": "Great quality, it arrived quickly and my husband is very happy with his gift",
"author": "Holly Hegarty"
}
],
"favoritesCount": 12956,
"shipsFrom": "United Kingdom",
"listedOn": "Sep 29, 2026",
"variations": [
{
"number": 0,
"name": "Engraving Side",
"optionCount": 3,
"options": [
{
"id": "6499132518",
"label": "Front Free Engraving",
"rawLabel": "Front Free Engraving ($49.14 - $54.60)",
"price": null,
"priceMin": 49.14,
"priceMax": 54.6,
"isPriceRange": true,
"available": true
},
{
"id": "1963781218",
"label": "Inside Personalized",
"rawLabel": "Inside Personalized ($54.60 - $60.06)",
"price": null,
"priceMin": 54.6,
"priceMax": 60.06,
"isPriceRange": true,
"available": true
}
],
"soldOutOptionCount": 0,
"hasPrices": true,
"pricesAreRanges": true
},
{
"number": 1,
"name": "Wallet Colour",
"optionCount": 8,
"options": [
{
"id": "6995962359",
"label": "All Black",
"rawLabel": "All Black",
"price": null,
"priceMin": null,
"priceMax": null,
"isPriceRange": null,
"available": true,
"imageUrl": "https://i.etsystatic.com/29233561/r/il/e6dfdb/5293656773/il_fullxfull.5293656773_fmgz.jpg"
},
{
"id": "2381708113",
"label": "Black & Brown",
"rawLabel": "Black & Brown",
"price": null,
"priceMin": null,
"priceMax": null,
"isPriceRange": null,
"available": true,
"imageUrl": "https://i.etsystatic.com/29233561/r/il/119fa4/5293652641/il_fullxfull.5293652641_4x4a.jpg"
}
],
"soldOutOptionCount": 0,
"hasPrices": false,
"pricesAreRanges": false
}
],
"variationCount": 3,
"hasVariations": true,
"variationCombinations": 48,
"isPersonalizable": true,
"isHandmade": false,
"isDigital": false,
"whoMade": "designed_by_seller",
"giftWrappingAvailable": true,
"freeShipping": true,
"returnsAccepted": true,
"estDeliveryMinDays": 4,
"estDeliveryMaxDays": 14,
"shopUrl": "https://www.etsy.com/shop/Walletree",
"shopSales": 84500,
"etsysPick": true,
"urgencySignal": "In 20+ carts",
"boughtLast24h": null,
"inCartCountMin": 20,
"isSoldOut": false,
"shopRatingCount": 17826,
"reviewFeatureTags": [
"Great quality",
"Perfect gift"
],
"reviewCategoryTags": [
{
"tag": "Quality",
"count": 1379
},
{
"tag": "Appearance",
"count": 778
}
],
"recentlyPurchased": true,
"quantityLeft": null,
"scrapedAt": "2026-09-29T13:57:34.219Z"
}

Shop

{
"scrapedFrom": "shop",
"shopName": "Walletree",
"slogan": "Personalized Luxury Leather Wallets, the perfect gift!",
"team": [{ "name": "Ash", "role": "owner" }],
"rating": 4.9,
"reviewCount": 17825,
"numberOfItems": 216,
"salesCount": 84529,
"admirersCount": 4310,
"onEtsySince": 2021,
"location": "United Kingdom",
"listingPreviews": [{ "id": "993944520", "title": "Personalised Men's Wallet...", "price": 49.18 }],
"aboutHeadline": "From Family Craftsmanship to Personalised Creations...",
"aboutStory": "Welcome to Walletree, a family-run workshop where craftsmanship and creativity come together...",
"announcement": null
}

Reviews

One real row, pasted as the actor returned it.

{
"scrapedFrom": "reviews",
"shopName": "GoldenPearlFavors",
"listingId": "4419493620",
"transactionId": 5186955636,
"rating": 5,
"reviewDate": "02 Sept, 2026",
"reviewText": "Extremely pleased with item and personalization",
"reviewTextTranslated": null,
"translationAttribution": null,
"isRecommended": true,
"buyerName": "Sierra",
"buyerProfileUrl": "https://www.etsy.com/people/sbest96?ref=l_review",
"buyerAvatarUrl": "https://i.etsystatic.com/iusa/49b8f5/44486323/iusa_75x75.44486323_ikmv.jpg?version=0",
"buyerIsInactive": false,
"hasPhoto": true,
"photoUrl": "https://i.etsystatic.com/iap/dea3ee/8516947539/iap_300x300.8516947539_f6c7cbv0.jpg?version=0",
"videoUrls": [],
"sellerResponse": "thank you",
"sellerResponseName": "irem bulut",
"sellerResponseAvatarUrl": "https://i.etsystatic.com/iusa/87edb2/115337336/iusa_75x75.115337336_i8ag.jpg?version=0",
"listingUrl": "https://www.etsy.com/listing/4419493620/personalized-perfume-party-favors-custom?ref=reviews",
"listingTitle": "Personalized Perfume Party Favors: Custom 10ml Wedding, Shower Gift - Free US Shipping"
}

videoUrls is empty on that row because that buyer attached a photo rather than a video. When a buyer does attach one it carries the full video:

"videoUrls": ["https://v.etsystatic.com/c/video/upload/t_vid_review_60s/review/en-US_ec710dba0b42d74454a7f302cc67b70b.mp4"]

Keyword

{
"scrapedFrom": "keyword",
"seed": "leather wallet",
"suggestion": "leather wallet men",
"type": "keyword"
}

Use cases

  • 📊 Market research. Compare prices and shop reputation across a category at scale, then pull per-listing ratings with listing mode.
  • 🔍 Competitor tracking. Watch a shop's listings, sales, and admirer counts over time.
  • 💬 Review analysis. Pull a shop's entire review history for sentiment and product feedback.
  • 🧲 Lead generation. Surface shops with their team, sales, and profile details.
  • 🔑 SEO and listing optimization. Mine Etsy's autosuggest for high-intent keywords.
  • 🎁 Trend spotting. Track what is selling and what shoppers are searching for.
  • 🗂️ Catalog building. Assemble structured product feeds from search and listing data.

Limitations

  • Ratings on search cards are shop-level. Etsy prints the shop's rating and review count on each search card, not the listing's own, so search rows carry shopRating and shopReviewCount. Run listing mode when you need a listing's own rating and reviewCount.
  • Search depth. A single search query returns up to roughly 900 unique listings, however many Etsy says it has. Measured: a term Etsy reports 220,000 results for delivered 936 rows before it stopped serving new ones. To go wider, split by price range or category. When a run cannot reach your maxItems, the status says how far it got and why.
  • Several search terms share one budget. With more than one entry in searchQueries, maxItems is split evenly between them, and whatever one term does not use is passed to the terms still to come.
  • Sale prices. price is what a buyer pays today. When a listing is discounted, originalPrice holds the pre-discount figure. Etsy's own minPrice and maxPrice filters apply to the price a buyer pays today, so a discounted listing's originalPrice can sit above your maxPrice.
  • Etsy shows one demand line per listing. A listing page shows only one of "N people bought this in the last 24 hours", "In 20+ carts" or "N views in the last 24 hours", and Etsy changes which one over time. boughtLast24h, inCartCountMin and views24hMin are filled only for the line Etsy shows. recentlyPurchased is true whenever Etsy lists the listing as recently purchased, even when it shows a different line, false when Etsy's list leaves it out, and empty when the page carries no demand list at all.
  • Full details in search mode take longer. With includeDetails on, each row also loads the listing page, about 1 to 2 seconds per listing, so roughly 2,000 detailed rows fit in the default one-hour timeout. A listing page that cannot be loaded still returns its search row, marked detailsFetched: false.
  • Listed on. listedOn is the "Listed on" date Etsy shows on the listing page. Etsy moves it forward every time a listing is renewed, so it is usually only a few days old, even on listings that have sold for years. It is not the date the listing was first created, and Etsy does not show that date publicly.
  • Yes/no flags in listing mode are true or empty. freeShipping, onSale, bestseller, etsysPick and starSeller are true when the listing page shows it and empty when it does not. Search mode's freeShipping is true or false, read straight from the search card.
  • Shop description. description is Etsy's short summary of the shop. The seller's own words are in aboutHeadline, aboutStory and announcement, which are empty when the shop has not written them.
  • Shop location. Most shops publish a city and country, returned in location (for example "Missouri City, Texas"). Some shops do not set one, and those come back null.
  • Review order. Reviews sort by relevance or date only, eight per page.
  • Review dates are Etsy's own strings. They are returned exactly as Etsy prints them, and Etsy's wording differs by scope: a listing-scope row reads Sep 21, 2026 and a shop-scope row reads 02 Sept, 2026. Parse accordingly.
  • Review videos are best-effort. videoUrls is filled from the gallery block Etsy attaches to each page of results, so a non-empty value is always correct, while an empty one means none was seen on that page rather than none exists. Photos are more reliable: use photoUrl and hasPhoto.
  • Searches with no real matches. Etsy does not return an empty page for a term nothing matches. On the default relevancy order it pads the results with unrelated listings, and the actor returns and charges for those rows because nothing marks them apart from genuine matches. Check your spelling before a large run, and treat an off-topic result set as a sign the term found nothing.
  • Sorting turns that padding off. Any sortBy other than relevancy asks Etsy for genuine matches only, so a term with no real matches returns zero rows under price_asc while returning a full page under relevancy. That is Etsy's behaviour, not a failure, and the run says so rather than claiming there are no results. If the padded results are useful to you, use relevancy.
  • Public data only. The actor reaches what a logged-out visitor sees. Nothing behind a login.
  • Occasional blocked runs. Etsy screens traffic, and now and then it turns a page away. When that happens the status message says how much was skipped, so a short row count comes with an explanation rather than looking like the whole picture. Skipped pages are never charged as results. Running again shortly often clears it.
  • Bringing your own proxy. Paste your own addresses into the Proxy section and the run uses only those, never ours. Nothing is silently switched. If an address is unreachable the run finishes and the status tells you how much was lost on it, and the country setting no longer applies because your proxy decides the country.

FAQ

How much does Etsy Scraper cost?

Etsy Scraper uses pay-per-result pricing. You pay $3 for 1,000 results. The Apify Free plan gives you $5 in usage credits a month, enough for around 1,600 results. If you run regularly, the $29/month Starter plan covers about 9,600 results.

No subscription lock-in. Pause whenever.

Scraping public data is generally allowed in the US and most of the EU, as long as you do not collect personal data covered by GDPR or CCPA without a lawful basis. This actor only touches publicly accessible pages, but how you use the output is on you.

Apify's full breakdown: Is web scraping legal?.

Can I integrate Etsy Scraper with other tools?

Push results into Make, Zapier, Slack, Airbyte, GitHub, Google Sheets, Google Drive, and more. Apify treats every actor as a webhook source, so anything that consumes webhooks or pulls from an API works.

Full list: Apify integrations.

Can I use Etsy Scraper with the Apify API?

Yes. Every run is available via the Apify REST API:

curl -X POST "https://api.apify.com/v2/acts/sourabhbgp~etsy-scraper/runs?token=APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "searchQueries": ["leather wallet"]}'

Docs: Apify API reference.

Can I use Etsy Scraper through an MCP Server?

Yes. Apify ships an MCP server that exposes every actor as a tool, so Claude Desktop, Cursor, and any other MCP-capable client can call Etsy Scraper. Setup: Apify MCP docs.

Your feedback

Bug, missing field, or odd behavior? Drop a note in the Issues tab. Reports go to a human and fixes usually ship the same week.