Synupv1
Schlüssel erstellen
v1Ressourcen/SEO

SEO

Verfolgen Sie lokale Keyword-Rankings auf einem geografischen Raster sowie die Wettbewerberposition.

Liefert verfolgte Keywords, den monatlichen Ranking-Trend, das Ranking-Raster und Kennzahlkarten für einen Standort. Übergeben Sie keywordId, um das Raster auf ein einzelnes Keyword zu beschränken, oder month (YYYY-MM), um es auf einen bestimmten Monat statt auf den zuletzt gemessenen Bericht jedes Keywords festzulegen.

Ranking-Übersicht eines Standorts abrufen

get/api/v1/seo/keywords
seo:read
Query-Parameter
locationIdstringerforderlich
Der abzurufende Standort.
clientIdstringoptional
Der Kunde des Standorts.
keywordIdstringoptional
Das Raster auf ein verfolgtes Keyword beschränken. Weglassen für das aggregierte Beste-Rang-je-Zelle-Raster über alle aktiven Keywords.
monthstringoptional
Das Raster und die Kennzahlen auf diesen Monat (YYYY-MM) festlegen, statt auf den zuletzt gemessenen Bericht jedes Keywords.
Antwort
dataobjectoptional
Es können weitere interne Felder vorhanden sein, die nicht Teil des stabilen Vertrags sind — verlassen Sie sich nur auf die hier dokumentierten Felder.
keywordsarray of objectoptional
Verfolgte Keywords für diesen Standort, jeweils mit aktuellem Rang und monatlichem Trend.
idstringoptional
Eindeutige Kennung des verfolgten Keywords.
keywordstringoptional
Der Keyword-Text.
avgRanknumberoptional
Der zuletzt gemessene durchschnittliche Rang des Keywords über das Raster (niedriger ist besser; null, falls nie gemessen oder nicht rankend).
monthlyarray of objectoptional
Der durchschnittliche Rang dieses Keywords für jeden Monat, für den ein Bericht vorliegt.
monthstringoptional
ranknumberoptional
monthsarray of objectoptional
Jeder Monat mit mindestens einem gemessenen Bericht, älteste zuerst, mit dem mittleren durchschnittlichen Rang über die Keywords für diesen Monat.
keystringoptional
Monat im Format YYYY-MM.
labelstringoptional
Für Menschen lesbare Beschriftung des Monats, z. B. „Aug 2026“.
avgRanknumberoptional
Mittlerer durchschnittlicher Rang über die verfolgten Keywords für diesen Monat, oder null.
gridarray of objectoptional
Das Ranking-Raster: ein Eintrag je gescraptem Punkt, zusammengeführt über die im Geltungsbereich liegenden Keyword(s)/den Monat.
idstringoptional
rowintegeroptional
Zeilenindex im Raster.
colintegeroptional
Spaltenindex im Raster.
latnumberoptional
Breitengrad dieses Rasterpunkts.
lngnumberoptional
Längengrad dieses Rasterpunkts.
ranknumberoptional
An diesem Punkt gefundener Rang (niedriger ist besser); null, falls nicht gemessen, Werte über 20 bedeuten „20+“.
excludedbooleanoptional
Ob dieser Punkt von den Kennzahlberechnungen des Standorts ausgeschlossen ist.
waterbooleanoptional
Ob dieser Punkt in Wasser (Meer, See, breiter Fluss) liegt und nur gezählt wird, wenn der Standort sich für die Einbeziehung von Wasserpunkten entschieden hat.
statsobjectoptional
Zusammengefasste Rangkennzahlen über das aktive Raster.
top3Pctnumberoptional
Prozentsatz der Rasterpunkte mit Rang in den Top 3, oder null.
top10Pctnumberoptional
Prozentsatz der Rasterpunkte mit Rang in den Top 10, oder null.
avgRanknumberoptional
Durchschnittlicher Rang über das Raster, oder null.
statCardsobjectoptional
Hervorhebungskarten, die das beste/schlechteste Keyword des Standorts und die größte Monat-über-Monat-Veränderung zusammenfassen.
bestobjectoptional
Das Keyword mit dem besten (niedrigsten) aktuellen durchschnittlichen Rang, oder null, falls noch keines rankt.
keywordstringoptional
avgRanknumberoptional
worstobjectoptional
Das Keyword mit dem schlechtesten aktuellen durchschnittlichen Rang, oder null.
keywordstringoptional
avgRanknumberoptional
gainerobjectoptional
Das Keyword, dessen Rang sich von seinem ersten bis zu seinem letzten Monat am stärksten verbessert hat, oder null.
keywordstringoptional
fromnumberoptional
tonumberoptional
dropperobjectoptional
Das Keyword, dessen Rang sich von seinem ersten bis zu seinem letzten Monat am stärksten verschlechtert hat, oder null.
keywordstringoptional
fromnumberoptional
tonumberoptional
notRankingCountnumberoptional
Rasterpunkte, die erfolgreich gemessen wurden, aber außerhalb der Top 20 ranken, oder null.
noDataCountnumberoptional
Rasterpunkte, die überhaupt nicht gemessen werden konnten (der Scrape ist fehlgeschlagen), unterschieden von „nicht rankend“, oder null.
centerobjectoptional
Der Kartenmittelpunkt für das Raster dieses Standorts (sein Unternehmensstandort), oder null, falls noch nicht konfiguriert.
latnumberoptional
lngnumberoptional
includeWaterPointsbooleanoptional
Ob sich dieser Standort für die Zählung von Rasterpunkten in Wasser entschieden hat.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
get/api/v1/seo/keywords
Ihr API-Schlüssel
locationId *
clientId
keywordId
month
{
  "data": {
    "keywords": [
      {
        "id": "cm_kw_abc123",
        "keyword": "dentist near me",
        "avgRank": 4.2,
        "monthly": [
          {
            "month": "2026-01",
            "rank": 5.1
          },
          {
            "month": "2026-02",
            "rank": 4.2
          }
        ]
      }
    ],
    "months": [
      {
        "key": "2026-01",
        "label": "Jan 2026",
        "avgRank": 5.1
      },
      {
        "key": "2026-02",
        "label": "Feb 2026",
        "avgRank": 4.2
      }
    ],
    "grid": [
      {
        "id": "cm_pt_1",
        "row": 0,
        "col": 0,
        "lat": 30.2682,
        "lng": -97.7441,
        "rank": 3,
        "excluded": false,
        "water": false
      }
    ],
    "stats": {
      "top3Pct": 44,
      "top10Pct": 78,
      "avgRank": 4.2
    },
    "statCards": {
      "best": {
        "keyword": "dentist near me",
        "avgRank": 4.2
      },
      "worst": {
        "keyword": "emergency dentist austin",
        "avgRank": 9.6
      },
      "gainer": {
        "keyword": "dentist near me",
        "from": 5.1,
        "to": 4.2
      },
      "dropper": {
        "keyword": "family dentist",
        "from": 3.8,
        "to": 5.2
      },
      "notRankingCount": 1,
      "noDataCount": 0
    },
    "center": {
      "lat": 30.2672,
      "lng": -97.7431
    },
    "includeWaterPoints": false
  }
}
v1Ressourcen/SEO/postVerfolgte Keywords zu einem Standort hinzufügen

