Link Route Audit — Bulk HTTP Status & Redirects icon

Developer tools · Live on Apify

Bulk URL Status and Redirect Checker for SEO and Site Moves

Paste a list of URLs and see where each one ends up. You get the final status code, the redirect steps and a broken flag. It helps before and after a site move.

About $2.26 for 1,000 URLs$0.00225 per URL + $0.001 per run. One run gives up to 100 URLs. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

How to use it: 3 steps

  1. Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: {"url": "https://example.com"} in URLs to check. Each start is one run.
  3. Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.

What it does

Check a list of public URLs before a site move or SEO review. This bulk URL status checker returns the final HTTP status, redirect destinations and broken-link flags for each processed URL. Start with one URL and open its result table. Each run accepts up to 100 input items. An empty list fails; a stopped run may return part of the list. The charge model is pay per useful HTTP result plus an Actor Start event and platform usage. Optional Apify Proxy traffic adds usage costs.

Who uses it

SEO specialists

Find broken links and long redirect chains in a URL list.

Site migration teams

Check that old URLs point to the right new pages.

QA engineers

Re-check key links after a release and keep a dated export.

Price

Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.

What you pay forPriceWhen
Start fee$0.001Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more.
HTTP URL result$0.00225One stored URL result with an HTTP response, including 404 or 503. No charge for technical failures, duplicates or invalid inputs.

Examples

  • One URL: about $0.0032.
  • 1,000 URLs: about $2.26 (10 runs of up to 100).
  • Every day 100 URLs, for 30 days: about $6.78 a month.
  • 100 URLs once a week (4 runs a month): about $0.90 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,200 URLs.

Prices checked on 24 October 2026. See the current price on Apify.

Questions

Does it find soft 404 pages?

No. It reports the real HTTP status. A page that says not found with status 200 is not flagged.

Is every redirect a problem?

No. A redirect is normal. Check loops, many hops or a broken final page.

Can I check internal or login pages?

No. It checks only public HTTP and HTTPS addresses.

Does a 404 cost money?

Yes. A 404 is a useful result and counts. Network failures with status 0 do not count.

Can I see the status of every redirect hop?

The Dataset stores destination URLs, not a status code for each hop. statusCode is the final HTTP code, or 0 on technical failure.

Is a redirect always broken?

No. A redirect to 200 normally has isRedirect: true and isBroken: false. A redirect to 404 is broken.

Is the response time a speed score?

No. It is the whole URL check time from the run environment, including retries and waits. It is not a Core Web Vital.

Does a schedule compare results for me?

No. Export the dated rows and compare them in your own system.

Details

Step by step on Apify
  1. Open the Actor in Apify Console and choose Input.
  2. Switch to JSON and paste the minimal input below, or enter the URL objects in URLs to check.
  3. Keep direct requests for a first check. A fresh form offers one public example.com URL; you can start this sample without editing it. API calls still require startUrls and never substitute a hidden demo.
  4. Click Start. A run uses the selected build and run options.
  5. Open Output → URL results → Table. Check statusCode and finalUrl.
  6. Choose Export to save the results. Open Storage to read the separate summary.
Use cases
TaskAdd to startUrlsReviewNext step
Site migration URL checkYour old public URLsredirectChain, finalUrl, isBrokenCompare the final destination with your own migration map
Broken link listURLs from a link reportstatusCode, isBroken, statusMessageFix or replace failing links
QA after a releaseKnown public endpointsstatusCode, responseTime, checkedAtRe-check failed endpoints and keep the dated export
Redirect auditKnown redirecting URLsOrdered redirectChain, isRedirectReview extra hops or broken destinations
Tips for better results
  • Compare the final URL with your own redirect map after a move.
  • Split big lists into parts of 100 URLs. One run takes up to 100.
  • Look at the hop list. Many steps can slow pages and hurt SEO.
Limits and good to know
  • At most 100 input items per run, counted before duplicate removal. Split larger lists yourself
  • Concurrency range 1–100, default 20. Actual Cloud capacity was checked at concurrency 3 with 100 simple HTTP results; this does not promise the same speed or success for all sites
  • Up to 10 redirect hops; loops and the hop limit produce broken results. A final target can be present in the chain before the cap prevents fetching it
  • Up to 2 extra retries per request for network failures, 429 or 5xx. HEAD→GET fallback adds a request. Requests can therefore exceed the number of URLs
  • Request phase timeout 1–30 seconds, default 10. Several phases, hops and retries can take longer than one timeout value
  • Only public HTTP/HTTPS destinations. Private-network, loopback and unsafe targets are blocked, including at redirects and retries. TLS verification stays on
  • URL credentials, secret query values and fragments are rejected. Custom proxy credentials are not accepted
  • Results are saved as a batch after checking. A graceful stop can save finished and active rows and count queued URLs in unprocessed; a hard platform kill or storage failure may lose final results. There is no streaming or resume guarantee

Troubleshooting

SymptomPossible reasonCheckAction
Input form says “This field is required”Empty URL liststartUrls object arrayAdd at least one full public URL
FAILED with INVALID_INPUTMissing/empty/too-large list, unsupported option, or no valid URLsError summary and input shapeCorrect the input; do not add secrets
Status 0 with null final URLDNS, TLS, connection failure, timeout or blocked targetstatusMessage, failed inputs and logsVerify a public URL and retry a small subset
HTTP 404Server returned Not FoundSubmitted and final URLsCorrect the URL or redirect
Fewer rows than input itemsDuplicates, rejected entries, or queued workduplicates, failedInputs, unprocessedFix the input or split a list
Succeeded but PARTIALSome checks failed technically or input was rejectedSummary, status0 rowsReview the failed subset; a platform success is not proof all URLs are good
Many 429/slow checksServer rate limits or slow responserateLimits, attempts, retriesReduce concurrency and wait before a small re-check
Run stopped before results appearedBatch saving and hard stopTerminal status, summary/storage presenceUse smaller lists and enough run time; do not assume saved rows

For developers

Use it from code

Actor ID: cliqtomedia/bulk-url-status-redirect-checker. You need your Apify API token from Apify Console → Settings → API & Integrations.

Python · apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/bulk-url-status-redirect-checker").call(run_input={
    "startUrls": [
        {
            "url": "https://example.com"
        }
    ],
    "maxConcurrency": 20
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
cURL
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~bulk-url-status-redirect-checker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls": [{"url": "https://example.com"}], "maxConcurrency": 20}'
LangChain · langchain-apify
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/bulk-url-status-redirect-checker")
result = tool.invoke({"run_input": {"startUrls": [{"url": "https://example.com"}], "maxConcurrency": 20}})
print(result)

The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.

Data fields (9)
FieldType
urlstring
statusCodeinteger
statusMessagestring
isBrokenboolean
isRedirectboolean
redirectChainarray
finalUrlstring
responseTimeinteger
checkedAtstring
Input settings (4)

The main fields of the input form. With the API you send them as JSON.

SettingName in the APITypeExample value
URLs to check requiredstartUrlsarray[{"url": "https://example.com"}]
URLs checked at oncemaxConcurrencyinteger20
Connection modeproxyConfigurationobject{"useApifyProxy": false}
Request timeout (seconds)requestTimeoutSecsinteger10

Use cases with this tool

Each guide shows all the steps and the other tools.

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure