Outreach-Ziele auflisten
/sites/{siteId}/outreach- Berechtigung
search:read- MCP-Tool
list_outreach_targets
Outreach targets, ranked, with why Pages and sites worth asking for a link or a mention: open ones by score, then contacted, added, declined; targets the source no longer lists last, when included. Spam-flagged, script-made and gone targets are left out unless include names them; counts and totals leave out what is hidden. MonoRanks says who and why; it does not send email or look up contacts.
Die Beschreibungen kommen aus dem OpenAPI-Dokument und sind auf Englisch.
Parameter
| Name | Ort | Details |
|---|---|---|
siteIdPflicht | Pfad | stringWebsite id, from GET /sites. |
status | Query | to_contactcontactedaddeddeclinedOnly this status. |
source | Query | ai_sourcebest_listlink_gaplost_linkmanualOnly this source. |
tag | Query | stringat most 40 characters, pattern ^[a-z0-9]+(-[a-z0-9]+)*$Only targets with this tag (one label). |
spam | Query | 1trueInclude targets with a spam score above 60 (same as include=spam). |
include | Query | stringHidden groups to list too, comma separated: spam, auto (pages a script made, link gap domains with no linking page, and AI-source pages nobody can be asked about: example addresses, competitors' own pages, home or product pages of much larger sites), gone (no longer listed by the source). |
page | Query | integerdefault 1, min 1Page number, from 1. |
per | Query | integerdefault 50, min 1, max 200Rows per page, 1 to 200. |
Antwort
200 · application/json
| Feld | Details |
|---|---|
filters | object · required; The filters applied |
filters.status | to_contact | contacted | added | declined | · required; Status filter |
filters.source | ai_source | best_list | link_gap | lost_link | manual | · required; Source filter |
filters.tag | string or null · required; Tag filter |
filters.spam | true or false · required; Spam-flagged targets included |
filters.include | list of spam | auto | gone · required; Hidden groups included |
counts | object · required; Counts |
counts.all | integer · required; Targets shown, all statuses |
counts.status | object · required; Targets per status |
counts.status.to_contact | integer · required; Targets to_contact |
counts.status.contacted | integer · required; Targets contacted |
counts.status.added | integer · required; Targets added |
counts.status.declined | integer · required; Targets declined |
counts.source | object · required; Targets per source |
counts.source.ai_source | integer · required; Targets from ai_source |
counts.source.best_list | integer · required; Targets from best_list |
counts.source.link_gap | integer · required; Targets from link_gap |
counts.source.lost_link | integer · required; Targets from lost_link |
counts.source.manual | integer · required; Targets from manual |
counts.spamHidden | integer · required; Spam-flagged targets left out (platform pages included) |
counts.platformHidden | integer · required; Platform pages of much larger sites left out |
counts.autoHidden | integer · required; Script-made pages and link gap domains without a page left out |
counts.goneHidden | integer · required; Targets the source no longer lists, left out |
total | integer · required; Rows that match, over all pages |
page | integer · required; This page, from 1 |
per | integer · required; Rows per page |
hasMore | true or false · required; More rows after this page |
targets | list of values · required |
targets[].id | string |
targets[].source | string |
targets[].url | string |
targets[].domain | string |
targets[].title | string |
targets[].score | number |
targets[].class | string |
targets[].reason | object |
targets[].reason.competitors | list of strings |
targets[].reason.domainRank | number |
targets[].reason.ourRank | number |
targets[].reason.spamScore | number |
targets[].reason.outOf | number |
targets[].reason.backlinks | number |
targets[].reason.pages | list of objects |
targets[].reason.pages[].competitor | string |
targets[].reason.pages[].url | string |
targets[].reason.pages[].anchor | string |
targets[].reason.pages[].title | string |
targets[].reason.pageKind | string |
targets[].reason.pageKindBy | string |
targets[].status | string |
targets[].statusAt | string |
targets[].statusAuto | true or false |
targets[].note | string |
targets[].tags | list of strings |
targets[].firstSeen | string |
targets[].lastSeen | string |
targets[].gone | true or false |
targets[].check | object |
targets[].check.at | string |
targets[].check.ok | true or false |
targets[].check.status | number |
targets[].check.linksUs | true or false |
targets[].check.mentionsUs | true or false |
targets[].check.matched | list of strings |
targets[].link | string |
note | string · required; How to read the fields |
link | address (URL) · required; The Outreach screen in the app |
Hinweise
GET /sites/{siteId}/outreach listet Seiten und Websites, die Sie um einen Link oder eine Erwähnung bitten können, sortiert: offene Ziele zuerst nach score (0 bis 100), dann kontaktierte, aufgenommene und abgelehnte. Ziele, die ihre Quelle nicht mehr findet (gone), kommen zuletzt. MonoRanks sendet keine E-Mails und sucht keine Kontaktdaten heraus: Es listet die Ziele, Sie übernehmen die Ansprache und halten fest, was passiert ist.
| Was | Details |
|---|---|
source |
ai_source (KI-Antworten auf Ihre beobachteten Fragen zitieren die Seite, nennen Sie aber nicht), best_list (eine „Beste X“-Liste, die Ihre Mitbewerber nennt, Sie aber nicht), link_gap (eine Website, die auf zwei oder mehr Ihrer Mitbewerber verlinkt, nicht auf Sie), lost_link (eine starke Website, die nicht mehr auf Sie verlinkt und bei der die Bitte um eine Aktualisierung des Links die Lösung ist) oder manual (von Hand hinzugefügt). |
reason |
sagt warum, mit den Feldern, die die Quelle kennt: zum Beispiel questions, models und timesCited; keyword und position; competitors, domainRank, spamScore und outOf; oder lostAt. |
status |
to_contact, contacted, added oder declined. Filtern Sie mit status und source. counts enthält die Summen pro Status und Quelle. |
| Spam | Ziele mit einem Spam-Score über 60 fehlen, außer Sie übergeben spam=1; counts.spamHidden sagt, wie viele. |
| Schreiben | POST /sites nimmt status und/oder note (höchstens 2.000 Zeichen; eine leere Notiz löscht sie). Die Änderung wird in der Activity der Website unter dem Besitzer des Schlüssels protokolliert. Status und Notiz bleiben, wenn die Quelle das Ziel aktualisiert. |
| Von selbst aufgenommen | Einmal pro Woche liest MonoRanks jede offene Zielseite erneut, kostenlos. Verlinkt die Seite jetzt auf die Website oder nennt sie, wechselt das Ziel zu added und statusAuto ist true. |
Fehler
| Status | Bedeutung |
|---|---|
400 | Bad request. Codes: bad_status, bad_source, bad_include, bad_tag, bad_page, bad_per. |
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. |
Beispielanfrage
curl \
-H "Authorization: Bearer mr_ws_…" \
"https://app.monoranks.com/api/v1/sites/SITE_ID/outreach"const res = await fetch("https://app.monoranks.com/api/v1/sites/SITE_ID/outreach", {
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/outreach",
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/outreach");
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/outreach", { headers: { Authorization: "Bearer mr_ws_…" } });Beispielantwort
{
"filters": {
"status": null,
"source": null,
"tag": null,
"spam": false,
"include": []
},
"counts": {
"all": 64,
"status": {
"to_contact": 51,
"contacted": 8,
"added": 3,
"declined": 2
},
"source": {
"ai_source": 12,
"best_list": 9,
"link_gap": 38,
"lost_link": 4,
"manual": 1
},
"spamHidden": 5,
"platformHidden": 2,
"autoHidden": 11,
"goneHidden": 3
},
"total": 64,
"page": 1,
"per": 50,
"hasMore": true,
"targets": [
{
"id": "0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a",
"source": "link_gap",
"url": "https://rideguide.example/best-bike-shops/",
"domain": "rideguide.example",
"title": "The best online bike shops",
"score": 82,
"class": "editorial",
"reason": {
"competitors": [
"bikeworld.example",
"cyclehub.example"
],
"domainRank": 47,
"ourRank": 33,
"spamScore": 4,
"outOf": 2,
"backlinks": 5,
"pages": [
{
"competitor": "bikeworld.example",
"url": "https://rideguide.example/best-bike-shops/",
"anchor": "Bike World",
"title": "The best online bike shops"
}
],
"pageKind": "review",
"pageKindBy": "ai"
},
"status": "contacted",
"statusAt": "2026-10-02T09:30:00.000Z",
"statusAuto": false,
"note": "Emailed the editor on Oct 2.",
"tags": [
"gear-review"
],
"firstSeen": "2026-09-14T03:00:00.000Z",
"lastSeen": "2026-10-05T03:00:00.000Z",
"gone": false,
"check": {
"at": "2026-10-05T03:10:00.000Z",
"ok": true,
"status": 200,
"linksUs": false,
"mentionsUs": false,
"matched": []
},
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/outreach?open=0b2d4f6a-8c0e-4a2c-9e4a-8c0e2a4c6e8a"
}
],
"note": "Pages and sites worth asking for a link or a mention, with why (reason) and a score (0–100, higher first).",
"link": "https://app.monoranks.com/sites/3f6c2a1e-8b4d-4c7a-9e21-5d0b7a6f4c13/outreach"
}{
"error": {
"code": "bad_status",
"message": "status must be one of to_contact, contacted, added, declined."
}
}{
"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": "Website not found."
}
}{
"error": {
"code": "rate_limited",
"message": "More than 1200 requests this hour for this key."
}
}Der MCP-Server macht dasselbe mit dem Tool list_outreach_targets.