Affiliate Link Health Monitor avatar

Affiliate Link Health Monitor

Pricing

Pay per usage

Go to Apify Store
Affiliate Link Health Monitor

Affiliate Link Health Monitor

Checks affiliate links, redirect chains, HTTP status, tracking signals, target domains, landing-page text, and changes since the previous run.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Wasiliy

Wasiliy

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Automatically monitor affiliate links, redirect chains, destination pages, and tracking signals before broken offers start wasting your traffic.

The Actor checks affiliate URLs in bulk and returns a structured health report for every link.

What it checks

  • Final HTTP status
  • Complete redirect chain
  • Redirect loops and excessive redirects
  • Final destination URL and domain
  • Expected affiliate query parameters
  • Tracking cookies observed during redirects
  • Required text on the landing page
  • Forbidden text such as “offer expired” or “page not found”
  • Changes compared with the previous run
  • Private and local addresses for SSRF protection

Common use cases

  • Monitor affiliate links across content websites
  • Detect expired or unavailable offers
  • Find redirects leading to an unexpected domain
  • Check whether tracking parameters appear in the redirect chain
  • Monitor landing pages for important text changes
  • Run recurring checks with Apify Schedules
  • Export results to JSON, CSV, Excel, Make, n8n, or your own API workflow

Quick start

  1. Open the Input tab.
  2. Add one or more affiliate URLs.
  3. Optionally define expected parameters, destination domains, and page text.
  4. Click Start.
  5. Review the results in the Dataset.

Example input

{
"links": [
{
"label": "Main partner offer",
"url": "https://partner.example/click?aff_id=123",
"expectedAffiliateParams": ["aff_id"],
"expectedFinalDomains": ["advertiser.example"],
"requiredText": ["Start free trial"],
"forbiddenText": ["offer expired", "page not found"]
}
],
"globalAffiliateParams": [],
"concurrency": 5,
"maxRedirects": 10,
"timeoutSeconds": 20,
"maxBodyBytes": 1000000,
"inspectContent": true,
"warnWhenAffiliateParamsDisappear": false,
"persistState": true,
"stateStoreName": "affiliate-link-health-monitor-state",
"onlyChanged": false,
"includeBodySnippet": false
}

Input fields

A list of affiliate URLs to check.

Each item can contain:

  • label — optional name shown in the results
  • url — affiliate URL to check
  • expectedAffiliateParams — query parameter names expected in the redirect chain
  • expectedFinalDomains — allowed final destination domains
  • requiredText — text that must exist on the final landing page
  • forbiddenText — text that must not exist on the final landing page

globalAffiliateParams

Affiliate parameter names applied to every link.

Example:

["aff_id", "subid", "click_id"]

concurrency

Number of links checked in parallel.

A value between 3 and 10 is usually suitable for normal monitoring.

maxRedirects

Maximum allowed number of redirects for one link.

timeoutSeconds

Timeout for each HTTP request.

maxBodyBytes

Maximum amount of landing-page content downloaded for text analysis.

inspectContent

Enables landing-page text checks.

Set it to false when you only need HTTP and redirect information.

warnWhenAffiliateParamsDisappear

Creates a warning when an affiliate parameter appears earlier in the redirect chain but disappears before the final URL.

Many affiliate networks remove tracking parameters after recording the click, so this option is disabled by default.

persistState

Stores the previous result for every URL.

This allows the Actor to detect changes between runs.

stateStoreName

Name of the key-value store used for previous results.

Use a separate store name for unrelated monitoring projects.

onlyChanged

Outputs only new or changed results.

Use:

"onlyChanged": false

for the first run.

After the first successful run, use:

"onlyChanged": true

for recurring monitoring.

includeBodySnippet

Adds a short text snippet from the final landing page to the result.

This is disabled by default.

Output