Beginnt die Verfolgung eines oder mehrerer Keywords auf dem lokalen Ranking-Raster eines Standorts und konfiguriert beim ersten Einrichten des Standorts die Rastergröße und den Radius. Keywords werden ohne Beachtung der Groß-/Kleinschreibung dedupliziert und sind auf 25 pro Standort begrenzt. Löst für jedes neu hinzugefügte Keyword einen Hintergrund-Ranking-Scan aus — fragen Sie danach GET /api/v1/seo/keywords per Polling ab, um die Ergebnisse eintreffen zu sehen.

Verfolgte Keywords zu einem Standort hinzufügen

post/api/v1/seo/keywords
seo:write
Anfragetext
locationIdstringerforderlich
Der Standort, für den Keywords verfolgt werden sollen.
clientIdstringoptional
Der Kunde des Standorts.
keywordsarray of stringerforderlich
Zu verfolgende Keywords, bis zu 25 (ohne Beachtung der Groß-/Kleinschreibung dedupliziert; die erste eingereichte Schreibweise setzt sich durch).
gridSizeinteger (3 | 5 | 7)optional
Rastergröße (3, 5 oder 7 Punkte je Seite). Wird nur beim ersten Konfigurieren des Rasters dieses Standorts angewendet — spätere Aufrufe, die dies weglassen oder einen bereits konfigurierten Standort ansprechen, lassen die gespeicherte Rastergröße unverändert.
distanceKmnumberoptional
Abstand in Kilometern zwischen benachbarten Rasterpunkten. Gilt nur beim ersten Mal, wie gridSize; Standardwert 1,5 km, wenn für den Standort noch kein Raster konfiguriert ist.
excludedarray of objectoptional
Rasterpunkte, die von der Messung ausgeschlossen werden sollen — z. B. ein See, das Gebiet eines Wettbewerbers. Punkte werden trotzdem abgefragt; dies steuert nur, ob sie in die Statistik einfließen.
rowintegeroptional
Rasterzeilenindex, nullbasiert.
colintegeroptional
Rasterspaltenindex, nullbasiert.
Antwort
dataobjectoptional
keywordsarray of objectoptional
Die Keywords, die durch diesen Aufruf hinzugefügt oder reaktiviert wurden.
idstringoptional
Eindeutige Kennung des verfolgten Keywords.
keywordstringoptional
Der gespeicherte Keyword-Text (in der ersten eingereichten Schreibweise).
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
422Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
post/api/v1/seo/keywords
Ihr API-Schlüssel
Anfragetext*
{
  "data": {
    "keywords": [
      {
        "id": "cm_kw_abc123",
        "keyword": "dentist near me"
      }
    ]
  }
}
v1Ressourcen/SEO/deleteEin verfolgtes Keyword entfernen

