Documentación para desarrolladores

Ingresos por página

GET/sites/{siteId}/analytics/pages
Permiso
analytics:read
Herramienta MCP
analytics_pages

Conversions and revenue per landing page (GA4) with Search Console Sessions, key events, purchases and revenue per landing page from the website's connected GA4 property (read live with the Data API, then cached: 12 hours for settled ranges, an hour for recent ones), joined with the stored Search Console clicks, impressions, CTR and position of the same path and days, so content can be ranked by value. GA4 counts days in the property's time zone, Search Console in Pacific time.

Las descripciones vienen del documento OpenAPI y están en inglés.

Parámetros

NombreDóndeDetalles
siteIdObligatoriorutastringWebsite id, from GET /sites.
startquerydate (YYYY-MM-DD)First day, YYYY-MM-DD (from works too). Default: the 28 days ending 3 days ago (the last day of final Search Console data); with end alone, the 28 days ending there. At most 16 months.
endquerydate (YYYY-MM-DD)Last day, YYYY-MM-DD (to works too), not in the future. When it is after the last final Search Console day, the answer has searchConsoleFinalThrough.
channelqueryorganicalldefault organicorganic: sessions whose default channel group is Organic Search; all: every channel.
sortquerysessions-sessionsrevenue-revenuepurchase_revenue-purchase_revenuepurchases-purchaseskey_events-key_eventsconversion_rate-conversion_raterevenue_per_session-revenue_per_sessionclicks-clicksimpressions-impressionsposition-positiondefault sessionsA leading - sorts high to low and wins over order (-revenue = sort=revenue&order=desc).
orderqueryascdescDefault desc (asc for position). Rows without a value come last.
limitqueryintegerdefault 100, min 1, max 1000Rows per page, 1 to 1,000.
offsetqueryintegerdefault 0, min 0, max 1000000Rows to skip.
cursorquerystringnextCursor from the previous page, unchanged (instead of offset).

Respuesta

200 · application/json

CampoDetalles
periodobject · required; The range read
period.fromdate (YYYY-MM-DD) · required; First day
period.todate (YYYY-MM-DD) · required; Last day
channelorganic | all · required; organic: Organic Search sessions only; all: every channel
propertystring · required; GA4 property, as properties/<id>
currencystring · required; Currency of revenue figures (ISO 4217)
purchasesMetricecommercePurchases | transactions | · required; Which GA4 metric filled purchases; null when none
outcomeEventslist of string · required; Key events chosen as outcomes for this website
totalsobject · required; Sums over all pages, not only this page of rows
totals.pagesinteger · required; Landing pages
totals.sessionsnumber · required; Sessions
totals.keyEventsnumber · required; Key events
totals.purchasesnumber or null · required; Purchases; null without a purchase metric
totals.revenuenumber · required; Revenue in currency
sortsessions | revenue | purchase_revenue | purchases | key_events | conversion_rate | revenue_per_session | clicks | impressions | position · required; Sort field
orderasc | desc · required; Sort direction
offsetinteger · required; Rows skipped
limitinteger · required; Rows per page
totalinteger · required; Landing pages in all
nextOffsetinteger or null · required; offset of the next page; null after the last
nextCursorstring or null · required; cursor of the next page; null after the last
rowslist of values · required
rows[].pagestring
rows[].urlstring
rows[].sessionsnumber
rows[].engagedSessionsnumber
rows[].engagementRatenumber
rows[].keyEventsnumber
rows[].keyEventsByNamelist of objects
rows[].keyEventsByName[].namestring
rows[].keyEventsByName[].countnumber
rows[].conversionRatenumber
rows[].purchasesnumber
rows[].purchaseRevenuenumber
rows[].revenuenumber
rows[].revenuePerSessionnumber
rows[].clicksnumber
rows[].impressionsnumber
rows[].ctrnumber
rows[].positionnumber
searchConsolejoined | unavailable · required; Whether Search Console figures were joined
cachedtrue or false · required; The GA4 answer came from the cache
fetchedAtstring · required; When GA4 was read
notestring · required; How the numbers are computed
linkstring · required; The Analytics screen in the app

Notas

GET /sites/{siteId}/analytics/pages lee la propiedad de Google Analytics (GA4) conectada del sitio web y le une las cifras de Search Console que MonoRanks guarda para la misma página y los mismos días, para que puedas ordenar el contenido por lo que valen sus visitas. Necesita el permiso analytics:read, que es distinto de search:read.

