Etsy Scraper: Search Listings, In-Cart Counts, Ads & Tags avatar

Etsy Scraper: Search Listings, In-Cart Counts, Ads & Tags

Pricing

from $2.00 / 1,000 listing saveds

Go to Apify Store
Etsy Scraper: Search Listings, In-Cart Counts, Ads & Tags

Etsy Scraper: Search Listings, In-Cart Counts, Ads & Tags

Scrape Etsy search results for any keyword: price, rank, ad slots, live in-cart counts, 24h sales, tags and each shop's total sales. Goes past Etsy's ~1,000-result limit per search. No login. Export to JSON, CSV or Excel.

Pricing

from $2.00 / 1,000 listing saveds

Rating

0.0

(0)

Developer

Epic Scrapers

Epic Scrapers

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Categories

Share

Etsy Scraper: search results with live cart counts, ads, tags and shop sales

Etsy Scraper turns any Etsy keyword search into a spreadsheet. You get every listing a shopper sees, with its search rank and ad slot. Each listing also has the numbers Etsy itself publishes: how many people have it in their cart right now, how many bought it in the last 24 hours, its 13 tags, its favorites, and its shop's total sales.

  • Real Etsy figures, not estimates. Cart counts, 24-hour sales, shop sales, tags and favorites come straight from Etsy. Nothing is modeled or guessed.
  • More than Etsy's ~1,000-result limit. Etsy stops every search at about 1,000 results. This actor splits large searches by price, so a broad keyword can return several thousand unique listings.
  • Built for repeated runs. Schedule it daily or weekly and compare runs to see what's selling, how ranks move and who is buying ads.
  • No Etsy account, API key, browser extension or proxy setup. Runs in the cloud. Export to JSON, CSV, Excel or Google Sheets.

Scope: This actor searches by keyword. To scrape a known shop's listings, profile or reviews, use Etsy Shop Scraper.

What can you do with Etsy Scraper?

GoalHow
Find products that sell nowSearch a niche and sort by inCartCount or boughtLast24h.
Research Etsy SEO and tagsCollect the tags, titles and categories of the listings that rank first for your keywords.
Track your search rankSchedule your keywords daily and follow your listings' searchRank over time.
Watch competitors' adsSee which listings are paid placements (isAd) and where they appear (page, pagePosition).
Measure real shop salesSchedule a run and subtract yesterday's shopSales from today's. That's the shop's actual sales for the day, not an estimate.
Price a productCollect prices, sale prices and discounts across a niche, filtered by price range, shipping country or shop location.

Why real figures matter

Popular Etsy research tools estimate sales with a model, because Etsy doesn't publish per-listing sales. Their estimates can be far off in either direction, and different tools often disagree. This actor reports only what Etsy publishes: the shop's total sales count, the live in-cart count, the "bought in the last 24 hours" message, favorites, ratings and tags. If you need sales over a period, the scheduled-run recipe below gives you exact shop-level numbers from Etsy's own counter.

Quick start

  1. Click Try for free and sign in to Apify. The free plan includes monthly credit for test runs.
  2. Add one or more keywords to Search keywords, for example ceramic mug. Use short phrases a shopper would type.
  3. For a first run, set Max results per search to 20.
  4. Click Start. When the run finishes, open the Output tab and export the data.
{
"queries": ["ceramic mug"],
"maxResultsPerQuery": 20
}

What data can you extract?

Every row is one listing. These fields come from the search results page:

GroupFields
ListinglistingId, title, url, price, salePrice, discount, currency, hasVariations, isEtsysPick
Searchquery, searchRank, page, pagePosition, isAd
ShopshopId, shopRating, shopReviewCount
Mediathumbnail, imageUrl, imageCount, hasVideo

With Include listing details on (the default), each row also has:

GroupFields
DemandinCartCount (shoppers with it in their cart now), boughtLast24h, demandMessage, lastSaleAt, favorites, quantity, isScarce, isSoldOut
ReputationlistingRating, listingReviewCount, reviewPhotoCount, isBestseller, isTopRated
SEOtags (all 13), materials, category, categoryPath, description, whenMade
ProductisHandmade, isVintage, isDigital, isMadeToOrder, isPersonalizable, isCustomizable, minPrice, maxPrice, variations (with per-option prices), images, shopWideSale, createdAt, renewedAt
FulfillmenthasFreeShipping, shippingCost, minProcessingDays, maxProcessingDays, shipsFromCountryCode, acceptsReturns
ShopshopName, shopUrl, shopSales (total sales, also for shops that hide it), shopSalesHiddenOnSite, shopRating, shopReviewCount, shopFollowers, shopActiveListings, shopCountryCode, shopOpenedAt, isStarSeller