Beendet die Verfolgung eines Keywords und löscht dessen gespeicherte Ranking-Berichte.

Ein verfolgtes Keyword entfernen

delete/api/v1/seo/keywords
seo:write
Query-Parameter
keywordIdstringerforderlich
Das zu entfernende verfolgte Keyword.
clientIdstringoptional
Der Kunde des Standorts, dem das Keyword gehört.
Antwort
dataobjectoptional
removedbooleanoptional
Immer true — das Keyword und seine gespeicherten Ranking-Berichte wurden entfernt.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
404Die Ressource wurde nicht gefunden oder gehört nicht zu Ihrer Agentur.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
delete/api/v1/seo/keywords
Ihr API-Schlüssel
keywordId *
clientId
{
  "data": {
    "removed": true
  }
}
v1Ressourcen/SEO/patchRaster-Konfiguration eines Standorts aktualisieren

Aktualisiert die Raster-Messkonfiguration eines Standorts: Rastergröße, Abstand zwischen Punkten, ausgeschlossene Rasterpunkte oder ob Wasser-Rasterpunkte in die Statistik einfließen. Übergeben Sie nur die zu ändernden Felder. Wasserpunkte werden ohnehin immer abgefragt — includeWaterPoints steuert nur, ob sie gezählt und angezeigt werden. Die Lese-Seite wird bereits von GET /api/v1/seo/keywords abgedeckt, dessen Antwort includeWaterPoints bereits enthält.

Raster-Konfiguration eines Standorts aktualisieren

