SEO
Haga seguimiento del posicionamiento de palabras clave en búsquedas locales sobre una cuadrícula geográfica, y de la posición frente a la competencia.
Devuelve las palabras clave seguidas, la tendencia de posición mensual, la cuadrícula de posicionamiento y las tarjetas de estadísticas de una ubicación. Indique keywordId para limitar la cuadrícula a una sola palabra clave, o month (YYYY-MM) para fijarla a un mes específico en lugar del último informe medido de cada palabra clave.
Obtener el resumen de posicionamiento de una ubicación
/api/v1/seo/keywords{
"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
}
}Empieza a seguir una o varias palabras clave en la cuadrícula de posicionamiento en búsquedas locales de una ubicación, configurando el tamaño de la cuadrícula y el radio la primera vez que se configura la ubicación. Las palabras clave se deduplican sin distinción de mayúsculas y se limitan a 25 por ubicación. Dispara un escaneo de posicionamiento en segundo plano para cada palabra clave recién agregada — consulte GET /api/v1/seo/keywords después para ver los resultados.
Agregar palabras clave seguidas a una ubicación
/api/v1/seo/keywords{
"data": {
"keywords": [
{
"id": "cm_kw_abc123",
"keyword": "dentist near me"
}
]
}
}Deja de seguir una palabra clave y elimina sus informes de posicionamiento almacenados.
Eliminar una palabra clave seguida
/api/v1/seo/keywords{
"data": {
"removed": true
}
}Actualiza la configuración de medición de la cuadrícula de una ubicación: tamaño de cuadrícula, distancia entre puntos, puntos excluidos, o si los puntos de agua cuentan en las estadísticas. Indique solo los campos que desea cambiar. Los puntos de agua siempre se rastrean de todos modos — includeWaterPoints solo controla si se cuentan y se muestran. El lado de lectura ya está cubierto por GET /api/v1/seo/keywords, cuya respuesta ya incluye includeWaterPoints.
Actualizar la configuración de cuadrícula de una ubicación
/api/v1/seo/config{
"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"
}
}
}Genera el informe de posicionamiento con marca y secciones configurables — la misma acción "Descargar informe" de la aplicación. Devuelve HTML renderizado, no un PDF binario: la conversión a PDF ocurre en el navegador (no hay un renderizador Chrome sin interfaz en el servidor), así que convertir esto en un archivo PDF real corre por cuenta de quien llama, la misma limitación que tiene la propia interfaz de la aplicación. Distinto de POST /api/v1/seo/reports/generate, que solo encola un escaneo de la cuadrícula de posicionamiento en segundo plano y no devuelve ningún documento.
Descargar un informe de posicionamiento con marca
/api/v1/seo/reports{
"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"
}
}Devuelve una fila de resumen por cada ubicación que tenga al menos un informe de posicionamiento, opcionalmente limitada a un cliente y/o etiquetas de ubicación. Una clave restringida a clientes específicos debe indicar clientId.
Obtener el resumen de posicionamiento de todas las ubicaciones
/api/v1/seo/rollup{
"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"
]
}
]
}
}Devuelve los negocios que dominan la cuadrícula de posicionamiento de esta ubicación para su palabra clave seguida más reciente, clasificados por cuánto de la cuadrícula ocupan en el top 3. Incluye su propio negocio (isYou) para comparación, y etiqueta las entradas que ya están en su registro de competidores seguidos con su ID de registro.
Obtener la tabla de clasificación de competidores de una ubicación
/api/v1/seo/competitors{
"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"
}
]
}
]
}
}Devuelve la posición promedio mensual de cada competidor a lo largo del historial de posicionamiento seguido de esta ubicación (hasta los últimos 12 meses medidos), para el gráfico de tendencia de posición. Incluye su propio negocio (isYou).
Obtener la tendencia de posición de los competidores a lo largo del tiempo
/api/v1/seo/competitors/trends{
"data": {
"months": [
"2026-01",
"2026-02"
],
"competitors": [
{
"placeId": "ChIJtXC2rwgF9YgRNh1YJHlA4vQ",
"name": "Acme Dental — Downtown",
"isYou": true,
"monthly": [
5.1,
4.2
]
}
]
}
}Devuelve los resultados de búsqueda local capturados en una sola celda de la cuadrícula para una palabra clave, en orden de posición.
Obtener los negocios posicionados en un punto de la cuadrícula
/api/v1/seo/grid-point{
"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
}
]
}
}Dispara un nuevo rastreo en segundo plano de la cuadrícula de posicionamiento en búsquedas locales para una ubicación y/o una palabra clave seguida específica. Esto es de disparar y olvidar: la llamada regresa de inmediato una vez encolado el trabajo, y el nuevo informe llega de forma asíncrona — consulte después GET /api/v1/seo/keywords (o GET /api/v1/seo/competitors, etc.) para verlo.
Regenerar el informe de la cuadrícula de posicionamiento de una ubicación
/api/v1/seo/reports/generate{
"data": {
"generating": true
}
}