Track Etsy over time with scheduled runs

Most of the value comes from running the same search 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 keywords 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 06: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 caseFrequencyCron expression
Rank and ad trackingDaily0 6 * * *
Shop sales from shopSalesDaily0 0 * * *
Trend and niche researchWeekly (Monday)0 6 * * 1
Seasonal launches (Q4, holidays)Twice a day0 6,18 * * *

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 listingId, shopId and scrapedAt, so runs are easy to join:

  • Daily shop sales: for each shopId, today's shopSales minus yesterday's.
  • Demand trend: inCartCount and favorites per listingId over time.
  • Rank movement: searchRank per listingId and query. Set dedupeAcrossQueries to false so every keyword keeps its full list.
  • New competitors: listingIds that appear for the first time, and their createdAt.
  • Price changes: price and salePrice per listingId.

Input reference

FieldTypeDefaultEffect
queriesArray of stringsRequiredKeywords, one search per entry. An Etsy search URL also works; its q= keyword is used.
maxResultsPerQueryInteger100Maximum listings saved per search. 0 means no limit.
includeDetailsBooleantrueAdds the detail fields above. One extra request per listing, charged as a separate event.
sortByString"relevance""relevance", "newest", "price_asc", "price_desc", or "top_reviews".
minPrice/maxPriceIntegerEmptyPrice range in US dollars.
shipToString"US"Search as a shopper in this country (2-letter code). Etsy only shows listings that ship there. Prices stay in USD.
shopLocationStringEmptyOnly shops in this country (2-letter code).
onSaleOnlyBooleanfalseOnly discounted listings.
freeShippingOnlyBooleanfalseOnly listings with free shipping.
digitalOnlyBooleanfalseOnly instant digital downloads.
vintageOnlyBooleanfalseOnly vintage items.
personalizableOnlyBooleanfalseOnly personalizable listings.
includeAdsBooleantrueKeep sponsored results. Turn off for organic results only.
dedupeAcrossQueriesBooleantrueSave each listing once per run. Turn off to get each search's full result list, for example for rank tracking.

Ready-to-run examples

Find what's selling now in a niche

{
"queries": ["halloween sweatshirt", "ghost mug", "fall wreath"],
"maxResultsPerQuery": 300,
"includeAds": false
}

Sort the dataset by inCartCount or boughtLast24h. Listings with high cart counts and a recent createdAt are newer products that are already selling.

Track your keyword ranks and competitors' ads every day

{
"queries": ["personalized leather wallet", "custom family ornament"],
"maxResultsPerQuery": 200,
"includeDetails": false,
"dedupeAcrossQueries": false
}

Save it as a task and schedule it daily. Search data without details is the cheapest way to follow searchRank, isAd and prices.

Research tags for digital products

{
"queries": ["digital planner", "budget spreadsheet"],
"maxResultsPerQuery": 100,
"digitalOnly": true
}

Open the Tags & SEO view and count which tags the top-ranked listings share.

Compare a market abroad

{
"queries": ["linen apron"],
"shipTo": "GB",
"shopLocation": "GB",
"maxResultsPerQuery": 200
}

Run it again with another country to compare competition and prices.

Collect a whole niche

{
"queries": ["ceramic mug"],
"maxResultsPerQuery": 5000,
"includeDetails": false,
"includeAds": false
}

The actor splits the search into price ranges once it reaches Etsy's limit of about 1,000 results.

Output

Results go to the run's default dataset. Use the views Overview, Demand & shops, Ranking & ads, or Tags & SEO, or export everything as JSON, CSV, Excel, XML or HTML.

This is an illustrative record with details. Values are examples.

