Etsy Scraper: Listings, Etsy Shop Sales, Tags & Reviews avatar

Etsy Scraper: Listings, Etsy Shop Sales, Tags & Reviews

Pricing

from $2.56 / 1,000 listings

Go to Apify Store
Etsy Scraper: Listings, Etsy Shop Sales, Tags & Reviews

Etsy Scraper: Listings, Etsy Shop Sales, Tags & Reviews

Get Etsy listings for ceramic mugs, custom gifts or digital planners with prices, discounts, ratings, tags, favourites and shop sales. Search, category, shop and listing URLs. Basic listings $0.0032 each: 1,000 cost $3.20. Full enrichment $0.009 each. No login.

Pricing

from $2.56 / 1,000 listings

Rating

0.0

(0)

Developer

fortbrand

fortbrand

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Security

Limited permissions

Share

For Etsy sellers researching products and keywords, brands checking resellers, and analysts monitoring public listings. A basic listing costs $0.0032: 1,000 listings cost $3.20. Optional enrichment adds $0.0058 once per listing. Full enrichment totals $0.009 each: 20 cost $0.18. No Etsy login, account cookies, developer key or browser extension is needed.

What you get

Basic runs return storefront titles, prices, discounts, seller IDs, images, ratings and exposed badges. Listing details add descriptions, favourites, tags, materials and variations. Shop research adds displayed lifetime sales, rating, opening year and up to ten public shop review snippets.

The tested prefill, ceramic mug with 20 listings, completed in 8.3 seconds on 29 October 2026. A separate one-listing run with both enrichment options completed in 9.8 seconds and returned tags, materials, variation choices, favourites and shop statistics. Larger jobs and retries take longer.

FieldMeaning and availability
verdictShort readable result, such as Listing found or 20% off.
recordTypeLISTING for a listing; NOTE for an input correction; SUMMARY for the run summary.
listingIdPublic Etsy listing ID, stored as text.
titleListing title.
pricePrice exposed by the selected source. Usually the storefront's displayed starting price. See priceScope.
originalPriceStruck-through price when the storefront displays one.
currencySource currency code, such as USD, GBP, CAD, AUD or EUR.
discountPercentDisplayed discount, or calculated from the two displayed prices.
shopName, shopIdPublic business identity. A shallow search card may expose only the ID.
rating, reviewCountRating and review count shown on the card. These are shop-level figures, identified by ratingScope: SHOP.
isBestsellerBestseller signal when exposed; null when unknown.
isStarSellerStar Seller signal when exposed; null when unknown.
isAdWhether the listing was observed in an advertising placement. A listing can appear in both advertising and organic positions.
freeShippingTrue when Etsy exposes a free shipping or delivery signal; otherwise null. Destination, variant and order conditions may apply.
favoritesPublic favourite count with listing details enabled.
tags, materialsPublic tag and material arrays with listing details enabled.
descriptionFull public description with listing details enabled.
variationsAvailable property names and choices, with each choice's base price, currency and availability where provided.
shopSalesPublic displayed shop sales count with shop research enabled.
shopSalesDisplayOriginal shop sales display, such as 53.1k.
shopSalesIsApproximateTrue when the shop displays a rounded count.
shopRating, shopOpenedYearPublic shop rating and opening year with shop research enabled.
shopReviewsUp to ten shop-page review snippets containing rating, text and date only. No reviewer names, IDs, profile links or avatars. These are shop reviews, not a complete listing-review history.
imageUrl, urlPrimary listing image and canonical listing URL.
sourceUrl, sourceQueryStorefront or public listing data source, plus the keyword when applicable.
priceScope, basePrice, baseCurrencyDistinguish storefront displayed starting prices from listing API base prices.
detailsStatus, shopStatusWhether requested enrichment was available, partial or unavailable.
notesRelevant source limitations for this record.
scrapedAtUTC extraction time.

Missing data stays null. Counts retain Etsy's precision: 3.5k becomes 3,500. Missing badges stay unknown.

Three steps to run it

  1. Enter one or more short buyer keywords in Search terms, or paste public Etsy URLs into Etsy URLs.
  2. Set the total number of listings you need. Leave enrichment off for a quick search, or enable the fields needed for your research.
  3. Start the run and export the dataset as JSON, CSV or Excel. The Listings view shows prices and seller signals; the research view shows tags, materials and shop information.

A quick first run:

{
"searchTerms": ["ceramic mug"],
"maxItems": 20,
"country": "US"
}

A known listing with its tags and variations:

{
"startUrls": ["https://www.etsy.com/listing/4296141840"],
"includeDetails": true,
"maxItems": 1,
"country": "US"
}

A shop research run:

{
"startUrls": ["https://www.etsy.com/shop/HereafterLA"],
"includeShop": true,
"maxItems": 20,
"country": "US"
}

A price-filtered category:

{
"startUrls": ["https://www.etsy.com/c/home-and-living"],
"priceMin": 15,
"priceMax": 45,
"sort": "priceAsc",
"maxItems": 20
}

Example output

Selected fields from a live cloud result on 29 October 2026:

{
"listingId": "4296141840",
"title": "Coffee Mug - KJ Pottery",
"price": 57,
"currency": "USD",
"shopName": "KJPottery",
"favorites": 1701,
"shopSales": 20900,
"shopRating": 4.9,
"shopOpenedYear": 2013
}

Inputs

