Affiliate Link Health Monitor
Pricing
Pay per usage
Affiliate Link Health Monitor
Checks affiliate links, redirect chains, HTTP status, tracking signals, target domains, landing-page text, and changes since the previous run.
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
- Open the Input tab.
- Add one or more affiliate URLs.
- Optionally define expected parameters, destination domains, and page text.
- Click Start.
- 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
links
A list of affiliate URLs to check.
Each item can contain:
label— optional name shown in the resultsurl— affiliate URL to checkexpectedAffiliateParams— query parameter names expected in the redirect chainexpectedFinalDomains— allowed final destination domainsrequiredText— text that must exist on the final landing pageforbiddenText— 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:
statusreasonshttpStatusinputUrlfinalUrlredirectCountredirectChainredirectLooptooManyRedirectsexpectedFinalDomainsexpectedDomainMatchedexpectedAffiliateParamsaffiliateParamsFoundAnywhereaffiliateParamsFoundInFinalUrlaffiliateParamsMissingEverywhereaffiliateParamsDisappearedBeforeFinaltrackingCookieNamesObservedattributionConfidencerequiredTextMissingforbiddenTextFoundchangedchangedFieldspreviousSummaryresponseTimeMscheckedAterror
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 URLmedium— the parameter appeared in the redirect chain and a tracking cookie was observedlow— the parameter appeared, but no additional attribution signal was foundnone— the expected parameter was not foundnot-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:
- Configure the Actor input.
- Save the input as an Apify Task.
- Create a Schedule for the Task.
- Run it daily or weekly.
- Enable
onlyChangedafter the first run. - 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.
Recommended monitoring setup
For reliable recurring monitoring:
- use one Task for each website or project
- use a separate
stateStoreNamefor each unrelated project - enable
persistState - run the first check with
onlyChanged: false - enable
onlyChanged: truefor 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.