Etsy Scraper avatar

Etsy Scraper

Pricing

$6.40 / 1,000 results

Go to Apify Store
Etsy Scraper

Etsy Scraper

Scrape public Etsy public marketplace listings, prices, shops, and sponsored placements. Export structured listings, source URLs, IDs, and available details to CSV, JSON, or Excel for handmade marketplace price and placement research.

Pricing

$6.40 / 1,000 results

Rating

0.0

(0)

Developer

MLG Data

MLG Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Share

Scrape Etsy public marketplace listings, prices, shops, and sponsored placements from public pages and export Etsy data to CSV, JSON, or Excel. This Etsy API alternative turns repeatable inputs into structured listings for handmade marketplace price and placement research.

Each dataset row represents a public listing or a documented alternate record type. The output includes source identifiers and links where available, so you can verify a row, compare later runs, and distinguish missing source data from an omitted column.

What data can you extract from Etsy?

The dataset schema defines every field below. Examples come from one successful published run; null means that field was not exposed for that particular record. Availability may differ by input mode, page, and record type.

FieldDescriptionExample
listingIdListing identifier.1371848548
titleProduct title.Handmade Ceramic Mug - Large Size
listingUrlDirect product link.https://www.etsy.com/listing/1371848548/handmade-ceramic-mug-large-size
imageMain product image.https://i.etsystatic.com/5855415/r/il/27d5bf/4535708269/il_fullxfull.45357082…
shopIdShop identifier.5855415
shopNameShop display name.Neherpottery
shopUrlShop page link.https://www.etsy.com/shop/Neherpottery
priceOriginal price, or current price when no reduction is shown.35
discountedPriceCurrent reduced price when the listing is on sale.null
discountPctPercentage reduction from the original price.null
currencyCodeCurrency code supplied by product data.USD
onSaleWhether a reduced price is shown.false
isFreeShippingWhether the card displays free shipping.true
runningAdsWhether the listing is marked as sponsored.true
adSlotVisible position on this page for a sponsored listing.1
isBestsellerWhether the card displays a bestseller badge.false
isStarSellerWhether the card displays a star seller badge.false
isTopRatedUnavailable on the market page; null.null
shopRatingRating shown on the listing card.4.95
shopRatingCountApproximate review count displayed on the listing card.3800
shopSalesUnavailable on the market page; null.null
shopSinceUnavailable on the market page; null.null
sellerLocationUnavailable on the market page; null.null
shipsFromShipping origin label when displayed.null
inCartCountUnavailable on the market page; null.null
boughtLast24hUnavailable on the market page; null.null
lastSaleDateUnavailable on the market page; null.null
isScarceUnavailable on the market page; null.null
quantityUnavailable on the market page; null.null
isShopWideSaleUnavailable on the market page; null.null
isMadeToOrderUnavailable on the market page; null.null
isDigitalUnavailable on the market page; null.null
isHandmadeUnavailable on the market page; null.null
isCustomizableUnavailable on the market page; null.null
isPersonalizableUnavailable on the market page; null.null
minProcessingDaysUnavailable on the market page; null.null
maxProcessingDaysUnavailable on the market page; null.null
photoCountUnavailable on the market page; null.null
createDateUnavailable on the market page; null.null
locationUnavailable on the market page; null.null
sourceQueryInput phrase that found the listing.ceramic mug
sourcePageMarket page number.1
searchRankPosition among listing cards on that page.1
scrapedAtCollection time in UTC.2026-09-26T10:28:59.178363+00:00

Use the identifier and URL fields as your join keys before comparing snapshots. Fields that describe a page, search, category, author, or tournament establish where the record came from; keep them when you export a subset. Numeric values and boolean flags reflect the public page at collection time, not a permanent claim about the underlying item.

How to scrape Etsy

  1. Open the actor input form and choose a narrow public source: a search phrase, page URL, item URL, or ID supported by the input fields below.
  2. Set the relevant per-source page or result limit and the total item limit. Start with a small sample to check which optional fields the public source exposes.
  3. Run the actor. Its dataset contains one structured row per saved result; inspect the first rows and their source links for the chosen input.
  4. Download the dataset as JSON, CSV, or Excel. Preserve identifiers when combining runs so repeated results can be deduplicated.

