فهرست موردهای جذب لینک
/sites/{siteId}/outreach- Scope
search:read- ابزار MCP
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.
توضیح ها از سند OpenAPI می آیند و انگلیسی اند.
پارامترها
| نام | محل | توضیح |
|---|---|---|
siteIdاجباری | path | 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. |
پاسخ
200 · application/json
| فیلد | توضیح |
|---|---|
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 |
نکته ها
GET /sites/{siteId}/outreach صفحه ها و سایت هایی را لیست می کند که ارزش دارد از آن ها لینک یا منشن بخواهید، به ترتیب: اول موردهای باز بر اساس score (از 0 تا 100)، بعد پیام داده شده ها، اضافه شده ها و ردشده ها. موردهایی که منبعشان دیگر پیدایشان نمی کند (gone) آخر می آیند. MonoRanks ایمیل نمی فرستد و دنبال اطلاعات تماس هم نمی گردد: موردها را لیست می کند، شما سراغشان می روید و نتیجه را ثبت می کنید.
| مورد | توضیح |
|---|---|
source |
ai_source (پاسخ های هوش مصنوعی به سؤال های شما به صفحه ارجاع می دهند ولی اسم شما را نمی آورند)، best_list (فهرست «بهترین X» که اسم رقبای شما را آورده ولی شما را نه)، link_gap (سایتی که به دو رقیب یا بیشتر لینک داده ولی به شما نه)، lost_link (سایت قوی ای که لینکش به شما را برداشته و راه حل این است که از آن ها بخواهید لینک را به روز کنند) یا manual (دستی اضافه شده). |
reason |
دلیل را می گوید، با فیلدهایی که منبعش می داند: مثلاً questions، models و timesCited؛ keyword و position؛ competitors، domainRank، spamScore و outOf؛ یا lostAt. |
status |
to_contact، contacted، added یا declined. با status و source فیلتر کنید. counts جمع هر وضعیت و هر منبع را دارد. |
| اسپم | موردهایی که امتیاز اسپمشان بالای 60 است کنار گذاشته می شوند، مگر اینکه spam=1 بفرستید؛ counts.spamHidden می گوید چندتا کنار رفته اند. |
| نوشتن | POST /sites مقدار status و/یا note را می گیرد (حداکثر 2,000 کاراکتر؛ یادداشت خالی آن را پاک می کند). تغییر به نام صاحب کلید در Activity سایت ثبت می شود. وقتی منبع، مورد را به روز می کند، وضعیت و یادداشت سر جایشان می مانند. |
| اضافه شدن خودکار | MonoRanks هفته ای یک بار هر صفحه باز را دوباره و رایگان می خواند. اگر صفحه حالا به سایت لینک بدهد یا اسمش را بیاورد، مورد added می شود و statusAuto برابر true است. |
خطاها
| کد | معنی |
|---|---|
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. |
نمونه درخواست
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_…" } });نمونه پاسخ
{
"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."
}
}سرور MCP همین کار را با ابزار list_outreach_targets انجام می دهد.