Tony Wang6 Min. LesezeitInstacart scrapen 2026 (API & Python)
Instacart 2026 scrapen — nahegelegene Stores, Live-Produktpreise und Suchvorschläge als strukturiertes JSON — DIY, No-Code oder strukturierte API.
Am schnellsten scrapst du Instacart 2026, indem du eine strukturierte API aufrufst, die normalisiertes JSON zurückgibt — Stores in der Nähe, aktuelle Produktpreise, Suchvorschläge, Abteilungs-Kategorien und Trend-Begriffe — statt Instacarts gerenderte Seiten selbst zu parsen. Instacarts eigene APIs schließen diese Lücke nicht: Sie sind für App-Integrationen und Retailer-Partner gebaut, nicht für Drittanbieter-Datenzugriff. Dieser Guide zeigt dir alle drei Ansätze: was jeder liefert, wo DIY scheitert, und gleich zu Beginn die rechtliche Realität.
Warum Instacart scrapen?
Instacart bündelt Tausende Grocery-, Retail- und Pharmacy-Storefronts in einer Delivery-Plattform, was die Daten nützlich macht für:
- Grocery-Preise und Verfügbarkeit im Blick behalten — nachverfolgen, wie sich Preis, Sale-Status und Bestand eines Produkts an einem bestimmten Store über die Zeit verändern.
- Store-Abdeckung und Liefer-ETA im Blick behalten — sehen, welche Retailer eine Postleitzahl bedienen, ob sie EBT akzeptieren und wie schnell sie liefern.
- Produktsuche und Kategorie-Recherche — sehen, wonach Shopper in der Nähe eines Standorts suchen und wie ein Store seine Abteilungs-Taxonomie organisiert.
- Market-Basket- und CPG-Recherche — Preis und Promotion desselben Produkts über nahegelegene Stores und Ketten hinweg vergleichen.
Ist es legal, Instacart zu scrapen?
Option 1: DIY in Python (und warum das scheitert)
Instacarts Storefront-Seiten rendern aus einer internen API hinter der eigenen JavaScript-App der Seite, weshalb ein DIY-Scraper am Ende diese interne API reverse-engineered, statt sauberes HTML zu parsen:
import requests
# Instacart's storefront pages call an internal API scoped to a
# specific postal code and store — there's no stable public endpoint
resp = requests.get("https://www.instacart.com/store/safeway/storefront")
Es funktioniert in der Demo und geht dann kaputt:
- Keine öffentliche API für Drittanbieter-Datenzugriff. Die Instacart Developer Platform (IDP) dient dazu, einen shoppable Instacart-Checkout-Link in eine andere App einzubetten — sie liefert eine Landingpage-URL zurück, keine Produktdaten. Instacart Connect ist für Retailer-Partner gedacht, die das Inventar ihres eigenen Stores in Instacart pushen. Keins von beidem gewährt einem externen Researcher Lesezugriff auf Instacarts Daten.
- Alles ist standort- und storegebunden. Preise, Verfügbarkeit und sogar Suchvorschläge hängen an einer Postleitzahl und der
shop_ideines bestimmten Stores — es gibt keine einzelne „Instacart-Katalog"-Response, die du einmal abrufst. robots.txtund Terms schränken Scraping explizit ein. Instacarts Terms verbieten automatisiertes Scraping/Data Mining, und dierobots.txtschließt den API-Pfad sowie die meisten Storefront-Browse-/Item-Pfade für Crawler aus.- Sich veränderndes internes Schema und Anti-Bot-Abwehr. Die Response-Struktur der privaten Storefront-API ändert sich ohne Vorwarnung, und wiederholte automatisierte Requests ziehen Rate-Limits nach sich.
Option 2: No-Code-Tools
Marketplace-Actors für „Instacart scraper" gibt es für einmalige Abzüge des Listings eines Stores oder eine einzelne Suche, aber sie erben dieselbe Fragilität der internen API wie DIY und tragen dasselbe Terms-Risiko.
Option 3: Eine strukturierte Instacart-API
Für einen wiederholbaren Workflow liefert eine Instacart scraping API normalisiertes JSON für Store-Discovery, Produkt-Details, Suche und Kategorien — kein Login, Cookie oder Instacart-Konto nötig. Finde Stores in der Nähe einer Postleitzahl:
curl "https://api.crawlora.net/api/v1/instacart/stores?postal_code=94105" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"postal_code": "94105",
"stores": [
{
"shop_id": "9501",
"retailer_location_id": "53",
"retailer_id": "1",
"name": "Safeway",
"slug": "safeway",
"retailer_type": "Grocery - Traditional",
"service_type": "delivery",
"accepts_ebt": true,
"delivery_eta": "By 4:45am"
}
]
}
}
Sobald du shop_id und slug eines Stores hast, sind auch Suchvorschläge postleitzahlgebunden — entweder innerhalb dieses einen Stores oder über alle nahegelegenen Retailer hinweg gleichzeitig:
curl "https://api.crawlora.net/api/v1/instacart/search-nearby?postal_code=94105&q=milk" \
-H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"postal_code": "94105",
"query": "milk",
"suggestions": [
{ "term": "milk", "thumbnail_url": "https://d2lnr5mha7bycj.cloudfront.net/product-image/file/thumb_b4aaab37-66cf-46e3-9638-f37987fca803.jpg" },
{ "term": "almond milk", "thumbnail_url": "https://d2lnr5mha7bycj.cloudfront.net/product-image/file/thumb_example.jpg" }
]
}
}
Hol dann in Python den aktuellen Preis, Bestand und Nährwert eines bestimmten Produkts an diesem Store:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/instacart"
loc = {"shop_id": "9501", "store_slug": "safeway", "postal_code": "94105"}
stores = requests.get(f"{base}/stores", headers=h, params={"postal_code": "94105"}).json()["data"]["stores"]
item = requests.get(f"{base}/item", headers=h, params={
**loc,
"retailer_location_id": "53",
"product_id": "17830663",
}).json()["data"]
Eine Item-Response ist normalisiertes JSON, das du direkt speichern kannst (echte Felder):
{
"id": "items_53-17830663",
"product_id": "17830663",
"name": "Lucerne Blended Plain Yogurt",
"size": "32 oz",
"brand_name": "lucerne",
"price": {
"current_price": 2.99,
"regular_price": 3.99,
"on_sale": true,
"offer_label": "25% off",
"pricing_unit": "32 oz"
},
"available": true,
"stock_level": "inStock",
"dietary_labels": ["low_carb", "low_sugar"],
"nutrition": [
{ "label": "Protein", "value": "7", "unit": "g" },
{ "label": "Calories", "value": "150" }
]
}
Über diese hinaus erreicht derselbe Key auch /instacart/departments (die Kategorie-/Subkategorie-Taxonomie eines Stores, gebunden an shop_id/store_slug/postal_code), /instacart/search (Autocomplete-Vorschläge, gebunden an einen Store via shop_id/store_slug/q) und /instacart/trending (populäre Suchbegriffe in der Nähe einer postal_code, ohne dass ein Store nötig ist). Speichere pro Abzug eine Zeile pro Produkt, mit product_id und shop_id als Key, und lass es nach Zeitplan erneut laufen, um Änderungen bei current_price/on_sale nachzuverfolgen.
Was du sammeln kannst
Öffentliche Storefront-Daten: Stores in der Nähe (shop_id, retailer_location_id, Name, Retailer-Typ, Service-Typ, EBT-Akzeptanz, Liefer-ETA); Produkt-Details an einem bestimmten Store (Name, Marke, Größe, aktueller/regulärer Preis, Sale-Status und Offer-Label, Verfügbarkeit, Bestand, Dietary Labels, Nährwertangaben); Such- und Autocomplete-Vorschlagsbegriffe (innerhalb eines Stores oder über alle nahegelegenen Retailer hinweg); die Abteilungs- und Subkategorie-Taxonomie eines Stores; und Trend-Suchbegriffe nach Postleitzahl. Nur öffentliche Produktseiten-Daten — keine persönlichen Shopper-, Kunden- oder Bestelldaten.
Grenzen und typische Herausforderungen
- Kein Endpoint zur Produkt-Katalog-Enumeration. Search und search-nearby liefern Typeahead-Vorschlagsbegriffe, keine paginierte Liste passender Produkte mit ids — eine
product_idfür/instacart/itemaufzulösen braucht eine bekannte SKU oder einen weiteren Discovery-Schritt, keinen einzelnen Search-Call. - Store-spezifisch, nicht kettenweit. Eine
shop_idadressiert die Storefront eines Retailers an einem Standort — dieselbe Kette in einer anderen Postleitzahl ist eine andereshop_idmit eigenen Preisen und eigener Verfügbarkeit. - Preise sind ein bewegliches Ziel.
current_priceundon_saleändern sich häufig; behandle jeden Abzug als Snapshot zu einem Zeitpunkt und lass ihn für Trenddaten nach Zeitplan erneut laufen. - Kein offizieller Kanal für genau diesen Use Case. Instacarts eigene Developer-Angebote (IDP, Connect) lösen App-Embedding und Retailer-Inventory-Sync, nicht Drittanbieter-Lesezugriff — plane mit einer strukturierten API, statt auf eine offizielle zu warten.
Wo das eingesetzt wird
- Grocery-Preise und Verfügbarkeit im Blick behalten —
current_price,on_saleundstock_leveleines Produkts an einem bestimmten Store über die Zeit nachverfolgen. Siehe den Use Case ecommerce product intelligence. - Store-Abdeckung und Liefer-ETA im Blick behalten — abbilden, welche Retailer eine Postleitzahl bedienen und wie schnell sie liefern.
- Produktsuche und Kategorie-Recherche —
/instacart/trendingmit der Abteilungs-Taxonomie kombinieren, um zu sehen, wonach gesucht wird im Vergleich dazu, wie ein Store seinen Katalog organisiert.
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 Stores- und Item-Endpoints im Playground, sieh dir das Schema in den API docs an und wirf einen Blick aufs pricing. Siehe auch how to scrape DoorDash und how to scrape Costco für angrenzende Grocery- und Delivery-Muster, sowie is web scraping legal.
Häufig gestellte Fragen
Hat Instacart eine öffentliche API zum Scrapen von Produkt- oder Preisdaten?
Nein. Die Instacart Developer Platform ist für App-Entwickler, die einen shoppable Checkout-Link einbetten (sie gibt keine Produktdaten zurück), und Instacart Connect ist für Retailer-Partner, die ihr eigenes Inventar in Instacart synchronisieren — keins von beiden gewährt Drittanbietern Lesezugriff auf Instacarts Storefront-Daten.
Wie finde ich Instacart-Stores in der Nähe eines Standorts über eine API?
Sende eine Postleitzahl an /instacart/stores und erhalte nahegelegene Retailer-Storefronts als strukturiertes JSON zurück — Name, shop_id, EBT-Akzeptanz und Liefer-ETA.
Kann ich Live-Preise für ein Instacart-Produkt bekommen?
Ja — /instacart/item gibt den aktuellen Preis, einen eventuell aktiven Sale, den Lagerbestand und Nährwertangaben eines Produkts an einem bestimmten Store als strukturiertes JSON zurück, gegeben eine shop_id und product_id.
Warum hat dasselbe Produkt unterschiedliche Preise in Instacart-Daten?
Preis und Verfügbarkeit sind auf die shop_id eines bestimmten Stores in einer bestimmten Postleitzahl begrenzt, nicht auf einen einzelnen nationalen Katalog — dasselbe Produkt bei zwei verschiedenen Stores (oder derselben Kette in zwei Postleitzahlen) kann unterschiedliche price- und stock_level-Werte zurückgeben.
Gibt Instacarts Such-Endpoint eine Liste passender Produkte zurück?
Nein — /instacart/search und /instacart/search-nearby geben Autocomplete-Vorschlagsbegriffe (mit Thumbnails) zurück, keine paginierte Liste von Produkt-ids. Um eine product_id für volles Detail aufzulösen, braucht es eine bekannte SKU oder einen weiteren Discovery-Schritt.
Ist es legal, Instacart zu scrapen?
Produktfakten sind nicht urheberrechtlich geschützt, und der Zugriff auf öffentliche Daten verstößt gemäß hiQ v. LinkedIn nicht gegen den CFAA, aber Instacarts Nutzungsbedingungen verbieten ausdrücklich automatisiertes Scraping/Data-Mining, und robots.txt schließt den API-Pfad und die meisten Storefront-Browse-/Item-Pfade aus — behandle das als echte Einschränkung, nicht als Formalität.
Erfordert die Instacart-API ein Konto oder Login?
Vom Aufrufer wird kein Instacart-Konto oder Login benötigt — nur ein API-Key.