Developer docs

Get the search summary

GET/sites/{siteId}/search/summary
Scope
search:read

Search Console totals vs the previous period, with top pages and queries Clicks, impressions, CTR and position over the last 7, 28 or 90 days (ending at the last imported day) next to the period before, with the 10 top pages and queries. Without stored Search Console data the answer is { connected: false, note }.

Parameters

NameInDetails
siteIdRequiredpathstringWebsite id, from GET /sites.
daysquery72890default 28Length of the period in days. Other values fall back to 28.

Response

200 · application/json

FieldDetails
connectedtrue or false
periodobject
period.fromstring
period.tostring
previousobject
previous.fromstring
previous.tostring
totalsobject
totals.clicksnumber
totals.impressionsnumber
totals.ctrnumber
totals.positionnumber
previousTotalsobject
previousTotals.clicksnumber
previousTotals.impressionsnumber
previousTotals.ctrnumber
previousTotals.positionnumber
topPageslist of objects
topPages[].keystring
topPages[].clicksnumber
topPages[].impressionsnumber
topPages[].ctrnumber
topPages[].positionnumber
topPages[].prevClicksnumber
topPages[].prevPositionnumber
topQuerieslist of objects
topQueries[].keystring
topQueries[].clicksnumber
topQueries[].impressionsnumber
topQueries[].ctrnumber
topQueries[].positionnumber
topQueries[].prevClicksnumber
topQueries[].prevPositionnumber
topQueries[].topPagestring
notestring

Errors

StatusMeaning
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.
429Too many requests this hour for this key. Codes: rate_limited.

Example request

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

Example response

{
  "connected": true,
  "period": {
    "from": "2026-09-06",
    "to": "2026-10-03"
  },
  "previous": {
    "from": "2026-08-09",
    "to": "2026-09-05"
  },
  "totals": {
    "clicks": 4820,
    "impressions": 162400,
    "ctr": 0.0297,
    "position": 14.2
  },
  "previousTotals": {
    "clicks": 4310,
    "impressions": 151900,
    "ctr": 0.0284,
    "position": 15.1
  },
  "topPages": [
    {
      "key": "https://acmebikes.com/guides/how-to-choose-a-gravel-bike",
      "clicks": 912,
      "impressions": 24300,
      "ctr": 0.0375,
      "position": 6.8,
      "prevClicks": 840,
      "prevPosition": 7.4
    },
    {
      "key": "https://acmebikes.com/bikes/gravel",
      "clicks": 655,
      "impressions": 18120,
      "ctr": 0.0361,
      "position": 9.1,
      "prevClicks": 702,
      "prevPosition": 8.7
    }
  ],
  "topQueries": [
    {
      "key": "acme bikes",
      "clicks": 540,
      "impressions": 1980,
      "ctr": 0.2727,
      "position": 1.2,
      "prevClicks": 512,
      "prevPosition": 1.3,
      "topPage": "https://acmebikes.com/"
    },
    {
      "key": "best gravel bike under 1500",
      "clicks": 214,
      "impressions": 8650,
      "ctr": 0.0247,
      "position": 7.9,
      "prevClicks": 168,
      "prevPosition": 9.4,
      "topPage": "https://acmebikes.com/guides/how-to-choose-a-gravel-bike"
    }
  ],
  "note": "CTR and position are computed from sums over the period, never averaged across rows."
}

The MCP server does the same with the tool search_summary.