Etsy Market Research Scraper avatar

Etsy Market Research Scraper

Pricing

from $0.98 / 1,000 listings

Go to Apify Store
Etsy Market Research Scraper

Etsy Market Research Scraper

Collect Etsy market and category listings with prices, shops, SEO keywords, demand signals, and competition metrics.

Pricing

from $0.98 / 1,000 listings

Rating

0.0

(0)

Developer

Daniel Valev

Daniel Valev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

What does Etsy Market Research Scraper do?

Etsy Market Research Scraper turns public Etsy market and category result pages into structured listing data. In addition to prices, ratings, shops, badges, and images, it calculates title keywords, price percentiles, price z-scores, a transparent demand signal, shop concentration, and result-set price statistics.

It is designed for product research, pricing analysis, Etsy SEO discovery, catalog benchmarking, and recurring niche snapshots. You can submit multiple keyword queries and category URLs in one run; duplicate listing IDs are stored and charged only once.

The Actor uses fast HTTP requests on Node.js 24. It starts without a proxy and escalates through Apify Shared and Residential proxies only when a response is classified as a challenge or rate limit.

What can you use it for?

  • compare price bands and discounts in a product niche;
  • discover recurring words in successful listing titles;
  • identify shops with a high share of visible results;
  • filter out ads, digital products, low-rated listings, or unwanted keywords;
  • export a clean dataset to JSON, CSV, Excel, or an Apify integration;
  • schedule repeated market snapshots for downstream trend analysis.

Input

Provide at least one searchQueries value or supported startUrls entry. Market and category URLs are supported. Etsy /search, listing-detail, shop, and review pages are intentionally excluded from this pure-HTTP MVP because current direct, Shared, and Residential probes receive DataDome challenges on those routes.

{
"searchQueries": ["handmade necklace", "silver ring"],
"maxItemsPerQuery": 100,
"sort": "most_relevant",
"minPrice": 20,
"maxPrice": 200,
"excludeAds": true,
"excludeKeywords": ["template", "printable"],
"currency": "USD",
"locale": "en-US"
}

Important controls:

  • maxItemsPerQuery is an upper bound from 1 to 5,000. Etsy may expose fewer unique matching results.
  • maxItemsTotal optionally caps the whole run.
  • sort supports most relevant, lowest price, highest price, and recently listed.
  • filters run in the documented schema order; filtered and incomplete records are not stored or charged.
  • aggressiveDepth tries additional measured sort orders after a route stops yielding new listings.
  • proxyConfiguration defaults to an Apify Residential fallback. No Etsy API key, cookie, or login is needed.

The no-input health check requests exactly five listings for handmade necklace.

Output

Each complete listing is written to the default dataset with recordType: "listing". One uncharged runSummary item is written last and reports delivered depth, duplicate suppression, filters, route yield, network retries, price statistics, top keywords, and shop concentration.

{
"recordType": "listing",
"listingId": "984947628",
"url": "https://www.etsy.com/listing/984947628/7th-anniversary-gift-for-wife-7-years",
"title": "7th anniversary gift for wife ...",
"price": 195.29,
"originalPrice": 278.99,
"currency": "USD",
"discountPercent": 30,
"shopName": "BestArtisanGifts",
"titleKeywords": ["7th", "anniversary", "gift", "wife"],
"pricePercentileInResultSet": 75,
"priceZScore": 0.81,
"estimatedDemandSignal": 4.62,
"query": "handmade necklace",
"position": 1,
"page": 1,
"sourceRoute": "market:most_relevant"
}

estimatedDemandSignal is not sales data. It is calculated as ln(1 + reviews) + 2 × ln(1 + purchases shown in the last 24 hours) + 0.5 × ln(1 + carts shown). Missing visible signals contribute zero. competitionScore is the Herfindahl concentration index across shops, scaled from 0 to 10,000; a higher value means the visible results are concentrated among fewer shops.

