Etsy Scraper — Products, Prices, Shops & Reviews
Pricing
from $0.46 / 1,000 products
Etsy Scraper — Products, Prices, Shops & Reviews
Scrape Etsy products by keyword, category, shop or product URL. Price, sale price, discount, shop rating, Star Seller and ad flags; optional full details: description, images, stock, variations, shipping, returns, favorites, reviews. 22 marketplaces.
Pricing
from $0.46 / 1,000 products
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share

Extract Etsy product listings by keyword, category, shop or product URL: price, sale price and discount, shop name and rating, Star Seller and Bestseller badges, ad placements, and — with full details on — the description, all images, stock quantity, variations, shipping, returns, production partners, recent purchases and reviews. 22 country marketplaces in local currency. No API key or Etsy account required.
Why this scraper?
🔎 Four ways in
Search by keyword, crawl a whole category (up to about 16,000 products), read a shop's profile with its featured products, or fetch single product pages. Mix them in one run.
💰 Price and discount data
Current price, original price, discount percentage, variation price range and currency on every row, read from the marketplace you choose.
🏷️ Seller and placement signals
Star Seller, Bestseller (with its category), Etsy's Pick and Popular now badges, plus a flag for every sponsored product so you can see which shops advertise on a keyword.
📦 Full product records
With full details on: description, all images and video, stock quantity, variations, materials, dimensions, shipping cost, ships-from location, delivery estimate, returns window, shop sales, shop policies and the latest reviews.
📈 Demand signals
Recent purchases ("13 bought in the last 24 hours"), shopper cart counts where Etsy shows them, review count and review highlight tags.
🏭 Production partners
The businesses a shop names as helping to make an item — useful for supplier research and spotting print-on-demand listings.
♻️ Faster repeat runs
With full details on, product pages read in the last few days are reused when the price has not changed, so scheduled runs finish faster. Each reused row says when its page was read.
🔁 Price monitoring
Every row carries changeStatus (NEW, UNCHANGED, PRICE_DROP, PRICE_INCREASE) and the previous price from earlier runs. Schedule it and switch on Only new and changed products for a clean daily feed.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | array of strings | [] | Keywords to search, for example "linen apron". Each keyword returns up to maxItems products. |
startUrls | array of URLs | [] | Etsy category (/c/…), keyword (/market/…), search (/search?q=…), shop (/shop/…) or product (/listing/…) pages. Locale URLs such as /uk/ keep their currency. |
marketplace | string | "us" | Etsy country site for keyword searches: us, uk, ca, au, ie, nz, de, fr, nl, it, es, be, at, ch, se, dk, no, fi, pl, pt, in, sg. Sets the price currency. |
maxItems | integer | 100 | Maximum products per keyword and per start URL. 0 means no limit. |
fetchDetails | boolean | false | Open every product page for the full record (see the second table below). Slower and charged at the with-details rate. |
minPrice | integer | (empty) | Keep products priced at or above this amount, in the marketplace currency. |
maxPrice | integer | (empty) | Keep products priced at or below this amount, in the marketplace currency. |
onlyOnSale | boolean | false | Keep only discounted products. |
freeShippingOnly | boolean | false | Keep only products that ship for free. |
starSellerOnly | boolean | false | Keep only products from Star Seller shops. |
excludeAds | boolean | false | Leave out sponsored products. |
onlyChanges | boolean | false | Save only products that are new or changed price since earlier runs. |
detailCacheDays | integer | 3 | With full details on, reuse a product page an earlier run in your account read within this many days, as long as the price is unchanged. 0 always reads fresh. |
If you give no keyword and no URL, the actor searches "linen apron" as an example.
Output schema
Every field below is present on every record. Fields Etsy does not publish for a product are null (or [] for lists), never omitted.
Always present
| Field | Type | Description |
|---|---|---|
id | string | Etsy listing ID (same as listingId). |
listingId | string | Etsy listing ID. |
url | string | Product page URL. |
title | string | Product title. |
price | number | Current price in currency. |
originalPrice | number | Price before the discount (null when not on sale). |
discountPercent | number | Discount percentage (null when not on sale). |
currency | string | ISO currency code, for example USD, GBP, EUR. |
isOnSale | boolean | True when a discount is shown. |
availability | string | InStock or OutOfStock. |
freeShipping | boolean | True when the product ships for free to the marketplace country. |
isAd | boolean | True when the product appears as a sponsored placement. |
isStarSeller | boolean | Shop holds Etsy's Star Seller badge. |
isBestseller | boolean | Product carries the Bestseller badge. |
isEtsysPick | boolean | Product carries the Etsy's Pick badge. |
isPopularNow | boolean | Product carries the Popular now badge. |
isDigitalDownload | boolean | Product is a digital download. |
favorites, lastListedDate | null | Filled with full details on (see below). |
inCartCount | integer | Shoppers with the item in their cart, when Etsy shows it (mostly on shop pages; null otherwise). |
imageUrl | string | Main image, full size. |
thumbnailUrl | string | Thumbnail as shown in the grid. |
images | array | Image URLs (the main image only unless full details are on). |
shopName | string | Shop name. |
shopId | string | Etsy shop ID. |
shopUrl | string | Shop page URL. |
shopRating | number | Shop star rating. |
shopReviewCount | integer | Number of shop reviews. |
shipsFromRegion | string | Ships-from state or region, when shown. |
summary | string | One-line summary: title, price, shop. |
changeStatus | string | NEW, UNCHANGED, PRICE_DROP or PRICE_INCREASE compared with earlier runs. |
firstSeenAt | string | When this actor first saw the product (ISO 8601). |
previousPrice | number | Price at the previous run (null for new products). |
priceChange | number | Price difference since the previous run. |
marketplace | string | Marketplace code used for the run. |
sourceMode | string | search, category, shop or listing. |
searchQuery | string | Keyword that found the product (null for URL sources). |
sourceUrl | string | Page the product was read from. |
page | integer | Result page number. |
position | integer | Position within the source. |
detailFetched | boolean | True when the product page was read. |
detailCachedAt | string | When the product page used for this row was read, if it came from an earlier run (null when read in this run). |
isRepost | boolean | Always false (kept for portfolio schema compatibility). |
publishDate, publishDateISO, originalPublishDate, originalUrl | null | Etsy does not publish listing dates; always null. |
contentHash | string | Stable hash of listing ID and title. |
source | string | Always etsy.com. |
scrapedAt | string | Time the row was saved (ISO 8601). |
With fetchDetails: true
| Field | Type | Description |
|---|---|---|
descriptionText | string | Full description as plain text. |
descriptionMarkdown | string | Full description with paragraph breaks kept. |
descriptionHtml | null | Etsy descriptions are plain text; always null. |
priceMin / priceMax | number | Lowest and highest variation price. |
stockQuantity | integer | Quantity available. |
lowStockQuantity | integer | Set when Etsy shows "Only N left". |
rating | number | Product review rating. |
reviewCount | integer | Number of product reviews. |
reviews | array | Latest reviews: rating, date, text. Reviewer names are not collected. |
reviewHighlights | array | Etsy's review highlight tags, for example "Great quality". |
favorites | integer | Number of shoppers who favorited the product (null when Etsy hides the count, typically for new items). |
pageLanguage | string | Language of the product page read, normally en-US. If Etsy only served a translated page, title and description are still the seller's original text. |
lastListedDate | string | Date the listing was last listed or renewed (YYYY-MM-DD). Etsy renews many listings automatically, so this is not the original creation date. |
images | array | All image URLs, full size. |
imageCount | integer | Number of images. |
imageAltTexts | array | Image descriptions. |
videoUrl | string | Product video URL. |
category | string | Etsy category, for example Accessories < Aprons. |
categoryPath | array | Category breadcrumb. |
materials | array | Materials listed by the seller. |
dimensions | array | Width, height, length or depth when listed. |
variations | array | Options per variation: name, options[].value, options[].priceText, options[].soldOut. |
madeBy | string | "Handmade by", "Designed by" or "Vintage from" line. |
isMadeToOrder | boolean | Item is made to order. |
productionPartners | array | Businesses the shop names as production partners. |
purchasesRecent | integer | Recent purchases Etsy shows (for example 13). |
purchasesRecentPeriod | string | Period for purchasesRecent, for example 24 hours. |
bestsellerCategory | string | Category of the Bestseller badge. |
shipsFrom | string | Ships-from city and region. |
shipsFromCountry | string | Ships-from country code. |
shippingCost | number | Cost to ship to the marketplace country (0 when free). |
deliveryEstimate | string | Estimated delivery window, for example Sep 23-28. |
returnsAccepted | boolean | Returns and exchanges accepted. |
returnWindowDays | integer | Return window in days. |
shopSales | integer | Total shop sales. |
shopId, shopRating, shopReviewCount | — | Also filled from the product page when a product URL is the source. |
shopYearsOnEtsy | number | Years the shop has been on Etsy (a fraction for shops under a year, e.g. 0.8). |
shopLogoUrl | string | Shop logo. |
shopPolicies | array | Shop policy texts: topic, text. |
Shop start URLs add
| Field | Type | Description |
|---|---|---|
shopLocation | string | Shop country. |
shopTagline | string | Shop headline. |
shopBannerUrl | string | Shop banner image. |
shopLatestActivity | string | Date of the shop's latest activity. |
Example record
{"id": "1042603482","listingId": "1042603482","url": "https://www.etsy.com/listing/1042603482/japanese-apron-with-pockets-vintage","title": "Japanese Apron with pockets, Vintage Style Cooking Smock for Women, Small to Plus Size","price": 23.5,"originalPrice": null,"discountPercent": null,"currency": "USD","isOnSale": false,"priceMin": 23.5,"priceMax": 27.5,"availability": "InStock","stockQuantity": 654,"lowStockQuantity": null,"freeShipping": false,"shippingCost": 5.98,"shipsFrom": "Henderson, NV","shipsFromCountry": "US","shipsFromRegion": "NV","deliveryEstimate": "Sep 23-28","returnsAccepted": true,"returnWindowDays": 30,"isAd": false,"isStarSeller": true,"isBestseller": true,"bestsellerCategory": "Aprons","isEtsysPick": true,"isPopularNow": false,"isDigitalDownload": false,"isMadeToOrder": false,"madeBy": "Designed by WilshireGoodsShop","productionPartners": ["N.T. Atelier, China"],"purchasesRecent": 5,"purchasesRecentPeriod": "24 hours","inCartCount": null,"rating": 4.9,"reviewCount": 3328,"favorites": 51780,"lastListedDate": "2026-09-19","reviewHighlights": ["Great quality","As described","Fast shipping"],"reviews": [{"rating": 5,"date": "2026-09-18","text": "This was exactly what I was wanting. Thank you so much. The quality is great. The way it fit was what I was wanting. I prefer the aprons like this from long ago."},{"rating": 5,"date": "2026-09-15","text": "Item was as described and arrived quickly."}],"category": "Accessories < Aprons","categoryPath": ["Accessories","Aprons"],"materials": ["Cotton"],"dimensions": [],"variations": [{"name": "Color","options": [{"value": "Black","priceText": "$23.50 - $27.50","soldOut": false},{"value": "Green","priceText": "$23.50 - $25.00","soldOut": false}]},{"name": "Size","options": [{"value": "S-See description","priceText": "$23.50","soldOut": false},{"value": "M/L-See description","priceText": "$25.00","soldOut": false}]}],"imageUrl": "https://i.etsystatic.com/24091653/r/il/8f1a48/4030105345/il_fullxfull.4030105345_n3rg.jpg","thumbnailUrl": "https://i.etsystatic.com/24091653/c/2668/2120/57/68/il/8f1a48/4030105345/il_340x270.4030105345_n3rg.jpg","images": ["https://i.etsystatic.com/24091653/r/il/8f1a48/4030105345/il_fullxfull.4030105345_n3rg.jpg","https://i.etsystatic.com/24091653/r/il/521f23/4455989322/il_fullxfull.4455989322_4wf0.jpg","https://i.etsystatic.com/24091653/r/il/918052/3223418428/il_fullxfull.3223418428_6g6p.jpg"],"imageCount": 10,"imageAltTexts": ["May include: Olive green apron dress with a scoop neck and a tie-back waist. The dress has two large front pockets and is worn over a black t-shirt. The fabric has a slightly wrinkled texture."],"videoUrl": "https://v.etsystatic.com/c/video/upload/ac_none,du_15,q_auto:good/InShot_20210724_031243620_fpkgvp.mp4","shopName": "WilshireGoodsShop","shopId": "24091653","shopUrl": "https://www.etsy.com/shop/WilshireGoodsShop","shopRating": 4.9,"shopReviewCount": 9776,"shopSales": 40600,"shopYearsOnEtsy": 6,"shopLocation": null,"shopTagline": null,"shopLogoUrl": "https://i.etsystatic.com/24091653/r/isla/7e646e/50089861/isla_500x500.50089861_ltfa67os.jpg","shopBannerUrl": null,"shopLatestActivity": null,"shopPolicies": [{"topic": "Returns & Exchanges","text": "We accept returns within 30 days of delivery for items that are unused and clean. While we don’t offer direct exchanges, you’re welcome to return the item for a refund and place a new order for the one you prefer."}],"descriptionHtml": null,"descriptionText": "A cute Japanese pinafore apron, a durable yet aesthetic smock dress that complements your style. With its large pockets and coverall design, it makes the perfec…","descriptionMarkdown": "A cute Japanese pinafore apron, a durable yet aesthetic smock dress that complements your style. With its large pockets and coverall design, it makes the perfec…","summary": "Japanese Apron with pockets, Vintage Style Cooking Smock for Women, Small to Plus Size — 23.5 USD — by WilshireGoodsShop","publishDate": null,"publishDateISO": null,"isRepost": false,"originalPublishDate": null,"originalUrl": null,"firstSeenAt": "2026-09-19T13:08:32.158Z","previousPrice": null,"priceChange": null,"changeStatus": "NEW","marketplace": "us","sourceMode": "category","searchQuery": null,"sourceUrl": "https://www.etsy.com/c/home-and-living","page": 1,"position": 12,"detailFetched": true,"contentHash": "7cb4420c71415665","source": "etsy.com","scrapedAt": "2026-09-19T13:20:15.527Z"}
Examples
Search two keywords in the UK marketplace:
{"searchQueries": ["linen apron", "ceramic mug"],"marketplace": "uk","maxItems": 200}
Discounted Star Seller products in a category, full details:
{"startUrls": [{ "url": "https://www.etsy.com/c/jewelry" }],"onlyOnSale": true,"starSellerOnly": true,"maxItems": 100,"fetchDetails": true}
A shop's profile with its featured products, and a single product:
{"startUrls": [{ "url": "https://www.etsy.com/shop/WilshireGoodsShop" },{ "url": "https://www.etsy.com/listing/1042603482" }],"maxItems": 0}
Daily price monitoring feed (schedule this):
{"searchQueries": ["personalized cutting board"],"maxItems": 300,"onlyChanges": true}
💰 Pricing
$0.49 per 1,000 products from search, category and shop pages.
$2.19 per 1,000 products with full details (fetchDetails: true, or a product URL).
You only pay for products saved to your dataset. Failed retries are never charged. A product whose page could not be opened is saved and charged at the standard rate.
| Products | Standard | With full details |
|---|---|---|
| 100 | ~$0.05 | ~$0.22 |
| 1,000 | ~$0.49 | ~$2.19 |
| 10,000 | ~$4.90 | ~$21.90 |
| 100,000 | ~$49.00 | ~$219.00 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower both rates by one cent per tier, down to $0.46 and $2.16 per 1,000 from the Business tier up. Use Max products per source to control your spend exactly.
Performance
| Run size | Standard | With full details |
|---|---|---|
| 100 products | under 1 minute | 3–6 minutes |
| 1,000 products | 2–5 minutes | 30–50 minutes |
| 10,000 products | 20–40 minutes | several hours — split into runs |
Known limitations
- A shop URL returns the shop profile and the products on the shop's first page (typically 16–24). Etsy loads the rest of a shop's catalogue in the browser, so it is not reachable here.
- Keyword pages list about 7 new products per page, so large keyword runs take more pages than category runs. For volume, use a category URL.
- Etsy shows cart counts mainly on shop pages; on search and category rows
inCartCountis usually null. - Etsy does not publish listing creation dates, tags or view counts on its public pages, so these are not in the output.
- For a keyword with no real matches Etsy still fills the page with unrelated products; the actor detects this and returns nothing for that keyword rather than charging you for unrelated rows.
- Product details and shop pages take 20–40 seconds each. They run in parallel, but large detail runs are slow.
Technical details
- Source: etsy.com — 22 country marketplaces
- Coverage: keyword pages, all category pages (up to 250 pages each), shop catalogues and product pages
- Compliance: only pages Etsy's robots.txt allows for crawlers are read; a search URL is converted to the matching keyword page
- Change tracking: a named store keeps each product's first-seen date and last price for 180 days
- Retry: automatic retry with a fresh connection on every failed page
Rate this actor
If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl