← Alle Artikel

Google-Suchergebnisse Mitsamt Anzeigen Mit Einer SERP-API Auslesen

Bitte einen Entwickler, “Google zu scrapen”, und er denkt meist an die zehn organischen blauen Links. Aber eine moderne Suchergebnisseite ist weit mehr als das. Über und unter den organischen Treffern stehen bezahlte Anzeigen, und bei kommerziellen Suchanfragen sind diese Anzeigen oft die wertvollsten Daten auf der Seite. Sie verraten dir, wer auf ein Keyword bietet, welche Texte laufen und auf welche Landingpages verwiesen wird. Wenn dein Scraper sie weglässt, entgeht dir die Hälfte des Bildes.

Anzeigen zuverlässig zu erfassen ist schwieriger als organische Treffer zu erfassen, und die meisten SERP-Tools überspringen sie stillschweigend - vor allem, weil Google Anzeigen nur Besuchern zeigt, die es für echte Menschen hält. Dieser Beitrag erklärt, warum bezahlte Ergebnisse so schwer zu greifen sind, was eine vollständige SERP-Antwort enthalten sollte und wie du sowohl organische Treffer als auch Anzeigen als sauberes JSON bekommst - so, wie sie eine Person in einem bestimmten Land tatsächlich sehen würde.

Warum Anzeigen Schwerer zu Scrapen Sind als Organische Treffer

Organische Ergebnisse sind relativ stabil. Positionen verschieben sich, aber dieselbe Suchanfrage von zwei ähnlichen Maschinen liefert meist eine ähnliche Liste. Anzeigen verhalten sich nicht so, und dafür gibt es mehrere Gründe.

Google liefert einem Besucher, dem es nicht vertraut, schlicht keine Anzeigen aus. Das ist mit Abstand der wichtigste Grund - und der, den fast niemand erwähnt. Jede Anzeigenimpression kostet einen Werbetreibenden Geld, deshalb schützt Google sein Anzeigeninventar weit aggressiver als die organischen Treffer. Wirkt die Sitzung nicht wie die eines echten Menschen - Browser-Fingerprint, IP-Reputation, Cookies, Timing, Interaktionssignale -, wird die Anzeigenauktion stillschweigend übersprungen. Du bekommst keine Blockseite, kein Captcha, keinen Fehler. Du bekommst eine völlig normal aussehende Ergebnisseite mit allen organischen Treffern und ganz ohne gesponserte Blöcke.

Dieser Unterschied ist entscheidend: die Blockade zu umgehen ist nicht dasselbe, wie als vertrauenswürdig zu gelten. Viele automatisierte Setups laden Google problemlos, erhalten einen sauberen HTTP 200, parsen die organischen Treffer fehlerfrei - und sehen trotzdem nie eine einzige Anzeige, bei keinem Keyword und in keinem Land. Teams schließen dann “für diese Suchanfrage gab es keine Anzeigen”, während ein echter Nutzer im selben Markt gerade vier davon sieht. Weil es keinen Fehler zum Abfangen gibt, bleibt dieses Versagen unsichtbar, solange du es nicht per Hand mit einem echten Browser vergleichst.

Dieses Vertrauen zu gewinnen ist kein Parsing-Problem, sondern ein Infrastrukturproblem: ein echter Browser-Stack mit konsistentem Fingerprint, ein Residential-Exit im Zielland, glaubwürdiges Sitzungs- und Timing-Verhalten und keines der Automatisierungssignale, die Google seit Jahren zu erkennen lernt. Genau diese Ebene übernimmt ScrapeUnblocker: Anfragen kommen als echter Nutzer aus dem Land deiner Wahl an, die Anzeigenauktion läuft also normal und die gesponserten Blöcke kommen vollständig zurück - dieselben, die eine Person in diesem Markt sehen würde.

Anzeigen sind stark nach Standort personalisiert. Die Anzeigenauktion von Google läuft pro Suchanfrage, pro Region, manchmal pro Stadt. Eine Suche nach “Autoversicherung” von einer US-IP zeigt eine völlig andere Gruppe von Werbetreibenden als dieselbe Suche aus Deutschland oder Großbritannien. Wenn dein Scraper über eine zufällige Rechenzentrums-IP im falschen Land herausgeht, siehst du entweder die falschen Anzeigen oder gar keine.

