Hoe Google Shopping Prijzen te Scrapen: Aanbiedingen, Verkopers, Geo Data
Google Shopping verzamelt prijzen van duizenden handelaren op één plek. Hier is hoe je de shopping-verticale kunt omzetten in een gestructureerde, geo-bewuste prijslijst waarop je kunt vertrouwen.
Google Shopping is een van de grootste prijsaggregators op het web: voor een bepaald product haalt het live aanbiedingen, prijzen en verkopersdetails van duizenden handelaren in een enkele gerangschikte weergave. Dat maakt het een uniek efficiënte bron voor prijsintelligentie - één zoekopdracht toont wat tientallen retailers op dit moment vragen. Deze gids behandelt hoe je Google Shopping prijzen schoon kunt scrapen, waarom geografie alles verandert, en wanneer je moet stoppen met het handmatig bouwen van een browser en in plaats daarvan een gestructureerde API moet gebruiken.
Wat de Shopping-verticale je eigenlijk biedt
De Shopping-tab is de tbm=shop verticale van Google Zoeken. Elke productkaart bevat een titel, een prijs, de naam van de handelaar/verkoper, een sterbeoordeling en aantal beoordelingen, en een productidentificatie die meerdere aanbiedingen van hetzelfde item groepeert. Voor prijswerk is die verkoper-en-prijs koppeling het goud: je kunt de spreiding over retailers voor één SKU volgen, zien wie onderbiedt en prijsbewegingen in de tijd volgen - het ruwe materiaal van een herprijs- of MAP-monitoringworkflow.
De URL-structuur is eenvoudig. Resultaten pagineren tien per pagina via een start offset, en het land van de uitgang wordt ingesteld met gl:
# Google Shopping search URL, page 1, US results
https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us
# Page 2 (results 11-20): add a start offset
https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us&start=10
Waarom locatie het antwoord bepaalt
Shoppingresultaten zijn gelokaliseerd. Prijzen worden weergegeven in de lokale valuta, de mix van handelaren verandert per markt, beschikbaarheid verschilt, en de gl parameter alleen is niet genoeg - Google weegt ook de locatie van het verzoekende IP. Vraag om Duitse resultaten van een Amerikaanse datacenter IP en je krijgt een inconsistente, deels-Amerikaanse respons. Om de catalogus te lezen die een shopper in Berlijn daadwerkelijk ziet, moet het verzoek uitgaan van een Duits residentieel IP. Een residentiële proxy pool die 200+ landen beslaat, stelt je in staat de uitgang aan elke markt die je prijst vast te pinnen. Dit is dezelfde discipline achter concurrent prijsmonitoring op schaal.

De doe-het-zelf route (en zijn belasting)
Je kunt de pagina's direct scrapen met een headless browser. Google Shopping is dynamisch gerenderd en goed verdedigd, dus gewone HTTP-verzoeken schieten tekort - je hebt een echte browserengine nodig, een proxy bij elk verzoek, en code om de cookie-toestemmingsmuur te omzeilen (de beruchte button#L2AGLb "Alles accepteren") voordat producten laden. Dan vecht je tegen de CSS: de containerklassenamen van Shopping zijn obfusceerd en roteren, dus selectors die vandaag werken breken over twee weken. Voeg retry-logica toe (drie pogingen met willekeurige backoff is een verstandige ondergrens) en je hebt een werkende scraper - en een permanente onderhoudstaak.
# Sketch of the DIY approach with Playwright + proxy
from playwright.sync_api import sync_playwright
PROXY = {"server": "http://gate.quantumproxies.io:8000",
"username": "USER", "password": "PASS"}
URL = "https://www.google.com/search?q=wireless+earbuds&tbm=shop&gl=us"
with sync_playwright() as pw:
browser = pw.chromium.launch(proxy=PROXY, headless=True)
page = browser.new_context(locale="en-US").new_page()
page.goto(URL, wait_until="networkidle", timeout=15000)
# dismiss the consent wall before products render
for sel in ("button#L2AGLb", "button:has-text('Accept all')"):
btn = page.locator(sel).first
if btn.is_visible():
btn.click(); break
# ...then wrestle the obfuscated product containers
browser.close()
De API route: één oproep, gestructureerde JSON
Het alternatief is om een SERP API de browser, de proxies en de parsing te laten beheren, en je de shopping-verticale als JSON te geven. Je geeft de zoekopdracht en een land door; het retourneert aanbiedingen met titel, prijs, verkoper, beoordeling en product-id al geëxtraheerd. Geen cookiemuren, geen selectoronderhoud, geo als parameter. Voor een prijslijst die moet blijven draaien, is die ruil meestal de juiste - onze uiteenzetting van hoe SERP scraping werkt in 2026 legt uit waarom het pad van ruwe HTML steeds moeilijker wordt.
# One request to the SERP API's Google Shopping vertical
curl -G "https://api.quantumproxies.io/v1/serp" \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode "engine=google_shopping" \
--data-urlencode "q=wireless earbuds" \
--data-urlencode "gl=us"
import requests
def shopping_offers(query, country="us"):
r = requests.get(
"https://api.quantumproxies.io/v1/serp",
headers={"Authorization": "Bearer YOUR_API_KEY"},
params={"engine": "google_shopping", "q": query, "gl": country},
timeout=30,
)
r.raise_for_status()
rows = []
for p in r.json().get("shopping_results", []):
rows.append({
"title": p.get("title"),
"price": p.get("price"),
"seller": p.get("source"), # merchant name
"rating": p.get("rating"),
"pid": p.get("product_id"),
})
return rows
for country in ("us", "gb", "de"):
print(country, shopping_offers("wireless earbuds", country)[:3])