Cada fila tiene page (la ruta de la página de destino tal como la da GA4), url, sessions, engagedSessions, engagementRate, keyEvents, keyEventsByName, conversionRate (proporción de sesiones con un evento clave), purchases, purchaseRevenue, revenue, revenuePerSession, y los datos de Search Console clicks, impressions, ctr y position. Alrededor de las filas: period, channel, property, currency, totals, total, nextOffset, nextCursor, searchConsole (joined o unavailable), cached y fetchedAt.

Qué Detalles
channel organic (por defecto, sesiones de Organic Search) o all.
sort sessions (por defecto), revenue, purchase_revenue, purchases, key_events, conversion_rate, revenue_per_session, clicks, impressions o position. Un - delante ordena de mayor a menor (-revenue). order es asc o desc.
Periodo start y end como en los temas, como máximo 16 meses.
  • Las respuestas se guardan en caché, así que paginar y ordenar el mismo rango no vuelve a gastar cuota de GA4. MonoRanks deja de consultar GA4 cuando se ha usado el 80 % del presupuesto diario de API de la propiedad, para que la importación diaria siga funcionando.
Qué Detalles
Errores 409 ga4_not_connected (conecta Google Analytics en la pantalla Visitas al sitio del sitio web), 409 ga4_no_access (Google niega el acceso; vuelve a conectar con acceso de lectura), 429 ga4_quota (la cuota de la propiedad está agotada por ahora), 502 ga4_unavailable (Google no respondió).

Errores

EstadoSignificado
400Bad request. Codes: bad_period, period_too_long, bad_channel, bad_limit, bad_sort, bad_order, bad_cursor, bad_paging, ga4_rejected.
401Missing, unknown or revoked key. Codes: missing_key, invalid_key.
403The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden.
404Not found. Codes: not_found.
409Conflict with the current state. Codes: ga4_not_connected, ga4_no_access.
429A limit is reached. rate_limited: too many requests this hour for this key. Codes: rate_limited, ga4_quota.
502An outside service did not answer. Codes: ga4_unavailable.

Petición de ejemplo

curl \
  -H "Authorization: Bearer mr_ws_…" \
  "https://app.monoranks.com/api/v1/sites/SITE_ID/analytics/pages"

Respuesta de ejemplo

{
  "period": {
    "from": "2026-09-06",
    "to": "2026-10-03"
  },
  "channel": "organic",
  "property": "properties/348811",
  "currency": "USD",
  "purchasesMetric": "ecommercePurchases",
  "outcomeEvents": [
    "purchase",
    "generate_lead"
  ],
  "totals": {
    "pages": 214,
    "sessions": 6120,
    "keyEvents": 188,
    "purchases": 74,
    "revenue": 61240.5
  },
  "sort": "revenue",
  "order": "desc",
  "offset": 0,
  "limit": 2,
  "total": 214,
  "nextOffset": 2,
  "nextCursor": "WyJnYTRwYWdlcyIsMiwicmV2ZW51ZSIsImRlc2MiXQ",
  "rows": [
    {
      "page": "/bikes/gravel",
      "url": "https://acmebikes.com/bikes/gravel",
      "sessions": 820,
      "engagedSessions": 590,
      "engagementRate": 0.7195,
      "keyEvents": 41,
      "keyEventsByName": [
        {
          "name": "purchase",
          "count": 22
        },
        {
          "name": "generate_lead",
          "count": 19
        }
      ],
      "conversionRate": 0.0488,
      "purchases": 22,
      "purchaseRevenue": 28930,
      "revenue": 28930,
      "revenuePerSession": 35.2805,
      "clicks": 655,
      "impressions": 18120,
      "ctr": 0.036148,
      "position": 9.1
    },
    {
      "page": "/guides/how-to-choose-a-gravel-bike",
      "url": "https://acmebikes.com/guides/how-to-choose-a-gravel-bike",
      "sessions": 1104,
      "engagedSessions": 801,
      "engagementRate": 0.7255,
      "keyEvents": 12,
      "keyEventsByName": [
        {
          "name": "purchase",
          "count": 6
        }
      ],
      "conversionRate": 0.0109,
      "purchases": 6,
      "purchaseRevenue": 7410,
      "revenue": 7410,
      "revenuePerSession": 6.712,
      "clicks": 912,
      "impressions": 24300,
      "ctr": 0.037531,
      "position": 6.8
    }
  ],
  "searchConsole": "joined",
  "cached": true,
  "fetchedAt": "2026-10-06T07:55:12.000Z",
  "note": "GA4 figures per landing page (path), read live from the GA4 property and cached; …",
  "link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/analytics"
}

El servidor MCP hace lo mismo con la herramienta analytics_pages.