Anzeigen werden spät gerendert. Viele Anzeigenplätze werden per clientseitigem JavaScript einen Moment nach dem Laden der Hauptseite gefüllt. Eine naive HTTP-Anfrage, die das anfängliche HTML abgreift, erfasst die Seite oft, bevor die Anzeigenauktion gerendert wurde, sodass die Ergebnisse anzeigenfrei wirken, obwohl sie es nicht sind.

Anzeigen sind darauf ausgelegt, wie organische Treffer auszusehen. Google hat jahrelang daran gearbeitet, das Label “Gesponsert” unauffällig zu machen. Für einen Parser können ein Anzeigenblock und ein organischer Block im DOM fast identisch aussehen, was bedeutet, dass fragile, handgeschriebene Selektoren sie ständig verpassen oder falsch einordnen.

Das Anzeigen-Markup ändert sich häufig. Google stellt sein SERP-Layout regelmäßig um. Selektoren, die letzten Monat funktionierten, geben diesen Monat stillschweigend leere Arrays zurück, und du merkst es erst, wenn dein Dashboard verstummt.

Zusammengenommen erklären diese Faktoren, warum so viele SERP-Scraper nur organische Daten liefern. Auch die Anzeigen zu bekommen bedeutet, zuerst wie ein echter Nutzer auszusehen und darauf aufbauend Geo-Targeting, JavaScript-Rendering und robuste Klassifizierung zu lösen.

Was Eine Vollständige SERP-Antwort Enthalten Sollte

Eine SERP-API, die ihr Geld wert ist, sollte dir die ganze Seite liefern, bereits in die Teile aufgeteilt, die dich interessieren. Das bedeutet mindestens drei Kategorien:

  • topAds - die gesponserten Ergebnisse über den organischen Treffern.
  • organic - die normalen, unbezahlten Ergebnisse.
  • bottomAds - die gesponserten Ergebnisse unter den organischen Treffern.

Jedes Ergebnis, ob bezahlt oder organisch, sollte dieselbe saubere Struktur tragen: einen Titel, die echte Ziel-URL, die angezeigte (schöne) URL, ein Beschreibungs-Snippet und eine Position. Wenn Anzeigen und organische Treffer ein Schema teilen, bleibt dein nachgelagerter Code einfach - du iterierst gleich über sie und merkst dir nur, aus welcher Kategorie sie stammen.

Entscheidend: Die Ergebnisse sollten einen echten Nutzer im gewählten Land widerspiegeln. Du wählst das Land, und die API liefert die Seite so, wie sie jemand sehen würde, der von dort surft - dieselben Werbetreibenden, dieselbe Reihenfolge, dieselben lokalen Feinheiten. Das ist der Unterschied zwischen “irgendwelchen Google-Ergebnissen” und “den Ergebnissen, die dein Publikum tatsächlich sieht”.

Die Anfrage Stellen

Der Endpunkt ist ein einziger POST-Aufruf. Das einzige Pflichtfeld ist dein Such-keyword; alles andere ist optional und gibt dir Kontrolle über Tiefe und Standort.

  • keyword (erforderlich) - die Suchanfrage, zum Beispiel best running shoes.
  • proxy_country - der ISO-Ländercode für das Geo-Targeting, etwa us oder de.
  • pages_to_check - wie viele SERP-Seiten erfasst werden, von 1 bis 10 (Standard ist 1).
  • wait_after_load - Sekunden Wartezeit nach dem Laden der Seite, damit spät rendernde Anzeigen erscheinen.
  • captcha_pause - Sekunden Pause, falls eine Challenge auftritt.

Hier ist der einfachste mögliche Aufruf mit curl:

curl -X POST "https://api.scrapeunblocker.com/serpApi" \
  -H "x-scrapeunblocker-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "keyword": "best running shoes",
    "proxy_country": "us",
    "pages_to_check": 1,
    "wait_after_load": 3
  }'

Die zwei Parameter, die für das Erfassen von Anzeigen am wichtigsten sind, sind proxy_country und wait_after_load. Stelle das Land dort ein, wo dein Publikum ist, und gib der Seite ein paar Sekunden, damit die Anzeigenplätze fertig rendern, bevor die Daten gelesen werden. Einen der beiden wegzulassen ist der häufigste Grund, warum Leute unvollständige Anzeigendaten bekommen.