patch/api/v1/seo/config
seo:write
Anfragetext
locationIdstringerforderlich
Der zu konfigurierende Standort.
clientIdstringoptional
Der Kunde des Standorts.
gridSizeinteger (3 | 5 | 7)optional
Rastergröße: 3, 5 oder 7.
distanceKmnumberoptional
Abstand in Kilometern zwischen benachbarten Rasterpunkten.
excludedarray of objectoptional
Von der Messung auszuschließende Rasterpunkte.
rowintegeroptional
Rasterzeilenindex, nullbasiert.
colintegeroptional
Rasterspaltenindex, nullbasiert.
includeWaterPointsbooleanoptional
Ob Wasser-Rasterpunkte in die Statistik einfließen.
Antwort
dataobjectoptional
configobjectoptional
Die Raster-Konfiguration des Standorts nach der Aktualisierung.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
patch/api/v1/seo/config
Ihr API-Schlüssel
Anfragetext*
{
  "data": {
    "config": {
      "id": "cm_cfg_abc123",
      "synupLocationId": "os_9f8e7d6c",
      "clientLocationId": "cm_loc_1",
      "agencyId": "cm_agency_1",
      "placeId": "ChIJtXC2rwgF9YgRNh1YJHlA4vQ",
      "centerLat": 30.2672,
      "centerLng": -97.7431,
      "gridSize": 5,
      "distanceKm": 1.5,
      "excludedPoints": [
        {
          "row": 4,
          "col": 4
        }
      ],
      "generationStartedAt": null,
      "lastRunStatus": "complete",
      "lastError": null,
      "includeWaterPoints": true,
      "lastGeneratedAt": "2026-02-01T06:00:00.000Z",
      "createdAt": "2026-01-10T09:00:00.000Z",
      "updatedAt": "2026-02-05T10:00:00.000Z"
    }
  }
}
v1Ressourcen/SEO/postEinen gebrandeten Ranking-Bericht herunterladen

Erstellt den gebrandeten, in Abschnitte konfigurierbaren Ranking-Bericht — dieselbe Aktion "Bericht herunterladen" in der App. Liefert gerendertes HTML, kein binäres PDF: Das Rendern zu PDF geschieht im Browser (serverseitig läuft kein Headless-Chrome-Renderer), sodass das Erzeugen einer tatsächlichen PDF-Datei beim Aufrufer liegt — dieselbe Einschränkung, die die eigene UI der App hat. Unterscheidet sich von POST /api/v1/seo/reports/generate, das nur einen Hintergrund-Scan des Ranking-Rasters einreiht und kein Dokument liefert.

Einen gebrandeten Ranking-Bericht herunterladen

post/api/v1/seo/reports
seo:read
Anfragetext
locationIdstringerforderlich
Der Standort, über den berichtet werden soll.
presetstringoptional
Voreinstellung für den Zeitraum, z. B. "lastMonth" (Standard).
fromstringoptional
Beginn des benutzerdefinierten Zeitraums (ISO-Datum). Erfordert to.
tostringoptional
Ende des benutzerdefinierten Zeitraums (ISO-Datum). Erfordert from.
keywordsarray of stringoptional
Auf diese verfolgten Keyword-IDs beschränken. Weglassen für alle.
sectionsobjectoptional
Welche Berichtsabschnitte enthalten sein sollen, nach Schlüssel. Weggelassene Schlüssel verwenden die Standardwerte des Berichts.
coverPagebooleanoptional
executiveSummarybooleanoptional
performanceSnapshotbooleanoptional
agencyActivityLogbooleanoptional
gridRankSnapshotsbooleanoptional
keywordPerformanceTablebooleanoptional
monthOverMonthTrendbooleanoptional
competitorLandscapebooleanoptional
aiRecommendationsbooleanoptional
notesstringoptional
Freitext-Notizen, die in den Bericht aufgenommen werden.
localestringoptional
Sprache des gerenderten Berichts. Standardmäßig en.
Antwort
dataobjectoptional
htmlstringoptional
Der gerenderte Bericht als eigenständiges HTML-Dokument.
filenamestringoptional
Vorgeschlagener Dateiname für den Bericht.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
502Der Bericht konnte nicht erstellt werden (ein Datenquellenfehler, kein Client-Fehler).
post/api/v1/seo/reports
Ihr API-Schlüssel
Anfragetext*
{
  "data": {
    "html": "<style>#seo-report{width:100%;...}</style><div id=\"seo-report\"><section class=\"cover\"><h1>Ranking Analytics Report</h1><div class=\"biz\">Acme Dental — Downtown</div></section>...</div>",
    "filename": "Acme_Dental_Downtown_RankingReport_Jan2026_Feb2026.pdf"
  }
}
v1Ressourcen/SEO/getStandortübergreifendes Ranking-Rollup abrufen

