# Scraping Etsy Product Data, Categories, and Reviews with Python > Source: https://scrape.do/blog/etsy-scraping/ Published: 2025-10-30 ยท Updated: 2026-07-03 ยท Authors: Serhat Kurtulus ยท Categories: Scraping Use Cases Etsy is the \#1 website for selling arts and crafts with millions of unique handmade and vintage products. But scraping it is harder than your average e-com platform. Etsy sits behind DataDome's bot protection, blocks most proxy services instantly, and geo-restricts data based on your IP location. Most scrapers fail before they can pull a single product listing. In this guide, we'll bypass those obstacles and scrape product details from Etsy using Python and Scrape.do. [Find the complete working code on GitHub โš™](https://github.com/scrape-do/scrapedo-scrapers/tree/main/etsy-scraper) ## Why Is Scraping Etsy Difficult? Etsy doesn't make it easy to extract data programmatically. Between heavy bot detection and IP-based filtering, you'll need more than basic requests and free proxies to pull product information at scale. ### DataDome Protection Etsy is protected by DataDome, one of the most aggressive anti-bot systems available. They're proud of it too; Etsy even has [a public success story on DataDome's site](https://datadome.co/customers-stories/etsy-stops-unwanted-traffic-reduces-computing-costs-with-datadome-google/) highlighting how they block unwanted traffic and reduce computing costs. DataDome analyzes your TLS fingerprint, browser behavior, mouse movements, and request patterns. If anything looks automated, you're blocked instantly with a challenge page or a hard 403. ![DataDome block page on Etsy](/uploads/blog/etsy-datadome-block_hubf71eea8e1895f3fdaaed73bfef222ef_26759_1200x0_resize_q80_h2_box_3.webp) This means simple Python `requests` won't work, and most headless browser setups get flagged within seconds. ### Basic Proxies Provide Limited Access Free or low-quality proxies aren't completely blocked by Etsy, but they won't get you far either. You can usually access the homepage and browse category pages with datacenter IPs, but the moment you try to scrape search results tailored to a specific country or load product pages with pricing and shipping details, you'll hit a wall. For reliable access to product data, reviews, and localized pricing, you need high-quality residential proxies that mimic real user traffic from the target region. ### How Scrape.do Bypasses Etsy Scrape.do handles Etsy's defenses by: * **Rotating residential proxies** from real ISPs to avoid DataDome fingerprinting * **Spoofing TLS fingerprints** to pass bot detection checks * **Managing sessions automatically** so requests appear as organic browsing behavior * **Geo-targeting requests** with `geoCode` to access location-specific pricing and availability This means you send a single API request and get clean HTML back, without worrying about blocks or proxy rotation. ## Scrape Product Data from Etsy Product Pages We'll scrape this [birth flower ring listing](https://www.etsy.com/listing/4306368113/birth-flower-ring-925-sterling-silver) and extract all the product details embedded in its structured data. > **Note:** This guide originally used a wooden sign listing (`/listing/468670752/`) that has since been removed from Etsy, so its page now returns "This item is unavailable" with no product data. We've replaced it with the active birth flower ring listing above. If any listing you test goes offline, just swap in another live product URL and the same code works. ![Example Etsy product page](/uploads/blog/etsy-product-page-example_hu9968890db78db85a974e5fcd0d52f8fb_652015_1200x0_resize_q80_h2_box_3.webp) Etsy embeds full product information inside JSON-LD schema blocks in the HTML. This makes scraping much cleaner than parsing individual DOM elements, because the data is already structured and ready to parse. We'll extract: * Product name and description * Shop/brand name * Category * Images * Price and currency * Availability * Rating and review count ### Setup and Prerequisites Before we start scraping, we need to install the required libraries and set up our Scrape.do API credentials. Install the necessary Python packages: ```bash pip install requests beautifulsoup4 ``` These libraries handle HTTP requests and HTML parsing. Next, sign up at [Scrape.do](https://dashboard.scrape.do/signup) to get your API token. You'll get 1000 free credits every month to start scraping immediately. Once you're logged in, copy your token from the top of the dashboard: ![scrape.do token](/uploads/blog/scrape-do-token_hu9c2649c4b36428f89688ab9d0acb0a55_138939_1200x0_resize_q80_h2_box_3.webp) Now we'll build the request to fetch the product page. We're using `super=true` for premium residential proxies, `geoCode=us` to get US-specific pricing and shipping details. > We're also passing `"sd-x-detected-locale": "USD|en-US|US"` as extra headers created specifically for Etsy through Scrape.do. ```python import requests import urllib.parse from bs4 import BeautifulSoup import json import re # Configuration token = "" product_url = "https://www.etsy.com/listing/4306368113/birth-flower-ring-925-sterling-silver" # Make API request encoded_url = urllib.parse.quote_plus(product_url) api_url = f"https://api.scrape.do?token={token}&url={encoded_url}&geoCode=us&super=true&extraHeaders=true" headers = {"sd-x-detected-locale": "USD|en-US|US"} response = requests.get(api_url, headers=headers) soup = BeautifulSoup(response.text, "html.parser") ``` This sends the request through Scrape.do's infrastructure, bypassing DataDome and returning the fully rendered HTML. The `extraHeaders` parameter ensures our custom locale header is included in the request. ### Extract Product Data from JSON Etsy includes structured product data inside `