Derselbe Aufruf in Python ist genauso kurz:

import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/serpApi",
    headers={"x-scrapeunblocker-key": "YOUR_API_KEY"},
    json={
        "keyword": "best running shoes",
        "proxy_country": "us",
        "pages_to_check": 1,
        "wait_after_load": 3,
    },
)

data = resp.json()
print(f"{len(data['topAds'])} top ads, {len(data['organic'])} organic results")

Die Antwort

Die Antwort ist ein einziges JSON-Objekt. Die oberste Ebene sagt dir, was und von wo gesucht wurde, und die Arrays topAds, bottomAds und organic enthalten die Ergebnisse. Hier ein Beispiel mit Platzhalterdaten:

{
  "keyword": "best running shoes",
  "proxy_country": "us",
  "totalResults": 128000000,
  "topAds": [
    {
      "title": "SwiftSole Pro 2026 - Free 60-Day Returns",
      "url": "https://www.swiftsole.example/pro-running",
      "displayedUrl": "swiftsole.example/pro",
      "description": "Lightweight carbon-plate trainers built for race day. Free shipping both ways.",
      "position": 1
    },
    {
      "title": "PaceRunner Outlet - Up to 40% Off",
      "url": "https://shop.pacerunner.example/sale",
      "displayedUrl": "shop.pacerunner.example/sale",
      "description": "Last-season road and trail shoes at clearance prices. Sizes selling fast.",
      "position": 2
    }
  ],
  "bottomAds": [
    {
      "title": "TrailheadGear - Trail Running Specialists",
      "url": "https://www.trailheadgear.example/shoes",
      "displayedUrl": "trailheadgear.example",
      "description": "Grippy, waterproof trail shoes tested on real mountain routes.",
      "position": 1
    }
  ],
  "organic": [
    {
      "title": "The 12 Best Running Shoes of 2026, Tested",
      "url": "https://www.runreview.example/best-running-shoes",
      "displayedUrl": "runreview.example > gear > shoes",
      "description": "We logged 400 miles in this year's top trainers. Here is what held up.",
      "position": 1
    },
    {
      "title": "How to Choose Running Shoes - A Beginner's Guide",
      "url": "https://www.stridelab.example/guides/choose-shoes",
      "displayedUrl": "stridelab.example/guides",
      "description": "Pronation, drop, cushioning: the three things that actually matter.",
      "position": 2
    }
  ]
}

Da jeder Eintrag - Anzeige oder organisch - dieselben fünf Felder nutzt, ist das Iterieren trivial. Du kannst alle drei Arrays zusammenführen, jede Zeile mit ihrer Quelle kennzeichnen und sie direkt in eine Tabelle schreiben:

rows = []
for bucket in ("topAds", "bottomAds", "organic"):
    for item in data[bucket]:
        rows.append({"source": bucket, **item})

Was Du Mit Vollständigen SERP-Daten Bauen Kannst

Sobald du organische Daten und Anzeigendaten zusammen hast, öffnen sich mehrere Anwendungsfälle, die reine Organik-Scraper nicht bedienen können:

  • Anzeigen-Monitoring der Konkurrenz. Verfolge, welche Unternehmen auf deine Kern-Keywords bieten, beobachte, wie sich ihre Anzeigentexte über die Zeit ändern, und erkenne neue Mitbewerber am Tag, an dem sie mit dem Werben beginnen.
  • Rankingverfolgung, die die Realität abbildet. Die organische Position, die zählt, ist die, die ein Nutzer sieht, nachdem Anzeigen die Treffer nach unten gedrückt haben. Anzeigen zu erfassen lässt dich echte Sichtbarkeit messen, nicht ein theoretisches Ranking.
  • Markenschutz. Erkenne Wettbewerber oder Affiliates, die in bestimmten Ländern auf deinen Markennamen bieten, was oft das erste Anzeichen für Markenmissbrauch ist.
  • Markt- und Preisrecherche. Anzeigentexte sind ein Live-Feed dessen, welche Aktionen, Rabatte und Botschaften dein Markt gerade fährt.
  • Analyse lokaler Suchintention. Da du das Land wählst, kannst du vergleichen, wie dieselbe Suchanfrage über Märkte hinweg aussieht, und Kampagnen pro Region anpassen.

