Redirect Chain Tracer - Follow Every Hop to Final URL avatar

Redirect Chain Tracer - Follow Every Hop to Final URL

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Redirect Chain Tracer - Follow Every Hop to Final URL

Redirect Chain Tracer - Follow Every Hop to Final URL

Bulk redirect checker: trace every 301/302/307/308 and meta-refresh hop to the final URL with status codes, hop count and loop detection. For SEO migrations and link audits.

Pricing

from $0.50 / 1,000 results

Rating

0.0

(0)

Developer

ninhothedev

ninhothedev

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

Redirect Chain Tracer – Bulk 301/302 Redirect Checker & Final URL Finder

Redirect Chain Tracer is a bulk redirect checker that follows every hop of a URL – 301, 302, 303, 307, 308 and <meta http-equiv="refresh"> – until it reaches the final destination URL. For each URL you get the full redirect chain with the status code of every hop, the final HTTP status, the hop count, and a redirect loop flag. Paste a list of URLs, unwrap short links and tracking links, and export a clean redirect report to JSON, CSV, Excel or Google Sheets. No API key, no login, and you pay only per URL traced.

Built for SEO specialists auditing site migrations, agencies cleaning up redirect chains, affiliate and ad-ops teams checking where tracking links land, and security teams who want to see the real target of a suspicious link before anyone clicks it.

What data can you extract?

FieldExampleDescription
urlhttp://github.comStart URL as traced (http:// is added if the scheme is missing)
final_urlhttps://github.com/URL of the last hop – the final destination
final_status200HTTP status code of the last hop (null if the request failed)
hop_count1Number of redirects followed (0 = no redirect)
redirectedtruetrue if at least one redirect was followed
is_loopfalsetrue if the chain returned to a URL it had already visited
chain[{...}, {...}]Every hop in order: url, status_code, location, type
chain[].typehttp-301, meta-refresh, errorHow the hop happened: HTTP status, meta refresh, or failed request
chain[].locationhttps://github.com/Absolute redirect target of the hop (null on the final hop)
sourceredirect-tracerConstant source label
scraped_at2026-10-15T18:01:34ZUTC timestamp of the trace

How to use the Redirect Chain Tracer

  1. Open the actor and paste your links into URLs to trace – full URLs (https://bit.ly/xyz) or bare domains (example.com, traced as http://example.com so you also see the HTTP → HTTPS redirect).
  2. Optionally adjust Max redirects per URL (default 15) and Max URLs per run (default 200, up to 2,000), then click Start.
  3. Download the redirect report as JSON, CSV or Excel, or send it to Google Sheets, Make, Zapier or n8n. Use Schedules to re-check your redirects weekly after a migration.

Example input:

{
"mode": "trace",
"urls": ["http://github.com", "http://google.com", "https://bit.ly/3example"],
"maxHops": 15,
"maxItems": 200
}

Duplicate URLs are traced only once. Each hop is requested with automatic redirect-following disabled, so every intermediate step is recorded, not just the final page.

Output example

Real output from a local test run with the default input (one item shown):

{
"url": "http://google.com",
"final_url": "https://www.google.com/?sca_esv=c33e463457e396b0&output=search&gbv=1&sei=...",
"final_status": 200,
"hop_count": 3,
"redirected": true,
"chain": [
{ "url": "http://google.com", "status_code": 301, "location": "http://www.google.com/", "type": "http-301" },
{ "url": "http://www.google.com/", "status_code": 302, "location": "https://www.google.com/?gws_rd=ssl", "type": "http-302" },
{ "url": "https://www.google.com/?gws_rd=ssl", "status_code": 200, "location": "https://www.google.com/?sca_esv=...", "type": "meta-refresh" },
{ "url": "https://www.google.com/?sca_esv=...", "status_code": 200, "location": null, "type": "http-200" }
],
"is_loop": false,
"source": "redirect-tracer",
"scraped_at": "2026-10-15T18:01:35Z"
}

A URL that cannot be reached still produces a row (final_status: null, last hop type: "error"), so a single dead link never breaks your report.

Pricing

This actor uses pay-per-event pricing – you only pay for URLs actually traced, no matter how many hops each chain has:

  • $0.50 per 1,000 traced URLs ($0.0005 per result)
  • $0.00005 per actor start (per GB of memory)

Examples:

ScenarioCost
100 URLs, one run≈ $0.05
1,000 URLs, one run≈ $0.50
2,000 migration URLs re-checked weekly (4 runs/month)≈ $4.00 / month
10,000 URLs split over 5 runs≈ $5.00

No proxies or third-party APIs are used, so there are no hidden extra costs. The Apify free plan's monthly credit covers thousands of traces.

Use cases

  • SEO site migration audits – verify that old URLs 301 to the right new pages and find chains longer than one hop that waste crawl budget and link equity.
  • 301 vs 302 checks – spot temporary redirects that should be permanent and HTTP → HTTPS or www / non-www inconsistencies.
  • Redirect loop detection – find URLs that bounce between pages and never resolve (is_loop: true).
  • Short link and tracking link unwrapping – resolve bit.ly, t.co and affiliate or ad-click URLs to the real landing page.
  • Link safety checks – see where a suspicious link in an email or message actually lands before anyone opens it.
  • Backlink and partner link QA – confirm that inbound links still reach a live 200 page.

Integrations and API

Run the redirect checker from the Apify API, CLI or any integration: Make, Zapier, n8n, Google Sheets, Slack, Airbyte or webhooks. Combine a schedule with a webhook and filter on hop_count > 1, is_loop = true or final_status >= 400 to get alerted about broken redirects.

Python example with the official apify-client:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("ninhothedev/redirect-chain-tracer").call(
run_input={"urls": ["http://github.com", "http://google.com"], "maxHops": 15}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["url"], "->", item["final_url"], item["final_status"], item["hop_count"])

FAQ

Is it legal to trace redirects? Yes. The actor sends ordinary HTTP GET requests – the same as opening the link in a browser – and only records public response codes and Location headers.

Which redirect types are detected? All HTTP 3xx redirects with a Location header (301, 302, 303, 307, 308) and HTML <meta http-equiv="refresh"> redirects on 2xx pages. JavaScript redirects (window.location) are not executed, because the actor does not render pages in a browser.

How many URLs and hops can I trace? Up to 2,000 URLs per run (Max URLs per run) and up to 50 redirects per URL (Max redirects per URL, default 15). For larger lists, split them across several runs.

What happens with redirect loops? As soon as a URL appears in the chain a second time, tracing stops and is_loop is set to true. If the hop limit is reached first, the last hop is a 3xx and final_status shows that redirect code.

Do I need proxies? No. Requests use a Chrome-like TLS fingerprint, which works for most sites. Sites that block datacenter traffic may return 403 or 429 – this is then visible as final_status.

Can I schedule regular redirect checks? Yes – create an Apify Schedule with your input and connect the dataset to Google Sheets, Slack or a webhook.

Something does not work? Open an issue on the actor's Issues tab with the run ID and an example URL – we usually respond within a day.