{
"listingId": 1549249672,
"title": "14K Gold Initial Necklace with Birthstone",
"url": "https://www.etsy.com/listing/1549249672/14k-solid-gold-initial-necklace-with",
"price": 42.71,
"salePrice": 29.9,
"discount": "(30% off)",
"currency": "USD",
"isAd": false,
"query": "necklace",
"page": 1,
"pagePosition": 3,
"searchRank": 2,
"inCartCount": 1005,
"boughtLast24h": 19,
"favorites": 23468,
"listingRating": 4.79,
"listingReviewCount": 3051,
"isBestseller": true,
"tags": ["personalized jewelry", "gift for her", "birthstone necklace"],
"category": "Monogram & Name Necklaces",
"lastSaleAt": "2026-09-30T22:01:15.000Z",
"createdAt": "2023-09-10T13:26:20.000Z",
"shopName": "StellaGoldJewelry",
"shopSales": 33989,
"shopSalesHiddenOnSite": true,
"shopRating": 4.8,
"shopCountryCode": "TR",
"isStarSeller": false,
"scrapedAt": "2026-10-01T12:00:00.000Z"
}

Notes on fields

  • searchRank is the position among organic results, as a shopper sees them. It is null for ads and for listings found by price splitting, which are ranked within a price range, not the whole search.
  • page and pagePosition give where the listing appeared, including ad slots.
  • Each listing is saved once per search. If Etsy shows it first as an ad and later as an organic result, the row describes the first appearance.
  • On a search row, shopRating and shopReviewCount are the shop's. The listing's own rating is listingRating, from details.
  • price and salePrice are in US dollars. With variations, price is the starting price; details add minPrice, maxPrice and per-option prices.
  • boughtLast24h is set only when Etsy shows its "In demand" message; null means no message, not zero sales.
  • shopSales is the shop's total, not the listing's. Etsy doesn't publish per-listing sales.
  • Missing values are null. Titles and descriptions have HTML entities decoded. Every row has scrapedAt in UTC.

FAQ

Why did I get few or no results?

Use short keywords a shopper would type, such as leather journal, not a full listing title. Narrow filters (price range, shop location, on sale) also reduce results. The log says when Etsy returned nothing.

How many results can I get?

Etsy stops each search at about 1,000 results. Above that, the actor splits the search into price ranges and keeps going until it reaches your limit or every range is below Etsy's limit. Broad keywords have hundreds of thousands of listings, so with maxResultsPerQuery: 0 a run can take long and cost more. Set a limit or a maximum cost per run.

How fast is it?

Etsy takes about a second to answer each request. In our tests, 3,000 search results without details took about 4 minutes, and 80 listings with details took under 40 seconds. Details add one request per listing, run in parallel.

Why did my run stop before reaching my limit?

If the log says the charge limit was reached, the run hit its maximum cost or your account's spending limit. Everything collected before that is saved in the dataset. Raise the limit in the run options to collect more.

Are the sales numbers estimates?

No. shopSales, inCartCount, boughtLast24h, favorites and ratings are Etsy's own numbers at the time of the run. Etsy doesn't publish sales per listing, so the actor doesn't invent them. For sales over a period, compare shopSales between scheduled runs.

Why do ranks differ from what I see on etsy.com?

Etsy personalizes results for signed-in shoppers, rotates ads on every page load, and changes results by country. The actor searches as a signed-out shopper in the shipTo country. Expect small differences, and compare ranks between runs of the same task.

Do I need proxies, an Etsy account or an API key?

No. The actor handles connections and retries itself. It doesn't log in and doesn't use your Etsy account.

How is this different from Etsy's official API?

Etsy's Open API needs an approved developer app and doesn't offer search ranking, ads, cart counts or "bought in 24 hours". This actor returns what a shopper sees in search, plus those signals.

The actor collects publicly visible listing and shop data and no buyer data. You are responsible for how you use it, including Etsy's terms and laws such as GDPR.

Can it scrape a specific shop or its reviews?

Use Etsy Shop Scraper for a shop's full catalog, profile, contact details and reviews.

Cost

This actor uses pay-per-event pricing. Check the current prices in the Pricing tab. Events:

  • listing: one listing saved.
  • listing-detail: listing details added to a listing, charged only when the detail request succeeds.

Turn off includeDetails for the cheapest runs, for example for daily rank tracking. Set a maximum cost per run; the actor stops cleanly when it's reached.

Support

Report problems or request features in the Issues tab. Include the run ID, 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.