collections /etsy /listings-scraper
L

Etsy Listings Scraper

astravalabs/etsy-listings-scraper

Submit up to 50 keywords and collect Etsy search results in bulk. Every row preserves its keyword, overall and organic position, sponsored slot, localized price, shop signals, badges, product type, and media indicators without visiting every product page.

// run this actor

Use the Apify CLI for a quick local run, or the HTTP API from any language or automation platform.

Option 01 / Apify CLICLI docs ↗
apify call astravalabs/etsy-listings-scraper --input '{"keywords":["mushroom lamp","cottagecore lamp"],"maxPages":5,"maxTotalResults":1000,"country":"US"}'
Option 02 / HTTP API + cURLAPI reference ↗
# Set API token
API_TOKEN=<YOUR_API_TOKEN>

# Prepare Actor input
cat > input.json << 'EOF'
{
  "keywords": [
    "mushroom lamp",
    "cottagecore lamp"
  ],
  "maxPages": 5,
  "maxTotalResults": 1000,
  "country": "US"
}
EOF

# Run the Actor using the HTTP API
# Full API reference: https://docs.apify.com/api/v2
curl "https://api.apify.com/v2/acts/astravalabs~etsy-listings-scraper/runs?token=$API_TOKEN" \
  -X POST \
  -d @input.json \
  -H 'Content-Type: application/json'

// Replace <YOUR_API_TOKEN> before running the cURL example. Keep tokens out of committed files.

inputtypebehavior
keywords *string[]1–50 Etsy search terms.
maxPagesintegerPages per keyword, from 1 to 30. Default: 5.
countrystringOne of 32 localization markets. Default: US.
minPrice / maxPricenumberPrice bounds in the selected market's currency.
maxResultsintegerOptional result ceiling per keyword.
maxTotalResultsintegerExact result ceiling across the run.
sortOrderenumRelevance, price, reviews, or newest. Default: most_relevant.
listingTypeenumAll, digital, or physical listings. Default: all.
filtersbooleanSale, shipping, seller, customization, Etsy's Pick, and sponsored filters. Default: false.

// output — 36 top-level fields per listing

search context
keywordstringSearch term that surfaced the listing
pageintCaptured Etsy result page
rankintOverall result position
organic_rankint?Position excluding sponsored results
total_result_countint?Total Etsy displayed for the query
listing and shop
listing_idstringEtsy listing identifier
titlestringSearch-card title
urlstringDirect listing URL
image_urlstringSearch-card image
shop_name / shop_id / shop_urlmixedSeller identity
shop_rating / shop_review_countnumberShop reputation
shop_age_yearsfloat?Years on Etsy
pricing and placement
price / original_pricefloat?Current and pre-discount price
currencystringLocalized ISO currency
discount_pctfloat?Displayed discount percentage
is_on_sale / is_free_shippingboolPricing and shipping flags
is_ad / ad_slotmixedSponsored status and page slot
product signals
badgesbool × 5Bestseller, popular, Etsy's Pick, Star Seller, limited stock
is_digital / has_personalizationboolProduct-type signals
has_video / video_urlmixedSearch-card video data
color_variant_count / color_variantsmixedVisible color swatches
ships_fromstring?Sparse localized origin label
scraped_atdatetimeUTC collection timestamp

// use cases

  • Etsy niche and ranking research
  • Organic versus sponsored placement mapping
  • Pricing and discount teardowns
  • Localized market comparisons

// boundaries

  • Search-result pages do not contain full descriptions, tags, materials, galleries, or complete reviews.
  • Etsy usually caps a keyword index at roughly 20–22 pages even when more are requested.
measured performance / 2026-07-17

A measured 5-page single-keyword run returned 258 listings in 9.4 seconds; the 50-keyword maximum-scale run returned 63,840 in 5m 29.2s.

last tested / 2026-07-18

What “last tested” means

The published input contract, output field list, pricing unit, and documentation were checked against the current actor, and a sample run completed on the date shown. This is a dated product check, not an uptime guarantee; public source behavior can change after testing.

Inspect representative JSON →

// sanitized illustrative values; field names and nesting follow the published output contract

// use in a workflow

// research using this actor

// companion actors