Redirect Checker: Bulk 301/302 Redirect Chains · Apify
Redirect Checker: 301 Redirect Chains, Hop by Hop avatar

Redirect Checker: 301 Redirect Chains, Hop by Hop

Pricing

from $0.21 / 1,000 checked urls

Go to Apify Store
Redirect Checker: 301 Redirect Chains, Hop by Hop

Redirect Checker: 301 Redirect Chains, Hop by Hop

Check where your URLs redirect: every hop with its status code and Location header, the final URL and status, the number of hops, redirect loops, http to https and www changes. Only the URLs you give are checked, no crawling. Empty input runs a free demo.

Pricing

from $0.21 / 1,000 checked urls

Rating

0.0

(0)

Developer

Actor Factory

Actor Factory

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Features

Limited permissions

Share

Redirect checker for lists of URLs: follow every redirect hop by hop and see the full chain.

Paste URLs (or pick a dataset), press Start, and get one row per URL with every hop's HTTP status code and raw Location header, the final URL and status, the number of hops, redirect loops, and whether the chain moved from http to https or added or removed www. Made for site migrations (verify your 301 map), SEO audits (find chains, temporary redirects and loops) and checking short links before you publish them.

Try it free: leave the input empty and press Start — a few sample URLs are checked (not charged, rows carry _demo: true).

What you get

urlstatusChainhopsfinalUrlhttpToHttpswwwChangeloop
http://example.com/old301 > 302 > 2002https://www.example.com/newtrueaddedfalse
https://shop.example/a302 > 3072https://shop.example/afalsenulltrue
https://example.com/2000https://example.com/falsenullfalse

Each row also has the full chain:

[
{"step": 1, "url": "http://example.com/old", "statusCode": 301, "redirectType": "permanent",
"location": "https://example.com/old", "nextUrl": "https://example.com/old"},
{"step": 2, "url": "https://example.com/old", "statusCode": 302, "redirectType": "temporary",
"location": "https://www.example.com/new", "nextUrl": "https://www.example.com/new"},
{"step": 3, "url": "https://www.example.com/new", "statusCode": 200, "redirectType": null,
"location": null, "nextUrl": null}
]

How to use

  1. URLs: full URLs with http:// or https://, one per line — or a dataset and the name of its URL field.
  2. Optional: Maximum hops (default 10), Request method (HEAD then GET, or GET only), timeout, concurrency, User-Agent.
{
"urls": ["http://example.com/old-page", "https://example.com/blog/2019/post"],
"maxRedirects": 10,
"method": "auto"
}

Output fields

  • url, finalUrl, finalStatusCode — what you asked for and where it ended
  • hops, redirected, statusChain (301 > 302 > 200) — how long the chain is
  • chain — every hop: step, url, statusCode, redirectType (permanent for 301/308, temporary for 302/303/307), location (the raw header, relative or absolute) and nextUrl (resolved)
  • loop — a redirect pointed back to a URL already in the chain (error: redirect_loop)
  • httpToHttps, httpsToHttp, wwwChange (added / removed), hostChanged, hasTemporaryRedirect
  • responseTimeMs, checkedAt, error (too_many_redirects, invalid_redirect_url, redirect_to_private_address, timeout, dns_failure, ...)
  • STATS record: URLs checked and charged, redirected, loops, errors, counts by hops and by final status

Limits (cannot be raised by input)

  • Up to 10,000 URLs per run; at most 20 hops per URL; 60 seconds per request at most
  • Only HTTP redirects (3xx with a Location header). JavaScript and <meta refresh> redirects are not followed, because page bodies are never downloaded
  • Polite by design: at most 2 connections per host and at least 0.2 s between requests to the same host
  • URLs that resolve to internal addresses (localhost, private ranges, 169.254.169.254) are never contacted, also when a redirect points there
  • Set a maximum charge per run to cap spend: the run stops cleanly when it is reached and keeps the rows found so far

Pricing

Pay per event: $0.0003 per checked URL ($0.30 per 1,000 URLs), no start fee. A URL is charged only when its chain was followed to the end, to a loop or to the hop limit. Invalid, blocked and unreachable URLs (DNS failure, timeout) and the demo are free. Store discounts apply automatically: BRONZE −10%, SILVER −20%, GOLD −30%. On the Apify Free plan, the $5 of monthly platform credit covers about 16,666 URLs a month.

FAQ

Why HEAD first? It is the lightest request and most servers redirect HEAD the same way as GET. When a server refuses HEAD (405 or 501), the same hop is repeated with GET. Choose GET only if a site answers HEAD differently.

Does it crawl my site? No. Only the URLs you give and the redirects they answer with are requested.

Can I check a migration map? Yes: put the old URLs in, then compare finalUrl with the new URLs in a spreadsheet. hasTemporaryRedirect and hops > 1 show the redirects worth fixing.

I need status codes and response times for all pages, not just redirects. Use the Bulk URL Status Checker from the same developer.

More tools from the same developer