Wat een enkele aanbieding eigenlijk bevat
Het loont om de vorm van één productkaart te begrijpen voordat je een pijplijn eromheen schaalt. Naast de hoofdlijnprijs bevat elke aanbieding de naam van de handelaar, een conditie van het artikel (nieuw, gebruikt of gereviseerd), verzend- en belastingaanwijzingen, een sterbeoordeling met een aantal beoordelingen, en een product-id die Google gebruikt om elke verkoper van hetzelfde artikel onder één vermelding te clusteren. Die product-id is de verbindingssleutel voor alles downstream: groepeer aanbiedingen eromheen en je kunt vergelijkbare aanbiedingen over handelaren vergelijken, de prijs van één SKU in de tijd volgen, en het moment detecteren dat een nieuwe verkoper een vermelding betreedt of een bestaande verdwijnt.
Twee velden verdienen speciale aandacht voor prijswerk. De verkopersnaam stelt je in staat een per-handelaar weergave te bouwen - wie consistent onderbiedt, wie hoog verankert, wie alleen bij promoties verschijnt - wat veel bruikbaarder is dan een anonieme prijswolk. De beoordeling geeft een ruwe vertrouwensweging, zodat je een reseller met één beoordeling niet gelijk behandelt aan een gevestigde retailer. Leg beide vast naast de prijs en valuta, en je dataset beantwoordt vragen die een kale prijslijst nooit kan.
- product_id - de clustertoets; dedupliceren en elke verkoper van een artikel erop aansluiten.
- price + currency - de metriek, altijd gekoppeld aan de markt waar je het vandaan hebt gehaald.
- seller / source - de handelaar, voor per-retailer competitieve weergaven.
- rating + reviews - een vertrouwensweging zodat vergelijkingen eerlijk zijn.
- timestamp - stempel elke capture zodat geschiedenis en deltas mogelijk zijn.
Aanbiedingen omzetten in intelligentie
Ruwe aanbiedingen zijn geen intelligentie - de lus is dat wel. Voer je queryset op schema uit, sla elke capture op met een timestamp, en vergelijk met de geschiedenis om te ontdekken wat ertoe doet: een concurrent die onder jouw prijs zakt, een nieuwe verkoper die een SKU betreedt, een voorraaduitputting die je kunt benutten. Groepeer aanbiedingen op product-id zodat de verkopers van hetzelfde artikel vergelijkbaar zijn, en voer de hele set per doelmarkt uit. Als je tooling bovenop dit alles bouwt, behandelt onze notitie over het kiezen van een SERP API de JSON-vorm en per-query-kostenvragen die de eenheidseconomie op volume bepalen.
Haal Google Shopping data binnen met de SERP API
Veelgestelde vragen
Hoe scrape ik Google Shopping met Python?
Twee paden. Bestuur een headless browser (Playwright) via een residentiële proxy, omzeil de cookie-toestemmingsmuur, en parse de productcontainers - flexibel maar onderhoudsintensief omdat de markup obfusceerd is en verandert. Of roep de google_shopping engine van een SERP API aan met je query en een landcode en ontvang geparseerde aanbiedingen als JSON in één verzoek. Het API-pad is veel minder code om in leven te houden.
Verandert Google Shopping data per land?
Ja, aanzienlijk. Valuta, de set van handelaren, prijzen en beschikbaarheid variëren allemaal per markt. De gl parameter vraagt een land aan, maar Google weegt ook het verzoekende IP, dus voor nauwkeurige gelokaliseerde resultaten is een exit-IP in het doelland nodig. Pin het verzoek aan een residentieel IP per markt die je prijst.
Is het legaal om Google Shopping te scrapen?
Het verzamelen van openbaar weergegeven prijzen en aanbiedingen is een gangbare praktijk voor prijsintelligentie, maar de voorwaarden van de bron en eventuele regels voor persoonsgegevens zijn nog steeds van toepassing, en dit is geen juridisch advies. Beperk je tot openbare productdata, respecteer snelheidslimieten, en als je twijfelt over een specifiek gebruik, vraag dan om juridisch advies. Verzamel of sla geen persoonlijke informatie op die je niet nodig hebt.
Hoe vaak moet ik Shopping prijzen scrapen?
Het hangt af van hoe snel je categorie beweegt. Snelle elektronica of ticketgoederen kunnen uurcapturen rechtvaardigen; stabiele categorieën zijn dagelijks prima. Stem het tempo af op prijsvolatiliteit, timestamp elke capture zodat je geschiedenis kunt opbouwen, en spreid verzoeken over IP's en tijd zodat je een beleefde, laag-risico bezoeker blijft.
Google Shopping condenseert de prijsstelling van een hele markt in één doorzoekbaar oppervlak. Of je het nu zelf rendert of een API aanroept voor gestructureerde JSON, het winnende patroon is hetzelfde: geo-target elke markt, capture op schema, en vergelijk met de geschiedenis. Dat is een prijsintelligentie-engine, geen eenmalige scrape.