Compare a page title with the top 5 Google results
POST
/sites/{siteId}/pages/{pageId}/title-compare- Berechtigung
actions:apply- MCP-Tool
run_title_compare
Compare a page title with the top 5 Google results Runs the comparison and stores it, like "Compare title with top results" in the app. Reuses Google results for the keyword stored in the last 7 days (rerun: last day only, and new suggestions); otherwise uses one keyword lookup from the monthly plan, inside the spending limits. Nothing is written to the website.
Die Beschreibungen kommen aus dem OpenAPI-Dokument und sind auf Englisch.
Parameter
| Name | Ort | Details |
|---|---|---|
siteIdPflicht | Pfad | stringWebsite id, from GET /sites. |
pageIdPflicht | Pfad | stringPage id, from GET /pages or GET /pages/findings. |
Anfrage (Body)
| Feld | Details |
|---|---|
keyword | string · at most 80 characters; The search to compare for; default: the page's main keyword (the first of keywordChoices) |
rerun | true or false · Ask for fresh results (older than a day) and new suggestions |
language | en | de | es | fa · Language of the notes and reasons; default en |
{
"keyword": "what is aeo",
"language": "en"
}Antwort
200 · application/json
| Feld | Details |
|---|---|
page | object · required |
page.id | string · required |
page.url | address (URL) · required |
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 |
cost | object · required |
cost.usd | number · required; What this run paid for results |
cost.lookups | integer · required; Keyword lookups used: 1, or 0 when stored results were reused |
cost.reused | true or false · required; Stored results were reused |
aiNote | string or null · required; Why notes and suggestions are missing (the daily AI limit, the AI could not answer); the measured findings are still there |
link | address (URL) · required |
Fehler
| Status | Bedeutung |
|---|---|
400 | Bad request. Codes: missing_argument, bad_keyword, no_keyword. |
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. |
422 | The request cannot be carried out. Codes: unsupported_location, no_results. |
429 | A limit is reached. rate_limited: too many requests this hour for this key. Codes: rate_limited, lookups, workspace_cap, global_cap. |
502 | An outside service did not answer. Codes: failed. |
503 | Switched off for now. Codes: no_provider. |
Beispielanfrage
curl -X POST \
-H "Authorization: Bearer mr_ws_…" \
-H "Content-Type: application/json" \
-d '{"keyword":"what is aeo","language":"en"}' \
"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", {
method: "POST",
headers: { Authorization: "Bearer mr_ws_…", "Content-Type": "application/json" },
body: JSON.stringify({
"keyword": "what is aeo",
"language": "en"
}),
});
if (!res.ok) throw new Error((await res.json()).error.message);
const data = await res.json();import requests
res = requests.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare",
headers={"Authorization": "Bearer mr_ws_…"},
json={
"keyword": "what is aeo",
"language": "en",
},
)
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_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => ["Authorization: Bearer mr_ws_…", "Content-Type: application/json"],
CURLOPT_POSTFIELDS => '{"keyword":"what is aeo","language":"en"}',
CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);import axios from "axios";
const { data } = await axios.post(
"https://app.monoranks.com/api/v1/sites/SITE_ID/pages/PAGE_ID/title-compare",
{
"keyword": "what is aeo",
"language": "en"
},
{ headers: { Authorization: "Bearer mr_ws_…" } },
);Beispielantwort
{
"page": {
"id": "c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f",
"url": "https://acmebikes.com/learn/what-is-aeo/"
},
"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
},
"cost": {
"usd": 0.002,
"lookups": 1,
"reused": false
},
"aiNote": null,
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/pages/c7a9e1b3-5d7f-4b9c-8e1a-3c5e7a9b1d2f#title-compare"
}{
"error": {
"code": "missing_argument",
"message": "page_id or url is required."
}
}{
"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": "unsupported_location",
"message": "Google results are not available for Iran, so titles cannot be compared there.",
"country": "Iran"
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}{
"error": {
"code": "failed",
"message": "Google results could not be fetched right now. Try again in a few minutes."
}
}{
"error": {
"code": "no_provider",
"message": "Google results are not available on this server yet."
}
}Der MCP-Server macht dasselbe mit dem Tool run_title_compare.