For this actor, each phrase opens a public market page; observed pages exposed about eight listing cards. Search and individual listing pages were blocked during discovery, so several pages or phrases may be needed for coverage.

Input

Use only the parameters relevant to your collection mode. An omitted optional filter uses the schema default shown here; an empty array, zero, and an omitted value can have different meanings, so keep intentional settings in your saved input.

| Parameter | Type | Default | Description | | --- | --- | --- | | queries | array | No default; example ["ceramic mug","linen apron"] | One or more shopper phrases; each phrase opens its public market page. Short phrases work best. | | maxPages | integer | 5 | Number of market pages per phrase. These pages showed about eight listing cards each during testing. | | maxResults | integer | 0 | Stop after this many saved listings across all phrases. Set to 0 for no total cap. | | sort | string | score | Order listings using a sort supported by the public market pages. | | country | string | US | Destination country filter. Prices remain in the currency returned by the page. | | minPrice | number | None | Keep listings whose current price is at least this amount in the returned currency. | | maxPrice | number | None | Keep listings whose current price is at most this amount in the returned currency. | | onSaleOnly | boolean | false | Keep listings with a visible reduced price. | | freeShippingOnly | boolean | false | Keep listings marked with free shipping on the market page. | | includeAds | boolean | true | Include sponsored placements and report their visible page positions. | | dedupeAcrossQueries | boolean | true | Save each listing once when it appears under multiple phrases. The first phrase is retained. | | proxyConfiguration | object | {"useApifyProxy":true} | Network routing for the page requests. |

Example input based on the published golden run (long URL lists are shortened):

{
"queries": [
"ceramic mug"
],
"maxPages": 5,
"maxResults": 40,
"sort": "score",
"country": "US"
}

The example is a starting shape, not a guarantee of a particular result count. Source inventory and page accessibility change. When you need repeatable comparisons, save the exact input JSON with the run date and inspect the returned source or record-type field.

Output example

The following is one real item from a successful published dataset. Long text and media arrays are shortened for readability; the actual dataset keeps the original values and all schema fields.

{
"listingId": 1371848548,
"title": "Handmade Ceramic Mug - Large Size",
"listingUrl": "https://www.etsy.com/listing/1371848548/handmade-ceramic-mug-large-size",
"image": "https://i.etsystatic.com/5855415/r/il/27d5bf/4535708269/il_fullxfull.4535708269_49vd.jpg",
"shopId": 5855415,
"shopName": "Neherpottery",
"shopUrl": "https://www.etsy.com/shop/Neherpottery",
"price": 35,
"currencyCode": "USD",
"onSale": false,
"isFreeShipping": true,
"runningAds": true,
"adSlot": 1,
"isBestseller": false,
"isStarSeller": false,
"shopRating": 4.95,
"shopRatingCount": 3800,
"sourceQuery": "ceramic mug",
"sourcePage": 1,
"searchRank": 1,
"scrapedAt": "2026-09-26T10:28:59.178363+00:00"
}

Use cases

  • Marketplace sellers can benchmark comparable listing prices and visible promotions.
  • Search analysts can distinguish paid placements from organic results by runningAds and adSlot.
  • Retail researchers can monitor public shop ratings and free-shipping flags.
  • Catalog teams can identify overlapping listings returned for several shopper phrases.

The strongest analyses keep source context. A field such as price, rating, engagement, or rank has meaning only with its associated item, query, date, and public URL. Keep the raw export and create a separate cleaned view for charts or alerts.

How much does it cost to scrape Etsy?

