NEWAI content checker: see which pages read like AI text

APILinkbuilding

Link building API. Your links, prospects and outreach in your own tools.

MarketingTracer keeps your link building pipeline: the sites you found, the ones you mailed, the links that went live, and a check on every live link to see that it stays. The API gives you that pipeline, so the numbers can sit in your report, your CRM or your own alerts.

Live and lost

Links won and lost, per month.

The pipeline

Found, contacted, agreed, live.

Outreach

Your sequences and the mails still to go.

Checked links

Is the link still there, follow or nofollow.

Four endpoints, four MCP tools

Each endpoint is a POST to /rest/v1/<endpoint> on app.marketingtracer.com. In your AI assistant the same data is the MCP tool under each endpoint.

Endpoint and MCP toolWhat you get
linkbuilding.overview
get_linkbuilding_overview
Live and lost links, links won and lost per month, how far your prospects of the last 90 days got, what needs attention, and the anchor texts of your live links.
linkbuilding.links
get_linkbuilding_links
Your links and prospects with their stage, the contact we found, and what our last check saw: is the link there, its anchor text, follow or nofollow.
linkbuilding.sequences
get_linkbuilding_sequences
Your outreach sequences, with how many sites each one contacted and how many said yes.
linkbuilding.queue
get_linkbuilding_queue
The outreach mails planned to go out through your own mail server.

Every endpoint takes site_id. linkbuilding.links takes stage, limit (1 to 5,000, default 100) and cursor; linkbuilding.overview takes month (YYYY-MM) for a report of an earlier month.

A live link that went missing, as the API returns it

curl -X POST https://app.marketingtracer.com/rest/v1/linkbuilding.links \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id": "YOUR_SITE_ID", "stage": "live", "limit": 1}'

From a real account, with the sites and ids changed and shortened where you see …:

{
  "data": [{
    "id": "6ae03f867a2162526408e976",
    "url": "https://news.example.org/article/css-tricks-is-back",
    "domain": "news.example.org",
    "stage": "live",
    "email": "hello@example.org",
    "contact_form": "https://example.org/contact",
    "added_at": "2026-10-27T06:07:02Z",
    "live_at": "2026-10-30T12:49:47Z",
    "check": {
      "state": "missing",
      "last_at": "2026-10-30T13:50:01Z",
      "next_at": "2026-11-01T02:50:01Z",
      "found": null,
      "history": [{"at": "2026-10-30T13:50:01Z", "result": "missing"}]
    },
    …
  }],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": "6ae03f867a2162526408e976", "total": 8}
}

This one is worth a look: it was marked live, but our first check did not find the link on the page. It counts as lost only after two checks in a row that don't find it. A page that doesn't load doesn't count as a miss, so a site that is down for a day doesn't set off an alarm.

New links in the monthly report

If you pay for links, or sell them, you want to see them. linkbuilding.overview with last month's month gives the links won and lost and the anchor texts. Your report shows them in your own layout. Every live link is checked, so the list is current.

A lost link on your ticket board

Ask linkbuilding.links with stage: "lost" once a day and compare with yesterday. A link that went missing lands on your ticket board with the page and the contact, while the site owner still remembers you. One call a day per site, far inside the limit.

Every endpoint, argument and field

Generated from the same definitions the API itself runs on, and the example answers are tested against them, so this reference is never behind. Every endpoint is a POST with a JSON body; reading endpoints also take a GET with the same arguments in the query string. Send your API key as Authorization: Bearer YOUR_API_KEY. Every answer is {"data": …, "meta": {…}}: meta.site_id always, meta.next_cursor and meta.total for a list, meta.period where the endpoint covers a period. An error is {"error": {"code", "message"}} with the HTTP status: 400 invalid_argument, unknown_argument or missing_argument; 401 not_authenticated; 403 no_access or tool_off; 404 not_found; 429 rate_limited. The machine-readable version is openapi.json.

linkbuilding.overview

POST /rest/v1/linkbuilding.overview · MCP tool get_linkbuilding_overview

