A page title compared with the top 5 Google results
GET
/sites/{siteId}/pages/{pageId}/title-compare- Scope
pages:read- MCP tool
title_compare
A page title compared with the top 5 Google results The stored comparison (null until it was run once) and the searches it can be run for, best first. Reading never costs anything.
Parameters
| Name | In | Details |
|---|---|---|
siteIdRequired | path | stringWebsite id, from GET /sites. |
pageIdRequired | path | stringPage id, from GET /pages or GET /pages/findings. |
Response
200 · application/json
| Field | Details |
|---|---|
page | object · required |
page.id | string · required |
page.url | address (URL) · required |
page.title | string or null · required |
keywordChoices | list of object · required |
keywordChoices[].keyword | string · required |
keywordChoices[].source | tracked | keyword | search_console · required; tracked: a tracked keyword that ranks with this page; keyword: a keyword whose Search Console page is this one; search_console: a search the page appears for |
keywordChoices[].clicks | integer · required; Search Console clicks, 28 days |
keywordChoices[].impressions | integer · required; Search Console impressions, 28 days |
keywordChoices[].position | number or null · required; Tracked position, else the 28-day average |
keywordChoices[].storedResults | date (YYYY-MM-DD) or null · required; Day of stored results that a run would reuse for free |
comparison | object · required |
comparison.keyword | string |
comparison.locationCode | number |
comparison.languageCode | string |
comparison.comparedAt | string |
comparison.results | object |
comparison.results.date | string |
comparison.results.source | string |
comparison.results.checkUrl | string |
comparison.results.top | list of objects |
comparison.results.top[].position | number |
comparison.results.top[].domain | string |
comparison.results.top[].url | string |
comparison.results.top[].title | string |
comparison.results.top[].length | number |
comparison.ours | object |
comparison.ours.title | string |
comparison.ours.length | number |
comparison.ours.position | |
comparison.ours.positionSource | |
comparison.findings | list of objects |
comparison.findings[].key | string |
comparison.findings[].values | object |
comparison.findings[].values.ours | number |
comparison.findings[].values.min | number |
comparison.findings[].values.max | number |
comparison.notes | list of strings |
comparison.notesLanguage | string |
comparison.suggestions | list of objects |
comparison.suggestions[].title | string |
comparison.suggestions[].length | number |
comparison.suggestions[].why | string |
comparison.resultsCostUsd | number |
link | address (URL) · required; The page in the app, at the comparison |
Errors
| Status | Meaning |
|---|---|
401 | Missing, unknown or revoked key. Codes: missing_key, invalid_key. |
403 | The key lacks the scope, covers another website, or its owner lost access. Codes: missing_scope, other_site, owner_left, no_owner, forbidden. |
404 | Not found. Codes: not_found. |
429 | Too 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/pages/PAGE_ID/title-compare"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare", {
headers: { Authorization: "Bearer mr_ws_…" },
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.get(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare",
headers={"Authorization": "Bearer mr_ws_…"},
)
res.raise_for_status()
data = res.json()<?php
$ch = curl_init("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare");
curl_setopt_array($ch, [
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…"],
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.get("https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare", { headers: { Authorization: "Bearer mr_ws_…" } });Example response
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/learn/what-is-aeo/",
"title": "What is AEO? A simple explanation"
},
"keywordChoices": [
{
"keyword": "what is aeo",
"source": "search_console",
"clicks": 0,
"impressions": 412,
"position": 88.4,
"storedResults": "2026-10-09"
}
],
"comparison": {
"keyword": "what is aeo",
"locationCode": 2840,
"languageCode": "en",
"comparedAt": "2026-10-09T08:12:51.000Z",
"results": {
"date": "2026-10-09",
"source": "live",
"checkUrl": "https://www.google.com/search?q=what%20is%20aeo&num=10&hl=en&gl=US",
"top": [
{
"position": 1,
"domain": "enterprise-search.example",
"url": "https://enterprise-search.example/aeo-guide",
"title": "What is Answer Engine Optimization? Enterprise Guide to AEO",
"length": 59
},
{
"position": 2,
"domain": "searchfuture.example",
"url": "https://searchfuture.example/blog/what-is-aeo",
"title": "What is answer engine optimization (AEO)? Understanding AEO for the future of search",
"length": 84
},
{
"position": 3,
"domain": "aeoguide.example",
"url": "https://aeoguide.example/",
"title": "Answer Engine Optimization: Complete AEO Guide [2026]",
"length": 53
},
{
"position": 4,
"domain": "marketingdocs.example",
"url": "https://marketingdocs.example/aeo",
"title": "What Is Answer Engine Optimization (AEO)? A Complete Guide",
"length": 58
},
{
"position": 5,
"domain": "aisearchtools.example",
"url": "https://aisearchtools.example/learn/aeo",
"title": "Show Up in AI Search with Answer Engine Optimization (AEO)",
"length": 58
}
]
},
"ours": {
"title": "What is AEO? A simple explanation",
"length": 33,
"position": null,
"positionSource": null
},
"findings": [
{
"key": "length",
"values": {
"ours": 33,
"min": 53,
"max": 84
}
},
{
"key": "phrase",
"values": {
"phrase": "answer engine optimization",
"count": 5,
"n": 5
}
},
{
"key": "phrase",
"values": {
"phrase": "guide",
"count": 3,
"n": 5
}
},
{
"key": "farDown",
"values": {
"position": 0
}
}
],
"notes": [
"Every top result spells out \"Answer Engine Optimization\"; your title only says \"AEO\", so people who search the full name do not see their words."
],
"notesLanguage": "en",
"suggestions": [
{
"title": "What is AEO? Answer Engine Optimization Explained",
"length": 49,
"why": "Keeps your plain question and spells out the full name people search for."
},
{
"title": "What is AEO (Answer Engine Optimization)? A Simple Guide",
"length": 56,
"why": "Adds the full name and the word guide that most top results use, in your simple voice."
}
],
"resultsCostUsd": 0.002
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f#title-compare"
}{
"error": {
"code": "missing_key",
"message": "Send the key as Authorization: Bearer mr_site_…"
}
}{
"error": {
"code": "missing_scope",
"message": "This key does not have the scope this call needs."
}
}{
"error": {
"code": "not_found",
"message": "Page not found. Use a page_id from page_findings or list_pages, or the exact crawled url."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}The MCP server does the same with the tool title_compare.