Backlink Monitor & Lost Link Alerts avatar

Backlink Monitor & Lost Link Alerts

Pricing

from $3.00 / 1,000 backlink checkeds

Go to Apify Store
Backlink Monitor & Lost Link Alerts

Backlink Monitor & Lost Link Alerts

Monitor backlinks you already earned or paid for. Detect removed links, dofollow-to-nofollow changes, anchor edits, redirects and noindex pages with structured before/after data.

Pricing

from $3.00 / 1,000 backlink checkeds

Rating

0.0

(0)

Developer

Vadim Bezrukov

Vadim Bezrukov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Monitor backlinks you already earned or paid for. This Actor re-checks a watchlist of known placements and tells you when a link disappears, becomes nofollow, changes anchor text, picks up sponsored/ugc, moves behind a redirect, or lands on a noindex page.

The first published version is described in the changelog.

Supply the pages that should link to your site. The Actor checks those known placements; it does not discover new backlinks or crawl a website.

Try one placement

{
"monitorKey": "client-a",
"placements": [
{
"id": "guest-post-001",
"sourceUrl": "https://example.com/",
"expectedTarget": "https://iana.org/domains/example",
"expectedAnchor": "Learn more",
"expectedRel": "dofollow",
"label": "Public example.com IANA citation"
}
],
"mode": "changesOnly",
"baselineMode": "emitBaseline",
"confirmLossAfter": 2
}

The Console demo uses mode: all, returning BASELINE first and NO_CHANGE on an unchanged repeat. The monitoring example above stores last-good state and emits BASELINE on its first run. Schedule the same input daily. Unchanged placements stay quiet unless mode is all.

What changes it catches

CodeMeaning
BASELINEFirst successful observation for a placement
LINK_LOSTLink still missing after two-strike confirmation
LINK_RESTOREDA previously lost link is present again
ANCHOR_CHANGEDVisible anchor text changed
TARGET_CHANGEDMatched href changed
TARGET_REDIRECT_CHANGEDTarget redirect destination changed
DOFOLLOW_TO_NOFOLLOW / NOFOLLOW_TO_DOFOLLOWEffective follow signal flipped
SPONSORED_ADDED / SPONSORED_REMOVEDrel=sponsored appeared or left
UGC_ADDED / UGC_REMOVEDrel=ugc appeared or left
PAGE_NOINDEXED / PAGE_REINDEXABLEPage robots/noindex flipped
SOURCE_HTTP_STATUS_CHANGED / TARGET_HTTP_STATUS_CHANGEDObserved HTTP status changed

One observation can carry several codes. SUSPECTED_LOSS is a status, not a confirmed loss.

Example Tasks

Choose a saved example, replace its source and target URLs, and keep monitorKey stable across scheduled runs:

Example LINK_LOST

{
"recordType": "CHANGE",
"status": "LINK_LOST",
"placementId": "guest-post-001",
"changeTypes": ["LINK_LOST"],
"changes": {
"linkFound": { "previous": true, "current": false },
"matchedTarget": { "previous": "https://iana.org/domains/example", "current": null }
},
"lossConfirmationCount": 0
}

Example DOFOLLOW_TO_NOFOLLOW

{
"recordType": "CHANGE",
"status": "CHANGED",
"placementId": "guest-post-001",
"changeTypes": ["DOFOLLOW_TO_NOFOLLOW", "ANCHOR_CHANGED"],
"changes": {
"rel": { "previous": [], "current": ["nofollow"] },
"anchorText": { "previous": "Learn more", "current": "example.com" }
}
}

Input watchlist

Each placement needs a stable id, sourceUrl and expectedTarget. Optional expectedAnchor and expectedRel choose which link to watch when the page has more than one match; label is copied onto every row. Duplicate ids fail the run before any fetch. Maximum 5,000 placements per run. Target matching is explicit: normalized (default), exact, or domain. Query parameters are never dropped. www vs apex is significant in normalized and exact mode; domain treats www.example.com and example.com as the same host and does not treat blog.example.com as the same host.