Returns the link building results of one site: live and lost links, links won and lost per month (12 months up to month), how far the prospects added in the last 90 days got (found, contacted, agreed, live), what needs attention, and the anchor texts of the live links.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
monthstring, YYYY-MMLast month of the 12-month series, YYYY-MM. Defaults to this month.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/linkbuilding.overview \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID"}'

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": {
    "month": "2026-10",
    "kpis": {
      "live": 8,
      "lost": 1,
      "waiting": 4,
      "follow": 0,
      "checked": 0,
      "nofollow": 0,
      "new_this_month": 1,
      "lost_this_month": 0,
      "follow_pct": null
    },
    "months": [{"month": "2026-09", "new": 0, "lost": 0}, {"month": "2026-10", "new": 1, "lost": 0}],
    "funnel_90_days": {"found": 45, "sent": 2, "agreed": 2, "live": 1},
    "attention": {"lost": [], "agreed_old": [], "changed": [], "mails_next_24h": 0},
    "anchors": [
      {"anchor": "example text", "count": 2, "share_pct": 40},
      {"anchor": "more text", "count": 1, "share_pct": 20}
    ],
    "smtp_ready": false
  },
  "meta": {"site_id": "YOUR_SITE_ID"}
}

Response fields · in data:

FieldTypeWhat it is
monthstringThe last month of the series, YYYY-MM.
kpisobjectThe state now.
kpis.liveintegerLive links.
kpis.lostintegerLinks that were live and are gone.
kpis.waitingintegerContacted links waiting for an answer.
kpis.followintegerChecked live links that are follow (as last found).
kpis.checkedintegerLive links our check has found on their page at least once.
kpis.nofollowintegerChecked live links that are nofollow (as last found).
kpis.new_this_monthintegerLinks that went live in month.
kpis.lost_this_monthintegerLinks lost in month.
kpis.follow_pctnumber or nullfollow as a share of checked, 0-100, a whole number; null when no live link has been found yet.
monthsarray12 months up to month, oldest first.
months[].monthstringYYYY-MM.
months[].newintegerLinks that went live that month (for older links without a live date: the month they were added).
months[].lostintegerLinks lost that month.
funnel_90_daysobjectProspects added in the last 90 days, by how far they got.
funnel_90_days.foundintegerAll of them.
funnel_90_days.sentintegerContacted, or rejected later.
funnel_90_days.agreedintegerAgreed (or further).
funnel_90_days.liveintegerLive (or lost later).
attentionobjectWhat needs a look; the lists hold at most 5 each.
attention.lostarrayLinks lost in the last 30 days.
attention.lost[].link_idstringThe link.
attention.lost[].urlstringThe page.
attention.lost[].lost_atstring or nullWhen it was lost, ISO 8601 UTC.
attention.agreed_oldarrayLinks agreed more than 14 days ago and not live yet.
attention.agreed_old[].link_idstringThe link.
attention.agreed_old[].urlstringThe page.
attention.changedarrayLive links that changed.
attention.changed[].link_idstringThe link.
attention.changed[].urlstringThe page.
attention.changed[].changesarray<string>nofollow, anchor and/or target.
attention.mails_next_24hintegerOutreach mails due within the next 24 hours, including overdue ones.
anchorsarrayThe 4 most used anchor texts of the live links, then one row with anchor null for all the others.
anchors[].anchorstring or nullThe anchor text, lowercase (the one our check found, else the one you want); null for the row with all other anchors.
anchors[].countintegerLive links with it.
anchors[].share_pctnumberShare of the live links that have an anchor text, 0-100, a whole number.
smtp_readybooleanWhether the site's own mail server is set up and approved for outreach.

linkbuilding.links

POST /rest/v1/linkbuilding.links · MCP tool get_linkbuilding_links

Returns the links and prospects of one site, newest first: the page, its domain, the stage (found, sent = contacted, agreed, live, lost, rejected), the contact found, what our own check last saw on the page (is the link there, the anchor, follow or nofollow) and the state of the outreach mails.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.
stageone of found, sent, agreed, live, lost, rejectedOnly links in this stage.
limitinteger, 1 to 5,000, default 100Links per call.
cursorstringmeta.next_cursor of the previous call, for the next page.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/linkbuilding.links \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID","limit":2}'

Example response · A real answer, anonymised and shortened to two items per list.