InputDefaultWhat it does
searchTermsNone; prefill is ceramic mugArray of buyer keywords. Up to 50 terms are processed. Use short, specific phrases rather than whole paragraphs.
startUrlsEmptyArray of public Etsy URL strings: search, market, category, listing or shop. Up to 100 URLs are processed.
maxItems20Maximum unique listings across the complete run, from 1 to 1,000. It is not a separate allowance for each keyword.
sortrelevancerelevance, newest, mostRecent, priceAsc or priceDesc. Newest and mostRecent both select Etsy's date-descending order.
categoryFallbackToKeywordstrueWhen an exact category page is unavailable, search its label and mark rows KEYWORD_FALLBACK. Set false for exact-category-only results.
priceMin, priceMaxUnsetOptional bounds on displayed starting prices in the selected storefront currency.
includeDetailsfalseAdd public description, tags, materials, favourites and variations.
includeShopfalseAdd public shop statistics and the review snippets on the shop page.
countryUSUS, GB, CA, AU or DE. Selects storefront locale and the default proxy country.
proxyConfigurationResidential proxyOptional standard Apify proxy settings. Public listing JSON tries direct access first. Storefront pages normally need residential access.

Prices, sales and variation limits

Storefront prices are starting prices. They can apply to the least expensive variation, a sale, a delivery destination or an order condition. They are not a checkout quote. Tax, postage and personalisation may change the amount paid.

A direct listing URL uses Etsy's public listing JSON. That source exposes the listing's base price and does not expose the storefront's struck-through promotion. Those records have priceScope: SELLER_BASE_PRICE; originalPrice and discountPercent stay null. Use search, category or shop inputs when the displayed discount is the main thing you are monitoring. Enriching a search result preserves its storefront price instead of replacing it with the base price. The independent API value is retained as basePrice and baseCurrency; a difference without a displayed promotion is noted. Etsy can expose inconsistent prices across its own surfaces.

Variation choice prices are base prices. The Actor does not enumerate every combination or promise that independent choice prices can be added together. Shop sales are lifetime shop sales, not units sold for this product and not estimated revenue. Rounded displays remain explicitly approximate. Review counts on cards describe the shop, unless Etsy explicitly exposes another scope.

Pricing examples

JobListing fees before tier discounts
20 basic listings$0.064
100 basic listings$0.32
1,000 basic listings$3.20
20 listings with details, shop research, or both$0.18
100 enriched listings$0.90

The $0.00005 platform start fee is added, at least once and once per GB when applicable. Listing and enrichment discounts are Bronze 5%, Silver 10%, Gold 20%; higher tiers retain Gold pricing. Platform usage is included.

The optional enrichment event is charged once for a listing that receives requested details or shop information. Turning on both options does not double that event. If neither requested enrichment source delivers useful data, that optional event is not charged. Listing retries, duplicates, input notes and summaries do not create listing charges.

Set a maximum charge in Apify. Before another listing, the Actor checks the listing fee plus requested enrichment allowance. If insufficient, it stops and retains saved rows. A $0.01 limit covers one enriched listing and the start fee at standard pricing.

Monitor prices every day

Save the input as an Apify task. Create an Apify schedule for that task at the time you need the data each day. Export each run's dataset to your own table, key it by listingId, and compare the price together with its currency and priceScope.

Keep the input and country consistent. Search absence does not prove removal: use a direct listing URL to confirm whether a known listing remains public.

API examples

Use your Apify token from an environment variable:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("vant47/etsy-listings-scraper").call(
run_input={
"searchTerms": ["ceramic mug", "leather wallet"],
"maxItems": 100,
"includeDetails": True,
"country": "US"
}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("recordType") == "LISTING":
print(row["listingId"], row["price"], row["currency"])

The dataset also includes a free SUMMARY row. Filter by recordType before loading listing rows into a database. A richer summary is available in the default key-value store under SUMMARY. It includes per-input outcomes, listing totals, median prices grouped by currency, top returned tags and bestseller share among records with a known signal. It never averages different currencies into a single price.

Use with AI agents (MCP)

Connect an agent to https://mcp.apify.com. Request this Actor, supply keywords or public URLs, country, listing limit, enrichment options and a maximum charge. Connect datasets to Make, n8n, Zapier, spreadsheets or webhooks.

Honest coverage limits

  • Etsy can refuse requests or change its public data calls. The Actor retries with fresh anonymous sessions, reports source failures without charging for missing listings, and preserves delivered data.
  • Some exact category storefronts refuse signed-out requests. By default, their last category label becomes a market keyword search. Each such row contains categoryScope: KEYWORD_FALLBACK, the requested category and an explanatory note. Keyword results are not an exact category export. Disable categoryFallbackToKeywords to receive a free source note instead.
  • Pagination is limited to 30 pages per input and 1,000 unique listings for the run. Repeated pages and exhausted result sets stop early.
  • A shallow grid may omit shop names, favourites, tags and materials. Use enrichment for those fields.
  • Public shop review snippets are a limited sample. The Actor does not paginate every review, collect reviewer identities or estimate product sales from reviews.
  • Sold-out or removed listings may not appear in discovery. A missing direct listing is reported as unavailable; the Actor does not manufacture a product record.
  • A source may expose some requested details and omit others. Check the status fields and notes before treating null as zero.
  • This tool is independent of Etsy. It reads public, signed-out information and does not perform account actions or transactions.

Frequently asked questions

Do I need an Etsy account or an API key?

No. Supply public keywords or URLs. The Actor does not accept account cookies or Etsy credentials.

Can I get all thirteen Etsy tags?

Enable includeDetails. It returns the public tag array the listing data source exposes. A seller may supply fewer than thirteen; the Actor does not invent the rest.

Why is a price different from the amount on a listing page?

Check priceScope, country and currency. Search and shop cards show a starting storefront price, while a direct listing data call exposes its base price. Variations, promotions, postage and tax can change the final price.

Will I be charged for duplicate keywords or a reboot?

A listing ID is delivered once per run. Repeating the same keyword does not create a second listing charge. Saved dataset rows and durable charge receipts support restart recovery.