Scheduling and webhooks

  1. Save the watchlist as an Actor Task with a stable monitorKey.
  2. Schedule it daily or weekly.
  3. Add a webhook on SUCCEEDED and filter Dataset rows where status is CHANGED, LINK_LOST or SUSPECTED_LOSS. A run that hits BILLING_LIMIT_REACHED finishes FAILED and still contains the rows already verified, so that status needs its own webhook if the cap can be reached.

The named Key-value store backlink-monitor-state holds last-good snapshots and pending-loss counters. Dataset runs are the history.

Pricing examples

The price is $0.003 per successfully checked backlink plus the platform apify-actor-start event ($0.005 per GB, minimum one event). Platform usage is included. The start event is charged even when all source checks fail.

Daily watchlistChecks / monthbacklink-checked
501,500$4.50
50015,000$45
2,50075,000$225

The monthly totals including 30 starts at 1024 MB are $4.65, $45.15 and $225.15. One check costs $0.008; the 5,000-placement maximum costs $15.005 at 1024 MB. At 4096 MB the start fee is $0.020, so the maximum is $15.020.

Retries, source failures, robots blocks, parser failures, invalid input and duplicate ids are not billed. Unchanged successful checks are billed once. Before fetching, the Actor reserves enough budget for each selected placement. Placements beyond that capacity receive NOT_CHECKED / BUDGET_LIMIT, incur no check charge and keep their previous state. Capacity is conservative: a failed selected check does not cause an extra placement to be fetched. The partial run ends with BILLING_LIMIT_REACHED; verified output remains available. Increase the limit or submit only the skipped placements in the next run.

Two-strike loss confirmation

False lost-link alerts are expensive. Default confirmLossAfter is 2:

  1. Link present → last-good stored.
  2. Next successful page check, link missing → SUSPECTED_LOSS. Last-good is not overwritten.
  3. Still missing on the next successful check → LINK_LOST.
  4. If the link returns before confirmation, the suspected loss is cleared.

A source HTTP 404 or 410 is a successful observation that the page is gone, so it counts toward two-strike loss (the Dataset sourceStatus shows 404/410). A brief CDN 404 can therefore confirm loss; raise confirmLossAfter if that is too sensitive. HTTP 403, 429, timeouts and 5xx never count.

Failure semantics

LINK_NOT_FOUND is not SOURCE_FAILED. A 403, 429, timeout, 5xx, CAPTCHA/ challenge page, parser failure, or HTML with zero <a href> links is never LINK_LOST. The source page must be fetched and parsed with at least one HTML link before absence can count as a loss observation. One bad placement never kills the batch. If every placement independently fails, the run still SUCCEEDED with per-item SOURCE_FAILED or INVALID_INPUT rows.

Limitations

  • HTTP HTML only. No JavaScript rendering, no CAPTCHA solving, no login.
  • Does not discover unknown backlinks or crawl a site.
  • Does not claim Google index status, PageRank, domain authority or SEO value.
  • follow-like HTML is not a ranking guarantee.
  • crates.io-style JavaScript marketplaces often return HTML with no <a href>. That is SOURCE_FAILED (NO_HTML_LINKS), not verified link loss and not a browser fallback.

API / MCP usage

Direct MCP endpoint:

https://mcp.apify.com?tools=automa-flow/backlink-monitor

Ask an agent to monitor a named watchlist of source/target pairs and return only LINK_LOST and DOFOLLOW_TO_NOFOLLOW rows. Bound spend with maxTotalChargeUsd (at least $0.008 for one check at 1024 MB).

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automa-flow/backlink-monitor').call({
monitorKey: 'client-a',
placements: [
{
id: 'guest-post-001',
sourceUrl: 'https://example.com/',
expectedTarget: 'https://iana.org/domains/example',
},
],
});

Replace automa-flow with your account if you are running a private copy.

Only user-supplied public HTTP(S) URLs on ports 80/443 are fetched. Private, loopback, link-local, multicast, metadata and credentialed URLs are rejected, including redirect hops. The Actor respects robots.txt when enabled. It does not bypass authentication, paywalls, CAPTCHAs or access controls. Report HTML facts; do not treat them as search-engine scoring.