Fields that require listing-detail pages—description, tags, materials, personalization, variants, and videos—remain null or empty in this MVP. The Actor never fabricates them.

Listing field reference

FieldsMeaning
recordType, listingId, url, titleRecord discriminator and stable public listing identity. Records missing any required identity field are rejected.
query, position, page, sourceRoute, scrapedAtSearch intent, one-based placement, source page, successful depth route, and extraction timestamp.
price, originalPrice, currency, discountPercent, onSaleNumeric card price data and calculated discount. Unknown values are null, never zero-filled.
freeShipping, shippingText, availability, quantityAvailableVisible shipping and availability signals; quantity is null when the card does not expose it.
imageUrl, imageUrls, videoUrlPrimary and discovered card images; video remains null without detail enrichment.
shopId, shopName, shopUrl, shopLocation, shopSales, shopReviewCount, isStarSellerPublic shop identity and visible shop signals. Detail-only values remain null.
rating, reviewCountNumeric rating and integer review count, or null when Etsy does not expose them.
badgesBooleans for starSeller, freeShipping, bestseller, etsyChoice, and ad.
isDigitalDownload, hasVariations, priceMayBeMinimumVariant, variantDetectionStatusProduct-type and variation diagnostics; unknown card-only values remain null.
tags, materials, personalizationReserved detail fields; empty or null in this MVP.
inCartCount, boughtInLast24HoursVisible demand hints, or null when absent.
pricePercentileInResultSet, priceZScore, titleKeywords, estimatedDemandSignal, isLikelyAdIn-process research metrics calculated without extra requests.
extractionSources, detailEnrichmentStatusPer-field parser provenance and reserved enrichment status.

Run summary field reference

FieldsMeaning
recordType, queries, requestedTotal, deliveredTotal, uniqueListingsSummary identity, requested intents, requested ceiling, stored listing count, and complete unique candidates.
duplicatesSuppressed, rejectedIncomplete, filteredOut, depthExhaustedReasonExact reasons why candidate rows did not become delivered listings.
routesUsed, routeYieldAttempted depth routes and the unique listings each contributed.
resultSetTagFrequency, competitionScore, priceStatsTop title-keyword counts, shop HHI, and min, p25, median, p75, max, and mean price.
shopCount, topShopsDistinct represented shops and their listing counts.
blockedRequests, retries, proxyRungsUsedNetwork ladder diagnostics.
runStartedAt, runFinishedAt, durationSecondsRun timing in ISO UTC timestamps and seconds.

Pricing

The recommended launch model is pay per event: Apify's $0.00005 synthetic run-start charge plus $0.00150 per stored listing ($1.50 per 1,000 listings). Duplicate, filtered, incomplete, blocked, and summary records are not charged.

Listings deliveredRecommended event charge
5$0.00755
100$0.15005
1,000$1.50005
5,000$7.50005

These values must match the Actor's Apify Console pricing configuration before publication. The recommended setup keeps Pay per event + usage disabled, so normal platform and proxy usage is included in the event price.

Reliability and limits

The Actor retries each URL through a bounded network ladder with exponential backoff. It stops a route after two consecutive pages add no new listings and reports the reason in depthExhaustedReason. It also respects the run's maximum PPE charge budget and stops storing listings when the budget is reached.

Etsy can change its public HTML or anti-bot behavior without notice. A run can therefore return fewer items than requested. Use the runSummary record and the COST_TELEMETRY key-value-store record when diagnosing yield or proxy cost.

This Actor accesses public, signed-out result pages only. It does not log in, solve CAPTCHAs, or bypass private account boundaries. Use the data for a legitimate purpose and comply with applicable laws and Etsy's terms. This Actor is not affiliated with Etsy.

Support

If a run produces an unexpected shape or too few results, open an issue with the Actor run ID and non-sensitive input. Do not include proxy credentials, cookies, or authentication tokens.