Etsy Listings Scraper (search, shops, listing details, prices)
Pricing
from $4.00 / 1,000 result items
Etsy Listings Scraper (search, shops, listing details, prices)
Etsy scraper for listings by keyword, category URL, shop or listing id: price and variant price range, currency, shop, rating and reviews, seller tags, category path, availability, ad flag. Monitor mode alerts on price and stock changes. $5 per 1,000 listings, no login, no charge for empty runs.
Pricing
from $4.00 / 1,000 result items
Rating
0.0
(0)
Developer
Viktor Dubnytskiy
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Turn a keyword, a category/search URL, a shop name or a listing id into flat Etsy listing rows with price, currency, shop, rating and tags — no login, no browser.
What you get
Real rows from the example dataset (keyword ceramic lamp, one search page plus listing detail):
| title | price | currency | source |
|---|---|---|---|
| Handgefertigte Keramik Tischlampe: Exotische Limetten Glasur... | 250 (up to 350) | EUR | listing — full detail: tags, category, rating 5, 21 reviews |
| Handmade Ocher Fabric Table Lamp with Dark Green Trim-62# | 191.74 | USD | search, isAd: true |
| Raku Ceramic Pendant Light – Custom Copper Blue Green Pottery Lamp | 250 | USD | search, isAd: true |
Full row: id/listingId, title, url, price, priceMax, currency, shopId, shopName, rating, reviewCount, image, isAd, tags, category, availability, description, source, scrapedAt.
Use cases
- Product and keyword research — pull a keyword's whole result set with prices and seller
tagsto see how top listings are titled and tagged. - Competitor and shop tracking — collect every listing of a shop, then re-run in monitor mode to catch price changes and sold-out items.
- Catalogue and pricing datasets — export price, price range, currency, category and rating for thousands of listings into a spreadsheet or database.
Try it in 10 seconds
Hit Start/Try it — the input already works: keywords: ["ceramic lamp"], searchPages: 1, maxItems: 30, nothing required. Add fetchDetails: true to get tags, category and rating too.
To track price and stock changes over time: save as a Task, set Mode to monitor, give it a monitorStateId, and schedule it (Apify → Schedules → cron 0 9 * * * for daily) with a webhookUrl or Telegram target — each run then returns only listings whose price, availability or review count changed.
Related actors
- Amazon Price Tracker: Product Scraper by ASIN, Buy Box, Stock — same monitor pattern for mainstream retail listings.
- Walmart Product Scraper & Price Monitor (stock, seller, store) — same pattern for Walmart's marketplace.
- Flipkart Product Scraper & Price Monitor (search, specs, stock) — the same pattern for the Indian market.
- Shopify Store Products Scraper (products.json, prices, monitor) — for an independent seller's own storefront instead of a marketplace.
How it works
Etsy is behind DataDome, so pages are fetched through the Apify Web Unblocker tier and the server-rendered HTML is parsed directly — no browser, no login. A search page yields up to 48 listings in a single request; fetchDetails (or listingIds) opens individual listing pages for tags, category, description, review count and the variant price range. In monitor mode the run compares price, availability and review count against the previous run of the same Task and pushes only the listings that changed.
Input
| Field | Meaning | Default |
|---|---|---|
keywords | Etsy search queries, e.g. ceramic lamp; 48 listings per page | ["ceramic lamp"] |
categoryUrls | Category or search URLs, e.g. https://www.etsy.com/c/home-and-living/lighting | empty |
shops | Shop names as they appear in etsy.com/shop/<name>, e.g. DEBARROceramics | empty |
listingIds | Listing ids or full listing URLs for full detail rows | empty |
searchPages | Pages per search query, 48 listings each | 1 |
fetchDetails | Open every search hit's listing page for tags, category, description and review count | false |
locale | Accept-Language value that decides the language of titles and categories, e.g. en-US | en-US |
maxItems | Stop after this many pushed rows | 30 |
mode | scrape = every listing; monitor = only listings changed since the previous run of this Task | scrape |
monitorStateId | State key for monitor mode when not running as a saved Task | empty |
webhookUrl | URL that receives a POST with the change summary in monitor mode | empty |
telegramBotToken / telegramChatId | Optional Telegram destination for monitor-mode summaries | empty |
Pricing
| Event | Price |
|---|---|
| result | $0.005 per listing ($5 per 1,000) |
| monitor-check | $0.015 per monitor run |
| change | $0.005 per changed listing |
Charged only for listings actually pushed; blocked pages are not charged and three in a row end the run with reason blocked.
Found it useful? A short review on the Store page helps other buyers and sellers find this actor and tells us what to improve. If something is wrong, open an issue on the actor page — issues are answered within a day.
Why this actor
- Four ways in, one row schema — keyword search, category/search URL, shop and listing id all produce the same flat row, with
sourcesaying where it came from. - No charge for empty runs — result events are billed per pushed row, so a run that finds nothing costs nothing in results.
- Seller tags and full category path included on detail rows, which is what keyword research actually needs.
- Monitor mode built in — price, availability and review-count changes with webhook or Telegram alerts, no second actor needed.
- No login, no cookies, no API key — nothing to configure beyond the input.
- Every run leaves a
RUN_SUMMARYrecord in the key-value store with the reason for an empty result, so a zero-row run is diagnosable.
Limits
- Etsy uses DataDome; the actor runs through the Apify Web Unblocker, which Apify bills per request on top of the result price. A search page yields up to 48 listings per request, while
fetchDetailscosts one request per listing. - Sales counts and "ships from" are not exposed in Etsy's server-rendered HTML and are not returned.
- Search-page
ratingappears only where Etsy renders it in the card; usefetchDetailsorlistingIdsfor reliable rating and review count. - Review texts and buyer names are not collected.
FAQ
How do I scrape all listings of an Etsy shop? Put the shop name (the part after etsy.com/shop/) into shops and raise maxItems. Add fetchDetails: true if you also want tags, category and description for each listing.
Can I get Etsy tags and category for keyword research? Yes. Tags and the full category path come from listing pages, so either set fetchDetails: true on a keyword search or pass listing ids directly in listingIds.
How do I track Etsy price changes? Save the actor as a Task, set mode to monitor, fill in webhookUrl or the Telegram fields and schedule the Task. Each run returns only the listings whose price, availability or review count changed since the previous run.
Changelog
- 0.1: initial release — search, category, shop and listing pages; monitor mode.
If this actor is useful, a review on its Apify Store page genuinely helps other buyers find it. Found a bug or need a field that is missing? Open a ticket on the Issues tab of the actor and it will be looked at.