Liefert eine zusammenfassende Zeile je Standort mit mindestens einem Ranking-Bericht, optional eingeschränkt auf einen Kunden und/oder Standort-Tags. Ein auf bestimmte Kunden beschränkter Schlüssel muss clientId übergeben.

Standortübergreifendes Ranking-Rollup abrufen

get/api/v1/seo/rollup
seo:read
Query-Parameter
clientIdstringoptional
Ergebnisse auf einen Kunden beschränken. Ist Ihr Schlüssel auf bestimmte Kunden beschränkt, ist dies erforderlich.
tagsstringoptional
Kommagetrennte Liste von Standort-Tag-Namen. Nur Standorte mit mindestens einem dieser Tags werden einbezogen.
Antwort
dataobjectoptional
countnumberoptional
Anzahl der zurückgegebenen Zeilen.
rowsarray of objectoptional
Eine Zeile je Standort mit mindestens einem Ranking-Bericht.
idstringoptional
Eindeutige Kennung des Standorts.
locationNamestringoptional
Der Firmenname des Standorts.
citystringoptional
Stadt, oder null.
avgRanknumberoptional
Mittlerer durchschnittlicher Rang über die aktiven Keywords des Standorts, oder null.
top3Pctnumberoptional
Mittlerer Prozentsatz der Rasterpunkte in den Top 3 über die Keywords des Standorts, oder null.
top10Pctnumberoptional
Mittlerer Prozentsatz der Rasterpunkte in den Top 10 über die Keywords des Standorts, oder null.
bestKeywordobjectoptional
Das bestrankende Keyword des Standorts, oder null.
keywordstringoptional
avgRanknumberoptional
tagsarray of stringoptional
Die internen Tags des Standorts.
Fehler
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
get/api/v1/seo/rollup
Ihr API-Schlüssel
clientId
tags
{
  "data": {
    "count": 2,
    "rows": [
      {
        "id": "cm_loc_1",
        "locationName": "Acme Dental — Downtown",
        "city": "Austin",
        "avgRank": 4.2,
        "top3Pct": 44,
        "top10Pct": 78,
        "bestKeyword": {
          "keyword": "dentist near me",
          "avgRank": 4.2
        },
        "tags": [
          "priority",
          "downtown"
        ]
      }
    ]
  }
}
v1Ressourcen/SEO/getWettbewerber-Rangliste eines Standorts abrufen

Liefert die Unternehmen, die das Ranking-Raster dieses Standorts für sein zuletzt verfolgtes Keyword dominieren, gerankt danach, wie viel des Rasters sie in den Top 3 belegen. Enthält das eigene Unternehmen (isYou) zum Vergleich und markiert Einträge, die bereits in Ihrer Wettbewerber-Verfolgungsliste stehen, mit deren Registrierungs-ID.

Wettbewerber-Rangliste eines Standorts abrufen

