Redirect Chain Tracer - Follow Every Hop to Final URL
Pricing
from $0.50 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
a day ago
Last modified
Categories
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?
| Field | Example | Description |
|---|---|---|
url | http://github.com | Start URL as traced (http:// is added if the scheme is missing) |
final_url | https://github.com/ | URL of the last hop – the final destination |
final_status | 200 | HTTP status code of the last hop (null if the request failed) |
hop_count | 1 | Number of redirects followed (0 = no redirect) |
redirected | true | true if at least one redirect was followed |
is_loop | false | true if the chain returned to a URL it had already visited |
chain | [{...}, {...}] | Every hop in order: url, status_code, location, type |
chain[].type | http-301, meta-refresh, error | How the hop happened: HTTP status, meta refresh, or failed request |
chain[].location | https://github.com/ | Absolute redirect target of the hop (null on the final hop) |
source | redirect-tracer | Constant source label |
scraped_at | 2026-10-15T18:01:34Z | UTC timestamp of the trace |
How to use the Redirect Chain Tracer
- Open the actor and paste your links into URLs to trace – full URLs (
https://bit.ly/xyz) or bare domains (example.com, traced ashttp://example.comso you also see the HTTP → HTTPS redirect). - Optionally adjust Max redirects per URL (default 15) and Max URLs per run (default 200, up to 2,000), then click Start.
- 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:
| Scenario | Cost |
|---|---|
| 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 ApifyClientclient = 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.
Related actors
- Website Uptime & Status Checker – bulk HTTP status, response time and SSL validity check.
- HTTP Security Headers Checker – grade HSTS, CSP and other security headers A–F.
- Website Link Extractor – list all internal and external links of a website, then trace them here.
- JSON-LD Extractor – pull Schema.org structured data from any page.
- Website Contact & Email Extractor – find emails, phones and social profiles on websites.