Etsy Products & Listings Scraper (Search, Shop, Category)
Pricing
from $0.92 / 1,000 products
Etsy Products & Listings Scraper (Search, Shop, Category)
Scrape Etsy products from keywords, search, category, shop and listing URLs: title, price, sale, shop, ratings, badges, images. Free price summary per search or shop: median, quartiles, share on sale, top shops. Details add favorites, description, stock. $1 per 1,000, +$3.40 with details.
Pricing
from $0.92 / 1,000 products
Rating
0.0
(0)
Developer
Gautham Krishna
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Get Etsy listings as clean rows with price, sale price, shop and rating, for sellers and analysts doing product and price research.
Use cases, each with a ready-to-run example:
- Scrape the Etsy search results for a keyword
- Get every product from an Etsy shop
- See the median price and quartiles of a niche
- Find the newest listings for a keyword
- Get listings with full details, favorites and reviews
- See the listings that ship to the UK, priced in pounds
Each row has the title, price, sale price, discount, shop, shop rating, badges, free shipping and a full-size image. Feed it keywords or Etsy URLs (search, category, shop or listing) and it returns one row per product. Turn on listing details to also get the description, all images, favorites, listing reviews, materials, stock, shipping cost and more. Turn on the price summary to also get one free row per keyword or URL with the price median and quartiles, the share on sale and the top shops.
You pay $1 per 1,000 products, and less on Apify Store discount tiers (Bronze, Silver, Gold), down to $0.92 per 1,000 on Silver and Gold. Listing details add $3.40 per 1,000, only for rows where the details loaded. Failed rows are never charged.
At a glance
| Topic | Details |
|---|---|
| Input | Keywords, or Etsy search, category, market, shop or listing URLs. Filters: price range, ships-to country, free shipping, currency and sort order |
| Output | One JSON row per product: title, price, sale price and discount, shop, shop rating, badges, free shipping, image and position. With listing details on, also the description, listing rating and review count, favorites, materials and stock. With the price summary on, one free summary row per keyword or URL |
| Price | $0.001 per product ($1 per 1,000), or $0.95 per 1,000 on Bronze and $0.92 on Silver and Gold. Listing details add $0.0034 ($3.40 per 1,000) on every tier. No start fee. Failed rows are free |
| Tested | Final test run: 57 of 57 valid inputs returned products, and details loaded on 280 of 281 rows. 700 products without details took 22 seconds. Price summary test: 60 of 61 inputs returned 40 products and a summary each, and all 60 summaries matched an independent recount from their rows, to within a cent of rounding |
What you can scrape
| Input | Example | What you get |
|---|---|---|
| Keyword | ceramic mug | Etsy search results, the same as the Etsy search box |
| Search URL | https://www.etsy.com/search?q=boho+rug&min=50&max=200 | Search results with the URL's filters kept |
| Category URL | https://www.etsy.com/c/jewelry/necklaces | Category results |
| Market URL | https://www.etsy.com/market/ceramic_mug | That market page's results |
| Shop URL | https://www.etsy.com/shop/CaitlynMinimalist | The shop's catalogue, page by page |
| Listing URL or ID | https://www.etsy.com/listing/1371848548 or 1371848548 | That one product, always with details |
Locale URLs such as etsy.com/uk/... or etsy.com/ca/... work too.
Put bare listing IDs in the keywords field, since the URL field only accepts URLs.
Fields
Every product row has these fields:
| Field | What it holds |
|---|---|
status | ok for a product. Other values are explained below |
listingId, title, url | The listing |
price, currency | Current price. With details on, maxPrice is the highest variation price |
isOnSale, originalPrice, discountPercent | Sale data when the item is discounted |
shopId, shopName, shopUrl | The seller. Keyword search cards often hide the shop name, so shopName can be empty without details |
shopRating, shopReviewCount | The rating and review count Etsy shows on the card. These are shop-level numbers. Etsy rounds big counts, so 3.9k becomes 3900 |
freeShipping | true when Etsy marks free shipping |
badges | Such as Bestseller, Star Seller, Popular now, Etsy's Pick |
isAd | true for sponsored listings. Ads are left out unless you turn them on |
image | Full-size main image |
input, position | Which keyword or URL found it, and its place in the results |
With listing details on, rows also get:
| Field | What it holds |
|---|---|
description | Full listing description. Email addresses and phone numbers are removed |
images | All listing images, full size |
rating, reviewCount | The listing's own rating and review count |
favorites | How many shoppers saved the listing |
materials, category | From the listing |
availability, quantityAvailable | Stock status and quantity |
shippingCost, shipsFrom, listedOn | Shipping to the selected country, origin and listing date |
inCarts | Such as 20+ when Etsy shows it |
relatedSearches | Up to 20 search phrases Etsy links from the listing |
detailsIncluded | true when the details loaded |
Price summary row
Set priceSummary to true for Etsy price research in one call.
Each keyword, search, market, category or shop URL that returned products then gets one extra row with status set to summary, after its products.
Listing URLs get none.
It covers the products returned, so maxItems sets the sample size, and sponsored listings count only when includeAds is on.
The row is free, and it is worked out from the products already returned, so it adds no requests.
In our test, the same 61 inputs used 0.0132 GB of proxy traffic with the summary on and with it off.
| Field | What it holds |
|---|---|
input | The keyword or URL it summarises |
productCount | Products returned for that input |
currency, pricedCount | The currency of the price fields, and how many products they cover |
priceMin, priceP25, priceMedian, priceP75, priceMax, priceAverage | The current price, sale price included. Quartiles interpolate between products, like Excel's QUARTILE.INC |
onSalePercent, medianDiscountPercent | Share of products on sale, and the median % off among them |
freeShippingPercent | Share with free shipping to the ships-to country |
starSellerPercent | Share from Star Sellers, over the products whose page shows the badge. Category cards and listing details show it. Keyword, search, market and shop cards do not, so it is null there unless listing details are on |
shopCount, topShops | Distinct shops, and up to 10 shops with 2 or more listings, most listings first. shopName is null when the search cards hid it |
message | Only when a results page failed or your maximum charge stopped the run, so the summary covers fewer products |
With listing details on, the row also has these, over the products whose listing page loaded:
| Field | What it holds |
|---|---|
detailsCount | Products with details |
favoritesMedian, favoritesMax | Favorites |
favoritesByPriceQuarter | The products sorted by price and cut into 4 groups of near-equal size, with each group's price range and median favorites |
listingReviewCountMedian, listingRatingAverage | The listings' own review counts and ratings, where the page shows them |
shippingCostMedian | Shipping cost to the ships-to country, where the page states it |
Prices are never converted between currencies.
Etsy prices every product in the run's currency, and every product in our tests, in USD and in EUR, came back in it.
If a listing page ever answers in another currency, the summary leaves those products out of the price fields and adds otherCurrencies with a count per currency.
A keyword summary without details, from a test run on 2026-10-17:
{"status": "summary","input": "soy candle","productCount": 40,"currency": "USD","pricedCount": 40,"priceMin": 3.25,"priceP25": 13.03,"priceMedian": 17.99,"priceP75": 22.1,"priceMax": 54.99,"priceAverage": 19.04,"onSalePercent": 30,"medianDiscountPercent": 17.5,"freeShippingPercent": 10,"starSellerPercent": null,"shopCount": 39,"topShops": [{ "shopId": "7997672", "shopName": "TeresaLynns", "listings": 2 }]}
Part of the summary for the same keyword from another test run, with listing details on and 20 products. The price, sale, shipping and shop fields are left out here:
{"starSellerPercent": 75,"detailsCount": 20,"favoritesMedian": 1150.5,"favoritesMax": 17539,"favoritesByPriceQuarter": [{ "priceFrom": 5.83, "priceTo": 11.04, "listings": 5, "favoritesMedian": 1418 },{ "priceFrom": 11.65, "priceTo": 12, "listings": 5, "favoritesMedian": 895 },{ "priceFrom": 12.9, "priceTo": 22, "listings": 5, "favoritesMedian": 2596 },{ "priceFrom": 26.25, "priceTo": 54.99, "listings": 5, "favoritesMedian": 765 }],"listingReviewCountMedian": 298,"listingRatingAverage": 4.85,"shippingCostMedian": 0}
Input
{"searchQueries": ["ceramic mug", "leather wallet men"],"startUrls": [{ "url": "https://www.etsy.com/c/jewelry/necklaces" },{ "url": "https://www.etsy.com/shop/CaitlynMinimalist" },{ "url": "https://www.etsy.com/listing/1371848548/handmade-ceramic-mug-large-size" }],"maxItems": 100,"includeDetails": false,"priceSummary": true,"sortBy": "price_asc","minPrice": 10,"maxPrice": 60,"shipsTo": "GB","freeShipping": false,"currency": "USD"}
maxItems applies to each keyword or URL separately.
Sort, price, ships-to and free-shipping filters apply to keywords, search URLs, market URLs and category URLs.
Shops always list in Etsy's own order.
Output example
Real rows from test runs on 2026-10-10.
A keyword result without details:
{"status": "ok","input": "ceramic mug","position": 6,"listingId": "4535842002","title": "Artisan Striped Coffee Mug Set with Saucers, Four Ceramic Tea Cups, Colorful Modern Drinkware, Housewarming Gift, Coffee Lover Gift 11-180","url": "https://www.etsy.com/listing/4535842002/artisan-striped-coffee-mug-set-with","price": 16,"isOnSale": true,"originalPrice": 20,"discountPercent": 20,"shopId": "61803485","shopName": "MintHarper","shopRating": 4.6,"shopReviewCount": 31,"freeShipping": true,"badges": ["Bestseller"],"shipsFrom": null,"isAd": false,"image": "https://i.etsystatic.com/61803485/r/il/de7087/8511996156/il_fullxfull.8511996156_7zb0.jpg","shopUrl": "https://www.etsy.com/shop/MintHarper","currency": "USD"}
A category result with details on (description, images and related searches shortened here):
{"status": "ok","input": "https://www.etsy.com/c/home-and-living/kitchen-and-dining/cookware","position": 5,"listingId": "691230080","title": "Personalized Cutting Board, Fathers Day, Grilling Gift, Gift from daughter, Dad Gift, Personalized Grilling Board, Gift for Husband, Wood 71","url": "https://www.etsy.com/listing/691230080/personalized-cutting-board-fathers-day","price": 30,"maxPrice": 54.6,"currency": "USD","isOnSale": true,"originalPrice": 50,"discountPercent": 40,"shopId": "19269755","shopName": "WallThingsCo","shopUrl": "https://www.etsy.com/shop/WallThingsCo","shopRating": 4.94,"shopReviewCount": 8178,"rating": 4.9,"reviewCount": 314,"favorites": 1305,"freeShipping": true,"shippingCost": 0,"shipsFrom": "Westby, WI","listedOn": "Oct 7, 2026","badges": ["Etsy's Pick"],"isAd": false,"availability": "InStock","quantityAvailable": 725,"category": "Home & Living < Kitchen & Dining < Cookware < Cutting Boards","materials": ["Walnut/Maple/Cherry"],"relatedSearches": ["daddys grilling board", "grilling bbq", "custom cuttingboard father's day stepdad"],"description": "*** Fast Shipping ***\n***Give a Gift That Lasts!***\n...","image": "https://i.etsystatic.com/19269755/r/il/b4c867/1919879321/il_fullxfull.1919879321_t8eu.jpg","images": ["https://i.etsystatic.com/19269755/r/il/b4c867/1919879321/il_fullxfull.1919879321_t8eu.jpg","https://i.etsystatic.com/19269755/r/il/358626/1872355402/il_fullxfull.1872355402_b8i2.jpg"],"detailsIncluded": true}
Row status
status | Meaning | Charged |
|---|---|---|
ok | A product | Yes |
unavailable | The listing or shop no longer exists, or the listing is sold out or private | No |
no_results | Etsy found nothing for this input | No |
summary | The price summary for one keyword or URL, when priceSummary is on | No |
invalid_input | Not a keyword or a supported Etsy URL | No |
error | Etsy kept blocking the request after all retries | No |
If a listing page fails to load while details are on, you still get the product row with its search data.
That row has detailsIncluded: false and a message, and it is charged as a product only.
Pricing
Prices are per 1,000 products or listing details.
| Event | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| Product returned | $1 | $0.95 | $0.92 | $0.92 |
| Listing details loaded for that product | $3.40 | $3.40 | $3.40 | $3.40 |
| Unavailable, no results, invalid input or failed request | Free | Free | Free | Free |
| Price summary row | Free | Free | Free | Free |
Bronze, Silver and Gold are Apify Store discount tiers, and Apify's Pricing tab shows them as Starter, Scale and Business. Apify decides which tier an account is on.
A run of 1,000 search results costs $1, or $0.92 on Silver and Gold. The same run with listing details costs $4.40, or $4.32 on Silver and Gold. Details cost more because each one loads a full listing page through a residential proxy. Set a maximum cost per run in the run options and the scraper stops once it is reached.
Speed
In our tests, 700 products without details took 22 seconds. With details on, 281 products from 59 different inputs took 4 to 6 minutes at the default concurrency of 10.
Run it on a schedule
Etsy prices change often, and each run returns the listings and prices as they are at that moment.
A daily run sent to a sheet builds a price history for a search, and with priceSummary on, the free summary row gives one line of price quartiles per keyword per day.
The scraper has no only-new mode, so every run charges for every listing it returns.
Keep maxItems at what you need.
- Set your input and click Save as a new task.
- On the task page, click Actions, then Schedule, and pick how often it runs. Apify's schedules guide covers cron times and time zones.
- On the task's Integrations tab, choose where each run's results go.
| Integration | What it does |
|---|---|
| Slack | Posts a message to your channel when a run finishes |
| Google Drive | Saves each run's results as a file in your Drive |
| Webhook | Sends the finished run, with its dataset ID, to your own URL |
| Make, Zapier, n8n | Adds each new row to a Google Sheet, a CRM or a database |
Each listing has a stable listingId, so a sheet can line up one listing's price across runs.
Use it from AI agents
The scraper works as a tool through the Apify MCP server in Claude, Cursor, VS Code and other MCP clients. An agent can pass a keyword or a shop URL and get structured product rows back. You can also call it through the Apify API, schedule it, or connect it to Make, Zapier and n8n.
More from heyitsgautham
Other actors from the same account.
- Google Trends Scraper: Related Queries & Trending Searches for Google Trends interest over time and related queries for a product keyword.
- YouTube Search Results & Rank Tracker Scraper for YouTube search results with rank, for the videos ranking on a product keyword.
- YouTube Video & Shorts Comments Scraper with Replies for the comments and replies on a video or Short, for sentiment analysis and audience research.
- Trustpilot Reviews & TrustScore Scraper for Trustpilot reviews and each company's TrustScore, for any business on any Trustpilot country site.
FAQ
Why is shopName empty on some keyword results?
Etsy's search cards show the shop name for only some results.
Turn on includeDetails and every row gets the shop name from its listing page.
Category and shop results always have it.
Can I get more than about 900 results for one keyword? Etsy stops search results at around 20 pages for visitors who are not signed in. Split the search with price ranges or sort orders to reach more listings.
Why do prices differ from what I see on Etsy?
Etsy prices depend on currency and destination country.
Set currency and shipsTo to match what you want to compare.
Does it log in or use the Etsy API? No. It reads the same public pages any visitor sees, with no account.
Does it return customer reviews or seller contact details? No. It does not collect reviewer names, emails or phone numbers, and it strips emails and phone numbers out of descriptions.
Limitations
- Etsy's bot protection blocks some requests. The scraper retries on new residential IPs, which keeps failures rare but not zero. Failed rows are free.
- The tags a seller typed are not shown on Etsy's public listing page.
relatedSearchesholds the search phrases Etsy links instead. - Variation prices are summarised as
price(lowest) andmaxPrice(highest), not listed per option. - Etsy changes its pages from time to time. If something breaks, open an issue on the Issues tab.