get/api/v1/seo/competitors
seo:read
Query-Parameter
locationIdstringerforderlich
Der abzurufende Standort.
clientIdstringoptional
Der Kunde des Standorts.
Antwort
dataobjectoptional
countnumberoptional
Anzahl der zurückgegebenen Wettbewerber.
competitorsarray of objectoptional
Die Wettbewerber-Rangliste, einschließlich des eigenen Unternehmens.
idstringoptional
Eine Kennung für dieses Unternehmen (seine Place-ID oder ein abgeleiteter Schlüssel, wenn keine Place-ID verfügbar ist).
competitorIdstringoptional
ID in Ihrer Wettbewerber-Verfolgungsliste, nur vorhanden, wenn dieses Unternehmen dort bereits erfasst ist.
namestringoptional
Firmenname.
isYoubooleanoptional
Ob diese Zeile das eigene Unternehmen ist.
ratingnumberoptional
Sternebewertung, oder null.
reviewCountnumberoptional
Anzahl der Bewertungen, oder null.
avgRanknumberoptional
Durchschnittlicher Rang über die Rasterpunkte, an denen dieses Unternehmen erschien, oder null.
top3Pctnumberoptional
Prozentsatz der Rasterpunkte, an denen dieses Unternehmen in den Top 3 rankt, gemittelt über alle verfolgten Keywords.
gridPointsnumberoptional
Anzahl der Rasterpunkte, an denen dieses Unternehmen erschien.
categorystringoptional
Unternehmenskategorie, oder null.
websitestringoptional
Website des Unternehmens, oder null (wird von der Datenquelle für die lokale Suche nicht zurückgegeben).
keywordBreakdownarray of objectoptional
Die Top-3-Abdeckung dieses Unternehmens, aufgeschlüsselt je verfolgtem Keyword.
keywordstringoptional
Das verfolgte Keyword.
top3Pctnumberoptional
Prozentsatz der Rasterpunkte dieses Keywords, an denen dieses Unternehmen in den Top 3 rankt.
featureComparisonarray of objectoptional
Merkmalsvergleichszeilen gegenüber Ihrem Unternehmen, falls vorhanden.
featurestringoptional
competitorbooleanoptional
youbooleanoptional
hoursComparisonarray of objectoptional
Vergleichszeilen der Öffnungszeiten gegenüber Ihrem Unternehmen, falls vorhanden.
daystringoptional
competitorstringoptional
youstringoptional
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
get/api/v1/seo/competitors
Ihr API-Schlüssel
locationId *
clientId
{
  "data": {
    "count": 2,
    "competitors": [
      {
        "id": "cm_comp_1",
        "competitorId": "cm_competitor_1",
        "name": "Acme Dental — Downtown",
        "isYou": true,
        "rating": 4.6,
        "reviewCount": 210,
        "avgRank": 4.2,
        "top3Pct": 44,
        "gridPoints": 25,
        "category": "Dentist",
        "website": "https://acmedental.example.com",
        "keywordBreakdown": [
          {
            "keyword": "dentist near me",
            "top3Pct": 60
          }
        ],
        "featureComparison": [
          {
            "feature": "Online booking",
            "competitor": false,
            "you": true
          }
        ],
        "hoursComparison": [
          {
            "day": "Monday",
            "competitor": "9am–5pm",
            "you": "8am–6pm"
          }
        ]
      }
    ]
  }
}
get/api/v1/seo/competitors/trends
Ihr API-Schlüssel
locationId *
clientId
{
  "data": {
    "months": [
      "2026-01",
      "2026-02"
    ],
    "competitors": [
      {
        "placeId": "ChIJtXC2rwgF9YgRNh1YJHlA4vQ",
        "name": "Acme Dental — Downtown",
        "isYou": true,
        "monthly": [
          5.1,
          4.2
        ]
      }
    ]
  }
}
v1Ressourcen/SEO/getUnternehmen an einem Rasterpunkt abrufen

Liefert die an einer einzelnen Rasterzelle für ein Keyword erfassten lokalen Suchergebnisse, in Rangfolge.

Unternehmen an einem Rasterpunkt abrufen

