Tony Wang6 Min. LesezeitEtsy scrapen 2026: API & Python-Anleitung
Etsy 2026 scrapen: Listing-, Shop- und Review-Daten per API — DIY, No-Code oder strukturierte API, plus was Etsys offizielle API v3 wirklich blockt.
Am schnellsten scrapst du Etsy 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON für Listings, Shops und Reviews zurückgibt — statt Etsys Produktseiten selbst zu parsen oder in einer App-Review-Warteschlange zu warten. Etsy ist in dieser Serie ein Sonderfall: Es veröffentlicht zwar eine offizielle Open API v3, aber ein funktionierender Key setzt einen Freigabeprozess voraus, und die Terms of Use verbieten Scraping separat und ausdrücklich. Dieser Guide zeigt dir alle drei Ansätze: was jeder liefert und wo die Grenzen der offiziellen API tatsächlich liegen.
Warum Etsy scrapen?
Etsys Listing-, Shop- und Review-Daten treiben an:
- Preis- und Trendrecherche — verfolgen, wie Handmade-/Vintage-Kategorien im Verhältnis zur Nachfrage bepreist sind, nach Keyword oder Nische.
- Seller- und Shop-Monitoring — beobachten, wie sich Katalog, Verkaufszahl und Bewertung eines Shops über die Zeit entwickeln.
- Wettbewerbs-Produktrecherche — sehen, was in einer Nische läuft, bevor du einen Shop oder eine Produktlinie startest.
- Review- und Reputations-Analytics — aggregierte Bewertung und Review-Volumen über Listings oder einen ganzen Shop hinweg.
- Marketplace-Aggregation — Etsy-Bestand mit anderen Marktplätzen kombinieren für einen plattformübergreifenden Blick auf Handmade/Vintage.
Ist es legal, Etsy zu scrapen?
Option 1: DIY in Python (und warum das scheitert)
Etsys Listing- und Shop-Seiten rendern aus eingebettetem JSON statt aus einfachem, stabilem Markup, also muss ein DIY-Scraper diesen Blob aus der Seite parsen:
import requests
from bs4 import BeautifulSoup
resp = requests.get(
"https://www.etsy.com/listing/1044347578/",
headers={"User-Agent": "Mozilla/5.0 (compatible; research-bot/1.0)"},
)
soup = BeautifulSoup(resp.text, "html.parser")
# Price, quantity, and shop data live inside a server-rendered
# state blob, not selectable markup — you parse JSON out of a <script> tag
Es funktioniert in der Demo und geht dann kaputt:
- Die ToS ist eindeutig. Etsys Terms of Use nennen Crawling, Scraping und Spidering direkt, und die
robots.txtblockt das Crawlen des URL-Musters für Suchergebnisse (/search?*q=) für nicht gelistete User-Agents — das ist kein Grenzfall. - Auch der sanktionierte Weg hat sein eigenes Nadelöhr. Etsys Open API v3 existiert, aber eine Personal App braucht erst eine Freigabe (typischerweise 24-48 Stunden), bevor überhaupt irgendetwas funktioniert, und alles über den eigenen Shop hinaus — ein Recherche-Tool, ein Aggregator — braucht obendrauf einen separat geprüften Commercial-Access-Antrag.
- Auch nach der Freigabe eine harte Tagesobergrenze. Die offizielle API deckelt eine Standard-App standardmäßig auf 10.000 Requests und 10 Queries/Sekunde pro Tag; mehr geht nur, wenn du Etsys Developer-Team per E-Mail mit einer Use-Case-Beschreibung und einer QPD/QPS-Schätzung anschreibst.
- Jüngste Verschärfung beim Datenschutz für Käuferdaten. Etsy hat eingeschränkt, welche käuferbezogenen Felder (z. B. die vollständige Käufer-E-Mail) Drittanbieter-Apps über die offizielle API abrufen können, zusätzlich zum bestehenden App-Review — ein Trend, der Ad-hoc-DIY-Zugriff auf diese Daten riskanter macht, nicht einfacher.
- So oder so kein stabiles Markup. Listing-Seiten liefern serverseitig gerendertes JSON in einem Script-Tag aus; die Struktur verschiebt sich bei Redesigns und bricht einen Parser ohne Vorwarnung.
Option 2: No-Code-Tools
Marketplace-Scraper-Actors gibt es für einmalige Etsy-Abzüge, sie überspringen die Wartezeit auf die App-Freigabe, erben aber dasselbe ToS-Risiko wie DIY und lösen das Problem des laufenden Monitorings nicht — du führst immer wieder ein Punkt-Tool aus, statt einen stabilen Endpoint aufzurufen.
Option 3: Eine strukturierte Etsy-API
Für einen wiederholbaren Workflow liefert eine Etsy scraping API normalisiertes JSON für Listings, Shops und Reviews — ohne Wartezeit auf ein App-Review und ohne Seiten-Parsing. Suche nach Keyword:
curl "https://api.crawlora.net/api/v1/etsy/search?q=handmade+mug" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "handmade mug",
"offset": 0,
"count": 112886,
"results": [
{
"listing_id": "4474501681",
"title": "Custom Mermaid Mug, Crystal Handle, Mothers Day Gift",
"shop_id": "7894049",
"shop_name": "MerakiDesigned",
"price": "5371901",
"price_int": 5371901,
"currency": "VND",
"url": "https://www.etsy.com/listing/4474501681/handmade-ceramic-mermaid-mug-gold",
"quantity": 7,
"is_sold_out": false
}
]
}
}
Beachte: currency spiegelt das Render-Locale des Requests wider (oben VND, nicht USD) — lies es pro Ergebnis aus, statt eine Währung anzunehmen. Hol Listing-Detail, Shop-Profil und Reviews in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/etsy"
hits = requests.get(f"{base}/search", headers=h, params={"q": "handmade mug"}).json()["data"]["results"]
listing_id = hits[0]["listing_id"]
shop_id = hits[0]["shop_id"]
listing = requests.get(f"{base}/listing/{listing_id}", headers=h).json()["data"]
reviews = requests.get(f"{base}/listing/{listing_id}/reviews", headers=h, params={"offset": 0}).json()["data"]
shop = requests.get(f"{base}/shop/{shop_id}", headers=h).json()["data"]
shop_listings = requests.get(f"{base}/shop/{shop_id}/listings", headers=h, params={"limit": 25}).json()["data"]
Listing-Detail ist normalisiertes JSON (echte Felder — prüfe die docs):
{
"code": 200,
"msg": "OK",
"data": {
"listing_id": "1044347578",
"title": "Handmade Ceramic Mug",
"price": "$29.99",
"price_int": 2999,
"currency": "USD",
"shop_id": "87654321",
"shop_name": "gaguatelier",
"is_sold_out": false,
"category_name": "Mugs",
"materials": ["Ceramic", "Glaze"],
"quantity": 4,
"favorites": 812,
"views": 15230,
"when_made": "made_to_order",
"state": "active"
}
}
Das Shop-Profil liefert Bewertungs- und Verkaufszahl-Felder fürs Seller-Monitoring:
{
"data": {
"shop_id": "87654321",
"shop_name": "gaguatelier",
"seller_name": "Victoria",
"average_rating": 4.9,
"reviews_count": 363,
"sold_count": 1900,
"is_star_seller": true
}
}
Reviews (sowohl /etsy/listing/{id}/reviews als auch /etsy/shop/{id}/reviews) liefern avg_rating, total_rating_count und ein paginiertes reviews-Array mit buyer_name, rating und text pro Eintrag — denselben Vornamen und Text, den Etsy öffentlich neben jeder Review zeigt. Speichere eine Zeile pro Listing (oder pro Shop) und führe es nach Zeitplan erneut aus, um Preis-, Mengen- und Bewertungsänderungen zu verfolgen.
Was du sammeln kannst
Öffentliche Listing- und Shop-Daten: Suchergebnisse (listing_id, Titel, Shop, Preis, Währung, Menge, Ausverkauft-Status); volle Listing-Details (Kategorie, Beschreibung, Materialien, Tags, Favoriten, Aufrufe, when_made, Bilder); Shop-Profile (Verkäufername, Durchschnittsbewertung, Anzahl Reviews, Verkaufszahl, Star-Seller-Status, Headline); Shop-Kataloge über /shop/{id}/listings; Shop-Discovery über /shop/search (Name, Standort, Anzahl aktiver Listings); und paginierte Reviews mit Bewertung, Text und Vorname des Käufers, für Listings und Shops gleichermaßen. Nur öffentliche Marketplace-Daten.
Grenzen und typische Herausforderungen
- Die Währung ist nicht fix.
price/price_int/currencyspiegeln das Render-Locale des Requests wider — liescurrencypro Ergebnis aus, statt USD anzunehmen. - Reviewer-Namen sind personenbezogene Daten.
buyer_nameist eine echte (wenn auch partielle) Identität — nutze es für anzeigekonsistente Aggregation, nicht um eine kontaktierbare Käuferliste aufzubauen, und respektiere DSGVO/CCPA-artige Löschanfragen, falls du es speicherst. - Kein offizieller Bulk-Export für Drittanbieter. Etsys eigene Open API v3 ist der sanktionierte Weg für alle, die eine Produktionsintegration im großen Maßstab bauen; diese API eignet sich am besten für Abzüge im Recherche-Maßstab, rein lesend, statt eine freigegebene kommerzielle Integration zu ersetzen.
- Bewertung und Menge bewegen sich bei beliebten Shops schnell. Bestseller werden innerhalb von Tagen nachgefüllt oder ausverkauft — hol die Daten nach Zeitplan erneut, statt einem Snapshot zu vertrauen.
- Nur öffentliche Daten. Das sind Listing- und Shop-Seiten-Daten, kein Weg, um an die privaten Kontaktdaten eines Sellers zu kommen oder Etsys eigenes Buyer-Messaging-System zu umgehen.
Wo das eingesetzt wird
- Preisrecherche — verfolgen, wie eine Nische oder ein Keyword über aktive Listings hinweg bepreist ist.
- Shop-Monitoring — Bewertung, Verkaufszahl und Katalog-Größe eines Konkurrenz- oder Lieferanten-Shops über die Zeit beobachten.
- Review-Analytics — aggregierte Bewertungstrends pro Listing oder Shop fürs Reputations-Tracking.
Sources
Leg los mit dem Sammeln
Probier es zuerst kostenlos aus: jage eine beliebige öffentliche URL durch den Free Web Scraper oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste die Search-, Listing- und Shop-Endpoints im Playground, sieh dir das Schema in den API docs an und wirf einen Blick aufs pricing. Etsy ist das Handmade- und Vintage-Pendant zu den auf Shopify aufgebauten Storefronts aus how to scrape Shopify stores und der Cross-Merchant-Discovery-Layer aus how to scrape Shop app — kombiniere alle drei für ein vollständigeres Bild des unabhängigen Commerce. Für die Resale-Seite desselben Handmade-/Secondhand-Markts siehe how to scrape eBay. Siehe auch how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Hat Etsy eine offizielle API?
Ja — Etsys Open API v3 ist eine echte, dokumentierte API, aber sie setzt eine freigegebene App voraus (erst die Personal-App-Freigabe, dann eine manuell geprüfte Commercial-Access-Stufe für alles über den eigenen Shop hinaus) und deckelt Standard-Apps auf 10.000 Requests/Tag.
Ist es legal, Etsy zu scrapen?
Etsys Terms of Use verbieten Crawling, Scraping oder Spidering ihrer Seiten ohne Erlaubnis ausdrücklich, und die robots.txt blockt das Crawlen des URL-Musters für Suchergebnisse für allgemeine Crawler. Öffentliche Fakten sind nicht urheberrechtlich geschützt, aber automatisierte Datenerhebung außerhalb der offiziellen API birgt reales ToS-Risiko — siehe is web scraping legal für den allgemeinen Rahmen.
Wie durchsuche ich Etsy-Listings mit einer API?
Schick ein Keyword an einen /etsy/search-Endpoint und bekomm normalisierte Listing-Cards zurück (listing_id, title, shop, price, currency, quantity) als JSON — kein HTML-Parsing nötig.
Was enthält das Etsy-Listing-Detail?
Titel, Preis, Währung, Menge, Kategorie, Beschreibung, Materialien, Tags, Favoriten, Aufrufe, when_made und Ausverkauft-Status, verknüpft über listing_id.
Kann ich den kompletten Katalog eines Etsy-Shops abrufen?
Ja — /etsy/shop/{id}/listings liefert den Listing-Katalog eines Shops in derselben normalisierten Listing-Card-Form wie die Suchergebnisse, und /etsy/shop/search findet Shops nach Namen.
Sind Etsy-Reviews enthalten, und sind das personenbezogene Daten?
Sowohl /etsy/listing/{id}/reviews als auch /etsy/shop/{id}/reviews liefern Bewertung, Review-Text und ein buyer_name-Feld — denselben Vornamen, den Etsy öffentlich zeigt. Behandle buyer_name als personenbezogene Daten nach DSGVO/CCPA und nutze es für aggregierte Bewertungsanalyse, nicht um eine kontaktierbare Käuferliste zu bauen.
Variiert die Währung je nach Request?
Ja — price, price_int und currency spiegeln das Render-Locale des Requests wider (zum Beispiel VND statt USD), lies also das currency-Feld pro Ergebnis aus, statt eine feste Währung anzunehmen.