Scraping Central is reader-supported. When you buy through links on our site, we may earn an affiliate commission.

Guide

How to Scrape Etsy Product Listings

Learn how to scrape Etsy for product data, pricing, reviews, and seller information. Python guide with practical code examples.

Etsy is the leading marketplace for handmade, vintage, and unique goods. Scraping Etsy helps with market research, competitive pricing, and trend analysis.

What Data to Extract

  • Product titles and descriptions
  • Prices and shipping costs
  • Seller information and ratings
  • Review counts and text
  • Product images
  • Categories and tags
  • Sales volume indicators

Method 1: Etsy Open API

Etsy provides an official API (v3) for accessing shop and listing data.

import requests

API_KEY = "YOUR_ETSY_API_KEY"
headers = {"x-api-key": API_KEY}

# Search for listings
url = "https://openapi.etsy.com/v3/application/listings/active"
params = {"keywords": "handmade candles", "limit": 25}

resp = requests.get(url, headers=headers, params=params)
listings = resp.json().get("results", [])

Pros: Official, structured data, reliable. Cons: Requires API key approval, rate limited, some data not available.

Method 2: Web Scraping

For data not available via the API, scrape Etsy's website directly.

import requests
from bs4 import BeautifulSoup

API_KEY = "YOUR_SCRAPERAPI_KEY"
url = "https://www.etsy.com/search?q=wooden+toys"

resp = requests.get(
    f"http://api.scraperapi.com?api_key={API_KEY}&url={url}&render=true"
)
soup = BeautifulSoup(resp.text, "html.parser")

ScraperAPI is recommended because Etsy uses JavaScript rendering and anti-bot measures.

Parsing Search Results

listings = soup.select("[data-search-results] .v2-listing-card")
for listing in listings:
    title = listing.select_one(".v2-listing-card__title")
    price = listing.select_one(".currency-value")
    shop = listing.select_one(".v2-listing-card__shop")
    
    print(f"Title: {title.text.strip() if title else 'N/A'}")
    print(f"Price: {price.text.strip() if price else 'N/A'}")
    print(f"Shop: {shop.text.strip() if shop else 'N/A'}")

Best Practices

  1. Start with the official API, Apply for a key at developers.etsy.com
  2. Use ScrapingAnt for fallback, When the API does not cover your needs
  3. Track trending items, Monitor search results over time
  4. Respect sellers, Do not use data to copy or undercut handmade sellers
  5. Handle pagination, Etsy search results use page and ref parameters
  6. Parse review data, Reviews contain valuable sentiment and product quality signals