Tony Wang4 Min. LesezeitShop App (shop.app) scrapen in 2026 (API & Python)
Shop.app 2026 scrapen — Product-Suche, Details und Reviews über Shopify-Händler hinweg — DIY, No-Code oder strukturierte API, samt rechtlichen Grundlagen.
Am schnellsten scrapst du Shop.app 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON zurückgibt — store-übergreifende Product-Suche, Product-Detail, Reviews und Shop-Profile — statt Shop.apps interne GraphQL-App zu reverse-engineeren. Shop.app ist Shopifys Consumer-Marktplatz und bündelt daher Products aus Tausenden Shopify-Händlern an einem Ort. Dieser Guide behandelt alle drei Ansätze, was jeder liefert, wo jeder scheitert, und die rechtlichen Grundlagen.
Warum Shop.app scrapen?
Weil er viele Händler bündelt, ist Shop.app nützlich für:
- Store-übergreifende Product- & Wettbewerber-Discovery — finde Products und Shops im gesamten Shopify-Ökosystem, nicht nur in einem Store.
- Merchandising- & Preisrecherche — vergleiche Preise und Sortimente über Händler hinweg.
- Review- & Sentiment-Analyse — lies Product- und Shop-Reviews im großen Stil.
- Trend-Spotting — spüre Kategorien und Deals auf, die an Fahrt gewinnen.
Ist es legal, Shop.app zu scrapen?
Option 1: DIY in Python (und warum es scheitert)
Shop.app ist eine JavaScript-App, die von einer internen GraphQL-API gestützt wird, also reverse-engineert ein DIY-Scraper sie:
import requests
# shop.app renders client-side from an internal GraphQL API behind request tokens
resp = requests.post("https://shop.app/api/graphql", json={"query": "...", "variables": {...}})
Es funktioniert in der Demo und scheitert dann:
- Keine offizielle öffentliche API. Shop.app veröffentlicht keine Entwickler-API, also gibt es keinen dokumentierten Endpoint und keinen Key — du replizierst die privaten Calls der Consumer-App.
- Einzel-Store vs. store-übergreifend. Ein einzelner Shopify-Store stellt eine öffentliche
/products.jsonbereit (das ist der Weg in how to scrape Shopify stores), aber Shop.apps Wert liegt in der store-übergreifenden Aggregation, und dafür gibt es keinen entsprechenden offenen Endpoint. - Tokens und Anti-Bot. Die internen GraphQL-Calls brauchen Request-Tokens und lösen Anti-Bot-Abwehr aus, also brauchst du realistische Header, Proxys und ständige Pflege.
- Driftendes internes Schema. Das private GraphQL-Schema ändert sich ohne Vorwarnung und bricht replizierte Queries.
Option 2: No-Code-Tools
"Shop.app-Scraper"-Actors aus Marketplaces exportieren CSV/JSON und eignen sich für einmalige Abrufe, aber in einer In-Product-Pipeline sind sie umständlich und erben dieselbe Fragilität der internen API.
Option 3: Eine strukturierte Shop.app-API
Für wiederholbare Workflows liefert eine Shop.app scraping API normalisiertes JSON, ohne dass du GraphQL pflegen musst. Suche über Stores hinweg:
curl "https://api.crawlora.net/api/v1/shop-app/search?query=sneakers" \
-H "x-api-key: $CRAWLORA_API_KEY"
Löse dann eine Product-id auf und hol Detail und Reviews in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/shop-app"
products = requests.get(f"{base}/search", headers=h, params={"query": "sneakers", "limit": 20}).json()["data"]["products"]
pid = products[0]["id"]
detail = requests.get(f"{base}/products/{pid}", headers=h).json()["data"]["product"]
reviews = requests.get(f"{base}/products/{pid}/reviews", headers=h).json()["data"]["reviews"]
Eine Search-Response ist normalisiertes JSON, das du direkt speichern kannst (echte Felder):
{
"code": 200,
"msg": "OK",
"data": {
"query": "sneakers",
"limit": 20,
"products": [
{ "id": "8075903107261", "variant_id": "46242960965821", "title": "BILLY Sport Inclusion", "url": "https://billyfootwear.com/products/...?utm_source=shop_app", "shop_id": "62696", "shop_name": "BILLY Footwear", "price": 100, "currency": "USD", "position": 1, "group_title": "kids' athletic sneakers" }
]
}
}
Search akzeptiert query plus die Filter in_stock, on_sale und deep_search. Über Products hinaus erreicht derselbe Key Product-Varianten und verwandte Artikel sowie Shop-Profile per Handle — /shop-app/shops/{handle}, dessen /products, /reviews und /locations — plus /shop-app/categories und /shop-app/suggestions. Speichere eine Zeile pro Product und ziehe die Daten nach Zeitplan neu.
Was du sammeln kannst
Öffentliche Katalogdaten: store-übergreifende Product-Suche (id, variant_id, title, url, shop_id, shop_name, price, currency, group); Product-Detail, Varianten und verwandte Artikel; Product-Reviews (rating, body, author, date); Shop-Profile mit Products, Reviews und Locations; Kategorien; und Suchvorschläge. Nur öffentliche, faktische Felder.
Grenzen und typische Herausforderungen
- Keine offizielle API. Shop.app hat keine öffentliche Entwickler-API, das Sammeln seiner Daten bedeutet also Scraping — was eine strukturierte API hinter einem Key erledigt.
- Store-übergreifend, kein vollständiger Einzel-Store-Katalog. Shop.app aggregiert über Händler hinweg; um den kompletten Katalog eines Stores zu ziehen, nutze dessen
/products.jsongemäß dem Shopify stores guide. - Reviews sind personenbezogene Daten. Rezensentennamen und Review-Text sind nach DSGVO/CCPA personenbezogen — sammle öffentliche, faktische Felder mit einer Rechtsgrundlage.
- Preise und Bestand ändern sich. Nutze die Filter
in_stock/on_saleund ziehe die Daten nach Zeitplan neu, statt einem einmaligen Snapshot zu vertrauen.
Wo das eingesetzt wird
- E-Commerce-Product-Intelligence — recherchiere Kataloge, Preise und Shops im gesamten Shopify-Ökosystem. Siehe den Use Case e-commerce product intelligence.
- Wettbewerber- & Merchandising-Recherche — vergleiche Sortimente und Preise über Händler hinweg.
- Review- & Reputations-Monitoring — verfolge Product- und Shop-Sentiment im großen Stil.
Sources
Loslegen mit dem Sammeln
Probier es zuerst kostenlos aus: schick eine beliebige öffentliche URL durch den Free Web Scraper, oder prüfe mit dem Anti-Bot Checker, ob eine Site Bots blockiert — ohne Anmeldung.
Teste den Search-Endpoint im Playground, prüfe das Schema in den API docs und sieh dir das pricing an. Siehe auch how to scrape Shopify stores für Einzel-Store-Kataloge, how to scrape eBay für die Marktplatz-Seite, how to choose a web scraping API und is web scraping legal.
Häufig gestellte Fragen
Ist Shop.app dasselbe wie das Scrapen eines Shopify-Stores?
Nein. Ein einzelner Shopify-Store stellt eine öffentliche /products.json bereit, die du direkt lesen kannst (siehe den Shopify-Stores-Guide). Shop.app ist Shopifys Consumer-Marktplatz, der Products über viele Händler hinweg bündelt, es geht also um store-übergreifende Discovery — und dafür gibt es keinen entsprechenden offenen Endpoint pro Store.
Hat Shop.app eine offizielle API?
Keine öffentliche Entwickler-API. Shop.app rendert client-seitig aus einer internen GraphQL-API hinter Request-Tokens, das Sammeln seiner Daten bedeutet also Scraping — was eine strukturierte API hinter einem Key erledigt und Search-, Product-, Review- und Shop-Daten als normalisiertes JSON zurückgibt.
Wie komme ich an die Reviews eines Products?
Suche, um eine Product-id zu bekommen, rufe dann /shop-app/products/{id} für Detail und /shop-app/products/{id}/reviews für Reviews auf (rating, body, author, date). Shops werden per Handle über /shop-app/shops/{handle} und dessen /products und /reviews angesprochen.
Welche Shop.app-Daten kann ich sammeln?
Öffentliche Katalogdaten: store-übergreifende Product-Suche (id, variant_id, title, url, shop_id, shop_name, price, currency, group), Product-Detail, Varianten und verwandte Artikel; Product-Reviews; Shop-Profile mit Products, Reviews und Locations; Kategorien; und Vorschläge.
Kann ich nach Bestand oder Sale filtern?
Ja. /shop-app/search akzeptiert query plus die Filter in_stock, on_sale und deep_search, du kannst also auf verfügbare oder reduzierte Products eingrenzen und die Daten nach Zeitplan neu ziehen, während sich Preise und Bestand ändern.
Sind Shop.app-Reviews personenbezogene Daten?
Ja. Rezensentennamen und Review-Text sind personenbezogene Daten nach DSGVO/CCPA — sammle nur öffentliche, faktische Felder mit einer Rechtsgrundlage und veröffentliche die Identitäten der Rezensenten nicht erneut.