Ad verification · Affiliate link monitoring
Affiliate link monitoring, per country and per hop
Affiliate link monitoring follows each tracking link the way a visitor in the target country would: every redirect hop, the parameters that survive it, and the page it finally lands on. Run it from exits in each market, on one IP per chain, and you find the broken offers and stripped click IDs before the commission report does.
Pay per GB · No subscription · Prices in EUR, excl. VAT
- €2.00
- per GB on ARC Fast, excl. VAT
- −44%
- at 1 TB (€1.12 / GB)
- 185+
- countries, city targeting
- Never
- expires — no subscription
Written for
- Affiliate managers
- Affiliate network compliance teams
- Performance marketing agencies
- Publisher partnership leads
The short answer
- Follow the chain hop by hop rather than only checking the final status. A 200 at the end can hide a dropped click ID, a geo-fallback or a redirect to the wrong offer.
- Run each chain from one IP in the target country. Tracking links route by visitor country, so a check from your office tests the office's routing, not the market's.
- Clients should detect redirect loops; HTTP's specification says so, and notes that some clients cap redirects at five. Long chains can break in real browsers before they break in your checker.
- Brand bidding is usually a contractual question: Google does not restrict trademarks used as keywords. Monitoring paid results is how a programme enforces its own terms, by observing, never clicking.
The problem
What goes wrong without the right IPs
The offer is geo-locked and the link quietly falls back
Many offers are available only in some countries. A visitor from elsewhere is redirected to a fallback offer or a generic page, with a 200 status. Without an exit in each market, every check passes and half of them are wrong.
A hop strips the click ID
A redirect that rebuilds the URL without passing through a sub-ID or click ID still lands on the right page, but the conversion is not attributed. The only way to see it is to inspect every Location header in the chain.
The chain changes mid-flight
Tracking hops set cookies and sometimes check that the next request comes from the same visitor. If the exit rotates between hops, the chain can break or route differently than it does for a real user.
JavaScript and meta refresh redirects
Not every hop is an HTTP 3xx. Some are a meta refresh or a script that sets the location. An HTTP client sees a 200 and stops; a headless browser follows them.
Landing pages drift from the approved creative
Prices, claims and disclosures on the advertiser's landing page change without the affiliate knowing. A link that resolves correctly can still land on a page that no longer matches what was promoted.
What to collect
What you can collect
- Every hop: URL, status code, Location
- The chain itself. Lets you see where a parameter was dropped, where a geo-fallback kicked in and how many hops a visitor goes through.
- Final URL and status
- Whether the visitor reached a live offer, a 404, an expired-offer page or a generic fallback.
- Tracking parameters at each hop
- Sub-ID, click ID and UTM values in and out of each hop. A value present at hop 1 and gone at hop 3 is a lost commission.
- Exit country
- Which market the chain was resolved for. The same link can be correct in one country and a fallback in the next.
- Landing page snapshot
- Rendered HTML or a screenshot of the final page, for claims, prices and disclosures. Keep it as evidence when you raise a dispute.
- Hop count and total time
- Long chains are slow, and every extra hop is another place to fail. Track it per network and per advertiser.
- Paid search observations for brand terms
- Advertiser display URL and ad text seen for brand queries per country, for programmes whose terms restrict brand bidding.
How it runs
How a collection run works
- 01
Build the link inventory per market
List every active tracking link with the countries it is meant to serve, the expected final domain and the parameters that must survive. That expectation is what each check is compared against.
- 02
Resolve each chain hop by hop on one sticky exit
Disable automatic redirects, request each hop yourself, and record status and Location. Hold one exit for the whole chain with a session handle, and stop at a hop limit to catch loops.
Hop-by-hop resolution on one exit20 linesfrom urllib.parse import urljoin, urlsplit, parse_qsimport httpxproxy = "http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000" # one session handle per chainMAX_HOPS = 10def resolve(url: str, must_keep: str = "subid"): hops, seen = [], set() with httpx.Client(proxy=proxy, follow_redirects=False, timeout=20) as client: for _ in range(MAX_HOPS): if url in seen: hops.append(("LOOP", url)); break seen.add(url) r = client.get(url) kept = must_keep in parse_qs(urlsplit(url).query) hops.append((r.status_code, url, kept)) if r.status_code not in (301, 302, 303, 307, 308): break url = urljoin(url, r.headers["location"]) return hops - 03
Render the final page in a browser
Open the final URL in a headless browser on the same session to catch script and meta-refresh redirects, then store a screenshot and the rendered HTML. Block heavy media unless the creative is what you are checking.
- 04
Compare against expectations and alert
Flag chains that end on the wrong domain, lose a required parameter, exceed the hop limit, loop or end in an error. Group alerts by advertiser and network so the right person gets them.
- 05
Observe brand-term search results, without clicking
For programmes that restrict brand bidding, record the paid results shown for brand queries per country: display URL and ad text. Never click an ad to identify the advertiser; a click costs the advertiser money and is invalid traffic.
Setup
Recommended setup
A redirect chain is a short, stateful visit. Hold one exit for it, in the country the offer is for.
| Plan | Role | Session | Targeting | Price |
|---|---|---|---|---|
ARC Fast Rotating residential | Default for chain resolution and landing pages Residential exits in the target market, held for the whole chain so cookies and routing match a real visitor's. | Sticky, 5 minutes per chain | Country, city where offers are regional | €2.00 / GB €1.12 at 1 TB (−44%) |
ARC Basic Rotating ISP | For high-frequency status checks Our lowest price per GB, for frequent hop-only checks on links you have already validated on ARC Fast. Compare the two on a sample before you move a network across. | Sticky, 5 minutes per chain | Country | €0.75 / GB €0.59 at 1 TB (−21%) |
ARC Mobile Mobile 4G/5G | For mobile-only offers Carrier IPs for offers that route mobile carrier traffic differently. Pair with a mobile user agent. No city targeting on this pool. | Sticky up to 60 minutes | Country only: DE, GB, US, JP | €3.50 / GB €3.15 at 1 TB (−10%) |
Prices are list prices in EUR, excl. VAT. Volume discounts apply automatically at checkout — full ladder on the pricing page.
Connect
One connection string per market
The country, city and sticky session are tokens in the username. Change the token, change the market; keep the session handle, keep the IP.
http://USERNAME_pool-arcfast_country-de_session-k3f9a1x2_sesstime-10:PASSWORD@proxy.arcproxies.io:8000Swap _country-de for any market you quote. The full grammar is on the residential proxies page.
Illustration
What monitoring 1,500 links in eight markets costs
An illustration with round numbers — your pages, payloads and retry rate will differ. The arithmetic is the real price ladder.
Assumptions
- Tracking links
- 1,500
- Markets
- 8
- Hop-only checks
- 2 a day at 30 KB per chain
- Rendered landing page checks
- 4 a month at 1.5 MB
- Bandwidth per month
- ≈ 94 GB
On ARC Fast
€139.12per month, excl. VAT
94 GB bought in one purchase at €1.48 / GB (−26% volume rung, applied automatically).
The same 94 GB on ARC Basic: €65.80 at €0.70 / GB. Move down as soon as the cheaper pool holds up.
Hop-only checks are cheap; rendered landing pages are where the bandwidth goes. Render weekly and on every chain change rather than on every check. See reducing proxy bandwidth.
Bandwidth never expires, so a bigger single purchase is only ever cheaper per GB. See the ladder.
In depth
Affiliate link monitoring, in depth
What an affiliate link check should test
Checking that a link 'works' is not enough, because almost every broken affiliate link still returns a page. A useful check compares the chain against what the link is supposed to do, per country:
| Failure | What the visitor sees | How a check catches it |
|---|---|---|
| Expired or paused offer | An expired-offer page or the advertiser's home page | Final URL does not match the expected domain or path |
| Geo-fallback | A different offer, or a generic page | Run from an exit in each target country and compare final URLs |
| Dropped click ID or sub-ID | The right page, but no attribution | Required parameter missing from a Location header |
| Redirect loop | An error in the browser | Same URL seen twice in one chain |
| Too many hops | Slow load; some clients give up | Hop count above your limit |
| Script or meta-refresh redirect | Lands correctly in a browser, not in an HTTP client | Render the final page in a headless browser |
| Landing page drift | Changed price, claim or disclosure | Diff the rendered page against the last approved snapshot |
Redirect chains: what HTTP says and what browsers do
HTTP defines the redirect status codes 301, 302, 303, 307 and 308, each with a Location header naming the next URL. RFC 9110 says a client SHOULD detect and intervene in cyclical redirections, and notes that an earlier version of the specification recommended a maximum of five redirections, so some clients may still enforce a fixed limit.
For affiliate chains that means two things. First, a chain that works with a permissive checker can fail in a stricter client, so track hop count and alert on long chains. Second, 303 and, in practice, 301 and 302 can change the method of the next request, which is irrelevant for GET-based tracking links but matters if any hop is a form post.
Ad platforms have their own rules about where a click may end up. Google's destination requirements, for instance, treat redirects from the final URL to a different domain as a destination mismatch, and disapprove destinations that do not work or return HTTP errors. A broken affiliate chain behind a paid ad can therefore cost the ad as well as the commission.
Brand bidding compliance, observed not clicked
Most affiliate programmes restrict affiliates from bidding on the advertiser's brand terms in paid search. That restriction lives in the programme's terms, not in the search engine's policy: Google's trademark policy lists using trademarks as keywords as something it does not restrict, while it can restrict trademarks in ad text, for example in ads from a direct competitor.
Enforcement therefore depends on the programme seeing the ads. Search results and their paid placements vary by country and often by city, so the observation has to come from an exit in the market. Record the query, the country, the display URL and the ad text. See local rank tracking for the mechanics of geo-specific search observations.
Do not click the ads you observe. A click is billed to the advertiser, and generating clicks you do not intend as a genuine user is invalid traffic and against our acceptable use policy.
Choosing exits for link checks
- Country first. Offers and fallbacks are configured per country. Use country geo-targeting on every check, and city targeting only where an offer is regional.
- One exit per chain. A sticky session of a few minutes holds the chain on one IP, like a real visitor's.
- Residential by default, ISP where it agrees. Start on ARC Fast; run a sample of chains on ARC Basic and move the networks where results match.
- Carrier IPs for mobile offers. Offers that route mobile traffic differently need mobile ad verification style checks on ARC Mobile, with a mobile user agent.
The ad verification page covers rendered placement checks on publisher pages; this page is about the link behind them.
Works with anything that takes a proxy URL
- Python requests / httpx
Playwright
- Node.js
- n8n
- changedetection.io
FAQ
Questions
Something not covered? Write to contact@arcproxies.io.
How do I check where an affiliate link redirects?
Request the link with automatic redirects turned off, record the status code and Location header of each hop, and request the next URL yourself until you reach a non-redirect response. Do it from an exit in the target country, on one IP for the whole chain, and render the final page in a browser to catch script redirects.
Why does an affiliate link work for me but not for visitors abroad?
Tracking links route by the visitor's country. If an offer is not available in a market, visitors there are sent to a fallback page or a different offer. Checking from exits in each target country shows what visitors in each market actually get.
How many redirects is too many?
There is no fixed maximum in HTTP today, but RFC 9110 notes that an earlier version recommended at most five and that some clients may still enforce a fixed limit. Every hop adds latency and another point of failure, so alert on chains that are getting longer.
Is bidding on a competitor's brand name against Google's policy?
Google's trademark policy lists using trademarks as keywords as something it does not restrict, though it can restrict trademarks in ad text, for example in ads from a direct competitor. Brand bidding restrictions in affiliate programmes come from the programme's own terms.
Should I click ads to see which affiliate is brand bidding?
No. A click is billed to the advertiser, and generating clicks you do not intend as a genuine user is invalid traffic and against our acceptable use policy. Record the display URL and ad text shown for the query in each market instead.
How much bandwidth does affiliate link monitoring use?
Hop-only checks are tens of kilobytes per chain; a rendered landing page is often one to two megabytes. Monitoring 1,500 links in eight markets twice a day, with weekly rendered checks, comes to roughly 94 GB a month.
Sources & review
Last reviewed by the ARC Proxies team. Prices are read from the live catalog at build time.
- [1]IETF: RFC 9110: HTTP Semantics, Section 15.4 Redirection 3xx
- [2]Google Ads Help: Trademarks policy
- [3]Google Ads Help: Destination requirements
Ad verification
More on ad verification
Get started
Buy a gigabyte and try it on your own targets.
No subscription, no sales call. Code WELCOME15 takes 15% off your first purchase, and whatever you do not use is still there next quarter.