The price is $6.40 per 1,000 saved results. Platform usage is included. The charge scales with output rows, so a restrictive filter or inaccessible page can produce fewer billable results than the requested maximum.

  • 100 listings: $0.64. This is useful for checking a small cohort and confirming which optional fields are present.
  • 1,000 listings: $6.40. This is the reference price for a larger export.
  • 5,000 listings: $32.00. Reaching this size may require multiple focused sources or scheduled runs, depending on public inventory and source caps.

Compute any other estimate as saved result count × $6.40 / 1,000. A maximum input is a ceiling, not a purchase of that many rows. For planning, use the actual saved-item count from an initial representative run.

Tips for best results

Use short shopper phrases and consistent country and sort when comparing runs. Set includeAds deliberately: sponsored rows are marked runningAds and adSlot. Use dedupeAcrossQueries when overlapping phrases could return the same listing.

Collect a small baseline first, record the exact input and date, and inspect both a typical row and a sparse row. Expand by adding focused sources instead of assuming one broad input can reveal the full public inventory. When comparing two runs, match stable IDs or canonical URLs and use the same filters so changes reflect the source rather than a changed query.

Export the full JSON when nested arrays or objects matter. CSV and Excel are convenient for sorting and joins, but nested structures may need flattening before spreadsheet analysis. Keep numeric fields numeric and preserve source URLs as text; do not infer a zero from a null.

Limits

Many listing-detail fields are null because the public market card does not expose them. A null is unavailable data, not evidence that a product lacks a feature. Prices remain in the currency returned by the page.

Public pages can change, disappear, or expose different fields for different records. The schema is a list of possible output columns, not a promise that each column is filled in each row. The maxItems-style input limits cap saved results; they do not bypass source pagination, public visibility, or a site-specific result ceiling.

Treat a saved result as a snapshot. If a later run returns fewer rows, first compare the input, source access, and public inventory before concluding that the underlying market changed. If you need an audit trail, retain the source URL, stable identifier, and run timestamp with the export.

Use with AI agents (MCP)

An agent can supply the documented input JSON, run this actor, and work from its dataset. Ask it to keep source links and identify null values explicitly when summarizing results. Example prompts:

Run Etsy Scraper for the sample input above. Return the first 20 listings with their source URLs and the fields needed for handmade marketplace price and placement research. Mark unavailable fields as null.

Schedule a repeat Etsy collection with the same filters. Compare records by stable ID or canonical URL and report only new, removed, or changed public values.

FAQ

This actor collects public data. Check the site’s terms, applicable law, and the rights of people whose data appears in your export. Follow GDPR and other privacy rules where relevant; do not use personal data for misuse, intrusive profiling, or unauthorized contact.

Do I need to configure proxies?

The input includes proxyConfiguration and defaults to Apify Proxy. Usually the default is enough to start. Availability can vary by page and region; changing network settings cannot make private or login-only information public.

How fast will a run finish?

Duration depends on the number of inputs, pages, detail requests, and source responses. A small sample is the best way to measure your workload. Increase the limits gradually, then use the observed run duration for scheduling and monitoring.

Can I schedule and monitor recurring runs?

Yes. Save the input and schedule recurring runs in Apify. Monitor run status, item count, and any missing-field changes; store the run date alongside exports when comparing snapshots.

Can I export to Google Sheets or Excel?

Yes. Download CSV or Excel from the dataset, or pass JSON to a spreadsheet integration. For nested fields, flatten the specific child values you need rather than losing the original JSON.

What if a field is empty?

An empty or null field means it was not available from that public source record in that run. Check the source URL, input mode, and record type. Do not replace missing prices, counts, dates, or flags with zero unless your own analysis has a documented rule for doing so.

Why are shopSales and production fields null?

The public market pages used by this actor do not expose those listing-detail attributes. The schema preserves nulls rather than guessing them.

Integrations

Use the Apify API to start runs and retrieve the dataset, webhooks to react when a run finishes, or Zapier, Make, and n8n to route records into other systems. Google Sheets supports lightweight review, while scheduled runs provide repeat snapshots. Keep the raw JSON when downstream workflows need nested fields or exact null values.

Support

Open an issue on the Issues tab; we reply within 24h and add fields on request.