Every checked link returns structured data including:

  • status
  • reasons
  • httpStatus
  • inputUrl
  • finalUrl
  • redirectCount
  • redirectChain
  • redirectLoop
  • tooManyRedirects
  • expectedFinalDomains
  • expectedDomainMatched
  • expectedAffiliateParams
  • affiliateParamsFoundAnywhere
  • affiliateParamsFoundInFinalUrl
  • affiliateParamsMissingEverywhere
  • affiliateParamsDisappearedBeforeFinal
  • trackingCookieNamesObserved
  • attributionConfidence
  • requiredTextMissing
  • forbiddenTextFound
  • changed
  • changedFields
  • previousSummary
  • responseTimeMs
  • checkedAt
  • error

Health statuses

healthy

The link completed successfully and matched all configured checks.

warning

The link works, but attribution evidence is incomplete or suspicious.

broken

The link failed one or more important checks.

Possible reasons include:

  • HTTP error
  • request timeout
  • redirect loop
  • too many redirects
  • unexpected final domain
  • missing required text
  • forbidden text found
  • missing expected affiliate parameter
  • invalid or unsafe destination URL

Attribution confidence

attributionConfidence is a technical signal. It does not guarantee that an affiliate commission will be credited.

Possible values:

  • high — an expected affiliate parameter exists in the final URL
  • medium — the parameter appeared in the redirect chain and a tracking cookie was observed
  • low — the parameter appeared, but no additional attribution signal was found
  • none — the expected parameter was not found
  • not-configured — no expected parameters were provided

Many affiliate networks remove tracking parameters after recording a click. For this reason, disappearing parameters are not treated as broken by default.

Scheduled monitoring

For recurring checks:

  1. Configure the Actor input.
  2. Save the input as an Apify Task.
  3. Create a Schedule for the Task.
  4. Run it daily or weekly.
  5. Enable onlyChanged after the first run.
  6. Connect the results to a webhook, Make, n8n, email, Telegram, or another automation tool.

For small affiliate websites, a weekly check is often enough.

For large catalogs or frequently changing offers, a daily check may be more useful.

Example result

{
"checkedAt": "2026-08-02T10:00:00.000Z",
"label": "Main partner offer",
"inputUrl": "https://partner.example/click?aff_id=123",
"status": "healthy",
"reasons": [],
"httpStatus": 200,
"finalUrl": "https://advertiser.example/pricing?aff_id=123",
"redirectCount": 2,
"redirectLoop": false,
"tooManyRedirects": false,
"expectedFinalDomains": ["advertiser.example"],
"expectedDomainMatched": true,
"expectedAffiliateParams": ["aff_id"],
"affiliateParamsFoundAnywhere": ["aff_id"],
"affiliateParamsFoundInFinalUrl": ["aff_id"],
"affiliateParamsMissingEverywhere": [],
"affiliateParamsDisappearedBeforeFinal": [],
"trackingCookieNamesObserved": ["affiliate_click"],
"attributionConfidence": "high",
"requiredTextMissing": [],
"forbiddenTextFound": [],
"changed": true,
"changedFields": ["firstRun"],
"responseTimeMs": 842,
"error": null
}

Important limitations

This Actor checks technical signals only.

It does not:

  • guarantee that an affiliate conversion will be credited
  • perform a real purchase or registration
  • access affiliate network statistics
  • solve CAPTCHAs
  • bypass website protection
  • execute JavaScript-heavy landing pages
  • verify commission data inside an affiliate network account
  • imitate users from multiple countries unless external proxy support is added

Some websites may return 403 when accessed from cloud data centers.

A tracking cookie is an additional signal, not proof of successful attribution.

Security

The Actor blocks:

  • localhost
  • private IP addresses
  • loopback addresses
  • link-local addresses
  • reserved IP ranges
  • URLs containing usernames or passwords
  • redirects leading to blocked addresses

This helps reduce SSRF risks when processing public input.

For reliable recurring monitoring:

  • use one Task for each website or project
  • use a separate stateStoreName for each unrelated project
  • enable persistState
  • run the first check with onlyChanged: false
  • enable onlyChanged: true for later runs
  • create a webhook for failed Actor runs
  • review broken links before removing or replacing them

Support

When reporting a problem, include:

  • the input URL
  • the final URL you expected
  • the Actor run ID
  • the returned status
  • the relevant redirect chain
  • whether the problem is reproducible

Do not include passwords, private API keys, or confidential affiliate account data.