{
  "data": [
    {
      "id": "6ae43406b841f35e0f0d9c95",
      "url": "https://news.example.org/articles/rail-grant",
      "domain": "news.example.org",
      "status": "agreed",
      "stage": "agreed",
      "my_url": null,
      "anchor": null,
      "tag": "critical css",
      "note": null,
      "email": null,
      "contact_form": "https://news.example.org/contact",
      "contact_queued": false,
      "contact_checked_at": "2026-10-30T12:48:34Z",
      "added_at": "2026-10-30T06:07:02Z",
      "status_at": "2026-10-30T12:49:44Z",
      "live_at": null,
      "check": {
        "state": null,
        "last_at": null,
        "next_at": "2026-10-31T12:49:44Z",
        "found": null,
        "history": [],
        "changes": []
      },
      "mail": {
        "sequence_id": null,
        "step": 0,
        "next_at": null,
        "last_at": null,
        "stopped": null,
        "error": null
      }
    },
    {
      "id": "6ae2e285b195fcf9b00f6244",
      "url": "https://m.example.net/news/report/css-officers",
      "domain": "m.example.net",
      "status": "open",
      "stage": "found",
      "my_url": null,
      "anchor": null,
      "tag": "critical css",
      "note": null,
      "email": null,
      "contact_form": "https://example.net/contact",
      "contact_queued": false,
      "contact_checked_at": "2026-10-30T12:48:30Z",
      "added_at": "2026-10-29T06:07:01Z",
      "status_at": null,
      "live_at": null,
      "check": {
        "state": null,
        "last_at": null,
        "next_at": null,
        "found": null,
        "history": [],
        "changes": []
      },
      "mail": {
        "sequence_id": null,
        "step": 0,
        "next_at": null,
        "last_at": null,
        "stopped": null,
        "error": null
      }
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": "6ae2e285b195fcf9b00f6244", "total": 958}
}

Response fields · data is a list; each item has:

FieldTypeWhat it is
idstringThe link id.
urlstringThe page that links, or should link, to the site.
domainstringIts domain.
statusstringThe detailed status: open, pending, firstreminder, secondreminder, agreed, done, lost, rejected or stalled.
stagestringfound, sent, agreed, live, lost or rejected.
my_urlstring or nullThe page of the site the link should point to, as entered; null when not set (then the homepage).
anchorstring or nullThe anchor text you want.
tagstring or nullYour own label.
notestring or nullYour own note.
emailstring or nullThe contact address found on this domain.
contact_formstring or nullThe contact form found on this domain.
contact_queuedbooleanWhether a contact search is waiting.
contact_checked_atstring or nullWhen a contact was last looked for on this domain, ISO 8601 UTC.
added_atstringWhen it was added, ISO 8601 UTC.
status_atstring or nullWhen the status last changed, ISO 8601 UTC.
live_atstring or nullWhen it went live, ISO 8601 UTC.
checkobjectOur check of the page.
check.statestring or nullfound, changed or missing at the last check that got an answer; null before that.
check.last_atstring or nullWhen it was last checked, ISO 8601 UTC.
check.next_atstring or nullWhen it is checked next, ISO 8601 UTC; null when it is not checked (stage found or rejected).
check.foundobject or nullThe link as our check last found it on the page; null if never found.
check.found.hrefstring or nullWhere it points.
check.found.anchorstring or nullIts anchor text.
check.found.relstring or nullIts rel attribute.
check.found.followbooleanWhether it is follow.
check.historyarrayThe last checks, oldest first, at most 12.
check.history[].atstring or nullWhen, ISO 8601 UTC.
check.history[].resultstring or nullfound, changed, missing, or error (the page did not answer; never counts as missing).
check.changesarray<string>What changed at the last check that found the link: nofollow, anchor and/or target.
mailobjectThe outreach for this link.
mail.sequence_idstring or nullThe sequence it is in.
mail.stepintegerMails sent so far.
mail.next_atstring or nullWhen the next mail goes out, ISO 8601 UTC.
mail.last_atstring or nullWhen the last mail went out, ISO 8601 UTC.
mail.stoppedstring or nullWhy the sequence stopped: manual, deleted (sequence removed), status (status changed), no_email, blocked (do-not-contact list), recent (domain contacted in the last 180 days) or no_step; null when it did not stop.
mail.errorstring or nullThe last sending error.

linkbuilding.sequences

POST /rest/v1/linkbuilding.sequences · MCP tool get_linkbuilding_sequences

Returns the outreach sequences of one site: a first mail and up to two follow-ups after a number of working days, with how many sites were contacted with it and how many agreed.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/linkbuilding.sequences \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID"}'

Example response · Illustrative: the account we sampled had no sequences or scheduled mails; the fields are as the code returns them.

{
  "data": [
    {
      "id": "seq1",
      "name": "Resource pages",
      "steps": [
        {
          "subject": "A resource for your readers",
          "body": "Hi [voornaam], I read [partner_link] …",
          "after_workdays": 0
        },
        {
          "subject": "",
          "body": "Hi [voornaam], a quick follow-up …",
          "after_workdays": 4
        }
      ],
      "contacted": 12,
      "agreed": 3
    }
  ],
  "meta": {"site_id": "YOUR_SITE_ID", "next_cursor": null, "total": 1}
}

Response fields · data is a list; each item has:

FieldTypeWhat it is
idstringThe sequence id.
namestringIts name.
stepsarrayThe mails, in order.
steps[].subjectstringThe subject; empty for a follow-up means "Re:" plus the first subject.
steps[].bodystringThe text, with the fields [partner_domain], [partner_link], [voornaam], [mijn_pagina] and [ankertekst].
steps[].after_workdaysintegerWorking days after the mail before; always 0 for the first.
contactedintegerLinks that got at least one mail of it.
agreedintegerLinks in it that are now agreed or live.

linkbuilding.queue

POST /rest/v1/linkbuilding.queue · MCP tool get_linkbuilding_queue

Returns the outreach mails scheduled for one site, sent through the site's own mail server on working days, and how many went out today against the daily limit.

Arguments

ArgumentTypeWhat it does
site_id (required)stringThe site: its id from list_sites, or the id in the app’s address.

Example request

curl -X POST https://app.marketingtracer.com/rest/v1/linkbuilding.queue \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"site_id":"YOUR_SITE_ID"}'

Example response · Illustrative: the account we sampled had no sequences or scheduled mails; the fields are as the code returns them.

{
  "data": {
    "sent_today": 3,
    "day_limit": 25,
    "scheduled": [
      {
        "link_id": "6ae43406b841f35e0f0d9c95",
        "domain": "news.example.org",
        "email": "editor@example.org",
        "sequence_id": "seq1",
        "sequence": "Resource pages",
        "step": 1,
        "send_at": "2026-11-02T09:10:00Z",
        "error": null
      }
    ]
  },
  "meta": {"site_id": "YOUR_SITE_ID"}
}

Response fields · in data:

FieldTypeWhat it is
sent_todayintegerMails sent today (Amsterdam time).
day_limitintegerMails the site sends at most per day.
scheduledarrayThe next mails, soonest first, at most 100, including overdue ones.
scheduled[].link_idstringThe link.
scheduled[].domainstringThe site it goes to.
scheduled[].emailstring or nullThe address.
scheduled[].sequence_idstring or nullThe sequence.
scheduled[].sequencestring or nullIts name.
scheduled[].stepintegerMails sent so far; this is the next one.
scheduled[].send_atstring or nullWhen it goes out, ISO 8601 UTC; the time may already have passed.
scheduled[].errorstring or nullThe last sending error.
White-label / agency

Link building for every client. Under your name.

One key reads the link pipeline of every client site you can open, and outreach goes out from your own mail server under your own name. On a white-label dashboard the API answers on your own domain. The whole dashboard is white label: your domain, logo and colours, and team roles that set which modules each role sees.

APIRank tracker API APIAI visibility API APIThe MarketingTracer API

Free 14-day trial

MarketingTracer smart A.I. tool shows you what you need to rank. Then we'll help you get it done.

  • No credit card required
  • No installation needed
  • No strings attached
Start your 14-day trial

FAQ

Something else? Ask us.

What is a link building API?

A link building API gives your own software the state of your link work: the sites you approached, the links that went live and whether they are still there. This one reads the pipeline you keep in MarketingTracer.

Does it find backlinks I did not build?

No. MarketingTracer has no backlink index. It checks the links in your own pipeline.

What do the stages mean?

found: a prospect. sent: contacted. agreed: said yes. live: the link is on the page. lost: it was live and is gone. rejected: said no.

How often are live links checked?

Most often in the first weeks after a link goes live, then less often as it settles. check.next_at tells you when each link is checked next.

Do the mails go out from MarketingTracer?

No. Outreach goes through your own mail server, on working days, up to a daily limit you set. linkbuilding.queue shows what is planned.

Can I add prospects or change a stage through the API?

Not yet. The public API reads; you add prospects and move links between stages in the app.

What does it cost?

The API costs nothing extra; it is part of every plan. Prices are on the pricing page.