Redirect Chain Tracer – Bulk Redirect Checker avatar

Redirect Chain Tracer – Bulk Redirect Checker

Pricing

from $0.50 / 1,000 results

Go to Apify Store
Redirect Chain Tracer – Bulk Redirect Checker

Redirect Chain Tracer – Bulk Redirect Checker

Trace HTTP and meta-refresh redirects in bulk. Export visited URLs, status codes, loop detection and explicit incomplete-chain reasons 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

18 days ago

Last modified

Security

Limited permissions

Share

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

Trace HTTP redirects and HTML meta-refresh links in bulk. Export each visited URL, status code, redirect target and the last observed response to JSON, CSV or Excel. Use the report for SEO migrations, HTTP-to-HTTPS checks and recurring link audits. Unresolved chains are explicitly marked, so a hop limit or failed request cannot be mistaken for a verified final destination.

What data can you extract?

FieldMeaning
urlNormalized starting URL; bare domains use HTTP so HTTPS redirects remain visible
final_urlLast URL requested; a verified terminal destination only when is_complete is true
final_statusLast HTTP status, or null when the request failed
hop_countTransitions actually followed: number of visited chain entries minus one
redirect_countRedirect targets observed, including an unfollowed target at the limit
redirectedAt least one redirect target was observed
chainOrdered entries with url, status_code, absolute location, and type
is_loopA target returns to an equivalent URL already visited
is_completeA terminal response was observed and the applicable HTML inspection completed
stop_reasonWhy tracing stopped; see below
next_urlUnfollowed target at a loop, hop limit or unsupported redirect; otherwise null
source, scraped_atSource label and UTC observation timestamp

A resolved chain can end at 404, 403 or 500. is_complete describes tracing coverage, not whether the destination is healthy or correct for your migration.

How to use

  1. Paste HTTP/HTTPS links into URLs to trace, or enter bare domains.
  2. Set Maximum requests per URL (default 15, up to 50) and Max URLs per run (default 200, up to 2,000).
  3. Start the Actor. Inspect Run coverage report and the is_complete column before using the exported destinations.
{
"urls": ["http://github.com", "http://docs.apify.com"],
"maxHops": 15,
"maxItems": 200
}

Scheme/host case, default ports, empty root paths and fragments are normalized before deduplication. example.com, http://EXAMPLE.com:80/ and http://example.com/#section produce one trace. HTTP and HTTPS remain distinct; path case, query order and query values are preserved. Invalid values fail validation before requests start. Embedded URL credentials and non-HTTP redirects are unsupported.

Output example

Illustrative successful HTTP-to-HTTPS trace; destinations and responses can change:

{
"url": "http://example.com/",
"final_url": "https://example.com/",
"final_status": 200,
"hop_count": 1,
"redirected": true,
"chain": [
{"url":"http://example.com/","status_code":301,"location":"https://example.com/","type":"http-301"},
{"url":"https://example.com/","status_code":200,"location":null,"type":"http-200"}
],
"is_loop": false,
"source": "redirect-tracer",
"scraped_at": "2026-10-20T00:00:00Z",
"is_complete": true,
"stop_reason": "terminal_response",
"next_url": null,
"redirect_count": 1
}

Distinguish complete traces from partial evidence

stop_reasonMeaning
terminal_responseReached a response without another supported redirect; inspect its status code
hop_limitThe request limit was reached while another target remained
loopA previously visited normalized URL appeared again
request_errorDNS, connection, TLS or request failure; earlier hops remain in the row
missing_locationA 301/302/303/307/308 response supplied no usable Location
invalid_redirectTarget URL is malformed, uses an unsupported scheme or embeds credentials
body_limit / body_errorHTML inspection stopped at 2 MB or failed before completion

Only terminal_response sets is_complete: true. A failed URL still produces a billable diagnostic row; a trace is not a guarantee of a healthy destination. JavaScript redirects are not executed. HTML responses are inspected for meta refresh; other content types are not scanned as HTML. A per-request timeout applies and upstream access can fail.

RUN_SUMMARY reports stored rows, unresolved chains, skipped work due to the budget, and the stop reason. status: complete means the selected work within the item cap finished with resolved chains; partial means some chains are unresolved or the budget left selected URLs unprocessed. incomplete means execution failed. A run can show Apify's SUCCEEDED while its report is partial.

Budget allowance is checked before each group of at most ten traces and again before storing results. Only rows accepted by the SDK count as delivered. A running group may already have started when the allowance changes. Resurrection uses the existing dataset to skip stored URLs and respects the same global item cap; earlier rows without completion fields remain unverified. Across separate runs, the same URL is a fresh billable trace.

Pricing

Current base pricing is $0.50 per 1,000 stored trace rows, plus $0.00005 per start event (one per GB of configured memory, minimum one). A 512 MB run storing 100 traces therefore costs $0.05005 before any applicable discounts. Unresolved/error traces count as stored rows. No additional per-hop charge is added. Check the Pricing tab for current terms; a usage budget may stop the run before all supplied URLs are processed.

Migration checks and integrations

  • Compare resolved final_url values with your migration mapping.
  • Flag is_complete: false, final_status >= 400, unexpected 302s or excessive hop_count.
  • Recheck important inbound and campaign links with saved tasks and schedules.
  • Export to Google Sheets, Make, Zapier, n8n or your own API workflow. The Actor does not create schedules or send alerts itself.

Python example for apify-client==3.2.0; set APIFY_TOKEN in the environment. Each call starts a billable run:

import os
from datetime import timedelta
from decimal import Decimal
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("ninhothedev/redirect-chain-tracer").call(
run_input={"urls": ["http://github.com", "http://docs.apify.com"], "maxHops": 15, "maxItems": 2},
memory_mbytes=512, run_timeout=timedelta(seconds=180),
max_total_charge_usd=Decimal("0.01"),
)
if run is None or run.status != "SUCCEEDED":
raise RuntimeError("Inspect the failed run and any retained partial output.")
record = client.key_value_store(run.default_key_value_store_id).get_record("RUN_SUMMARY")
summary = record["value"] if record else {}
if summary.get("status") != "complete":
raise RuntimeError(f"Unresolved or incomplete redirect audit: {summary}")
for row in client.dataset(run.default_dataset_id).iterate_items():
print(row["url"], row["final_url"], row["final_status"], row["is_complete"])

FAQ

Does this prove that a link is safe? No. It reports HTTP responses and HTML meta-refresh targets. It does not inspect malware, validate a site's trustworthiness or execute JavaScript. Send requests only to links you are authorized to check.

Do I need a proxy or login? Neither is required or configured. Datacenter blocking, authentication requirements and rate limits can affect results. A 403/429 is reported, not bypassed.

Why is a one-request chain marked as redirected? A redirect target was observed but the limit prevented following it: redirect_count is 1, hop_count is 0 and is_complete is false.

How do I report a problem? Open an Actor issue with a run URL, sanitized input and expected behavior. Do not include tokens, URL credentials or private links.