get/api/v1/seo/grid-point
seo:read
Query-Parameter
locationIdstringerforderlich
Der abzurufende Standort.
keywordIdstringerforderlich
Das verfolgte Keyword, zu dessen Raster dieser Punkt gehört.
rowintegererforderlich
Zeilenindex des Punkts im Raster.
colintegererforderlich
Spaltenindex des Punkts im Raster.
clientIdstringoptional
Der Kunde des Standorts.
monthstringoptional
Das Ergebnis auf diesen Monat (YYYY-MM) festlegen, statt auf den zuletzt gemessenen Bericht des Keywords.
Antwort
dataobjectoptional
countnumberoptional
Anzahl der zurückgegebenen Unternehmen.
businessesarray of objectoptional
An diesem Rasterpunkt gerankte Unternehmen, in Rangfolge.
idstringoptional
Eine Kennung für dieses Unternehmen (seine Place-ID, sein Name oder seine Listenposition).
ranknumberoptional
Der Rang dieses Unternehmens an diesem Rasterpunkt (1 = oberste Position).
namestringoptional
Firmenname.
photoUrlstringoptional
Foto-URL, oder null (wird von der Datenquelle für die lokale Suche nicht zurückgegeben).
ratingnumberoptional
Sternebewertung, oder null.
reviewCountnumberoptional
Anzahl der Bewertungen, oder null.
categorystringoptional
Unternehmenskategorie, oder null.
addressstringoptional
Straßenadresse, oder null.
websitestringoptional
Website des Unternehmens, oder null (wird von der Datenquelle für die lokale Suche nicht zurückgegeben).
isYoubooleanoptional
Ob diese Zeile das eigene Unternehmen ist.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
get/api/v1/seo/grid-point
Ihr API-Schlüssel
locationId *
keywordId *
row *
col *
clientId
month
{
  "data": {
    "count": 1,
    "businesses": [
      {
        "id": "cm_biz_1",
        "rank": 3,
        "name": "Acme Dental — Downtown",
        "photoUrl": null,
        "rating": 4.6,
        "reviewCount": 210,
        "category": "Dentist",
        "address": "123 Main St, Austin, TX 78701",
        "website": null,
        "isYou": true
      }
    ]
  }
}
v1Ressourcen/SEO/postRanking-Raster-Bericht eines Standorts neu generieren

Löst einen Hintergrund-Rescan des lokalen Ranking-Rasters für einen Standort und/oder ein bestimmtes verfolgtes Keyword aus. Dies ist fire-and-forget: Der Aufruf kehrt sofort zurück, sobald der Job eingereiht ist, und der neue Bericht trifft asynchron ein — fragen Sie danach GET /api/v1/seo/keywords (oder GET /api/v1/seo/competitors usw.) per Polling ab, um ihn zu sehen.

Ranking-Raster-Bericht eines Standorts neu generieren

post/api/v1/seo/reports/generate
seo:write
Anfragetext
locationIdstringoptional
Das Raster jedes aktiven Keywords für diesen Standort neu generieren. Optional, wenn keywordId angegeben ist.
keywordIdstringoptional
Das Raster nur für dieses eine verfolgte Keyword neu generieren. Optional, wenn locationId angegeben ist.
monthstringoptional
Das Ranking-Raster für diesen Monat (YYYY-MM) statt für den aktuellen Monat generieren.
clientIdstringoptional
Der Kunde des Standorts (bzw. des Standorts, dem das Keyword gehört).
Antwort
dataobjectoptional
generatingbooleanoptional
Immer true — ein Hintergrund-Generierungsjob wurde eingereiht.
Fehler
400Der Anfrage fehlt ein erforderlicher Parameter, oder sie ist anderweitig fehlerhaft.
401API-Schlüssel fehlt, ist ungültig, abgelaufen oder widerrufen.
403Dem Schlüssel fehlt die erforderliche Berechtigung, oder er ist für diesen Kunden/Standort nicht autorisiert.
404Die Ressource wurde nicht gefunden oder gehört nicht zu Ihrer Agentur.
429Zu viele Anfragen. Versuchen Sie es nach der im Retry-After-Header angegebenen Anzahl Sekunden erneut.
post/api/v1/seo/reports/generate
Ihr API-Schlüssel
Anfragetext
{
  "data": {
    "generating": true
  }
}