Der rote Faden ist die Geografie. Nichts davon funktioniert, wenn du die Seite nicht zuverlässig so sehen kannst, wie ein lokaler Nutzer sie sieht - genau deshalb gehören Länder-Targeting und vollständige Anzeigenerfassung zusammen.

Häufig Gestellte Fragen

Warum liefert mein Scraper selbst bei kommerziellen Keywords keine Anzeigen? Meistens, weil Google die Sitzung nicht als echten Nutzer eingestuft und die Anzeigenauktion komplett übersprungen hat - die Seite lädt trotzdem, die organischen Treffer parsen trotzdem, es wirkt also nichts kaputt. Die beiden anderen üblichen Ursachen sind ein Exit über das falsche Land, sodass keine lokalen Anzeigen ausgeliefert werden, und das Auslesen der Seite, bevor die Anzeigenplätze fertig gerendert waren. Stelle proxy_country auf deinen Zielmarkt und füge ein kurzes wait_after_load hinzu - aber zuerst muss die Vertrauensebene gelöst sein, und das schaffen weder Selektoren noch Timeouts.

Mein Scraper wird überhaupt nicht blockiert - warum sehe ich trotzdem keine Anzeigen? Weil den Block zu vermeiden und als echter Besucher behandelt zu werden zwei verschiedene Hürden sind, und die Anzeigen liegen hinter der höheren. Google gibt einem automatisiert wirkenden Client bereitwillig einen sauberen HTTP 200 mit der vollständigen organischen Liste - und lässt die gesponserten Blöcke einfach weg. Deshalb ist eine anzeigenfreie Antwort kein Beweis dafür, dass es für das Keyword keine Werbetreibenden gibt: Prüfe dieselbe Suchanfrage in einem normalen Browser aus demselben Land, und du findest sie meist. ScrapeUnblocker-Anfragen gehen als echte Nutzer durch, die Anzeigen sind also da.

Kann ich Anzeigen von mehr als der ersten Seite sammeln? Ja. Nutze pages_to_check, um bis zu zehn SERP-Seiten in einem Aufruf abzurufen. Anzeigen am Seitenende und tiefere organische Treffer erscheinen, je weiter du in den Ergebnissen nach unten gehst.

Wie unterscheide ich Anzeigen von organischen Treffern? Die Antwort trennt sie bereits für dich. Gesponserte Ergebnisse kommen in topAds und bottomAds, unbezahlte in organic, sodass du nie anhand des Markups oder eines “Gesponsert”-Labels raten musst.

Werden die Ergebnisse mit dem übereinstimmen, was ein echter Nutzer sieht? Das ist das Ziel. Indem du ein proxy_country auswählst, bekommst du die Seite so, wie sie ein echter Besucher aus diesem Land sehen würde - dieselben Werbetreibenden, dieselbe Reihenfolge und dieselben lokalisierten Ergebnisse, statt einer generischen oder rechenzentrumsverzerrten Ansicht.

Alles Zusammengeführt

Vollständige Suchdaten bedeuten die ganze Seite: die organischen Treffer und die Anzeigen, die sie umgeben, gesehen aus dem Land, das für dich zählt. Diese Kombination macht aus einem SERP-Scraper von einer Spielerei etwas, worauf du ein Produkt für Wettbewerbsanalyse oder Rankingverfolgung aufbauen kannst.

Wenn du die Logik für Geo-Targeting, JavaScript-Rendering und Anzeigenklassifizierung nicht selbst pflegen möchtest, liefert die SERP-API von ScrapeUnblocker organische Treffer und beide Anzeigenblöcke als strukturiertes JSON in einem einzigen Aufruf, mit dem Ausgangsland deiner Wahl. Die vollständige Parameter- und Antwortreferenz findest du in der Entwicklerdokumentation, und du kannst Suchanfragen im Dashboard testen. Welches Werkzeug du auch wählst, das Prinzip bleibt gleich: Wenn du die Wahrheit über eine Suchergebnisseite willst, erfasse sie vollständig - Anzeigen inklusive.

ScrapeUnblocker kostenlos testen

Über 95 % Erfolgsquote · ab 0,55 € pro 1.000 Aufrufe · 500 kostenlose Anfragen bei der Registrierung.

Kostenlos testen → Preise ansehen