Skip to main content
RTILA Marketplace

Paste a URL list and get back live and dead lists with status codes and redirect chains

Check a URL list in one run: alive or dead, with status codes, redirects, final URLs and server details.

Utility Beginner Stable v1.0.0 Updated Updated 2026-09-20 8 min read
Download
  • Windows x86_64

    BOT_mass-alive-checker.exe

    98.9 MB

    Download
  • macOS Apple Silicon chmod +x

    BOT_mass-alive-checker.sh

    87.5 MB

    Download
  • macOS Intel chmod +x

    BOT_mass-alive-checker.sh

    99.4 MB

    Download
  • Linux x86_64 chmod +x

    BOT_mass-alive-checker.sh

    122.5 MB

    Download

Do not rename the downloaded file - the filename carries the bot's configuration id.

This tab summarises what the bot does, what it costs, the technical requirements it places on your machine, and how the author is credited - the starting point before you download anything.

Key facts

What it does
Check a URL list in one run: alive or dead, with status codes, redirects, final URLs and server details.
What it outputs
BOT_mass-alive-checker.exe
Difficulty
beginner
Platforms
windows, macos, macos_intel, linux
Estimated run time
1-15 minutes depending on list length and slow hosts
Internet at launch
Required
On this page

Overview

The Mass Alive Checker is a bulk URL status checker: a standalone desktop bot that takes a list of URLs, visits each one in a real browser, and records whether it is alive or dead along with its HTTP status code, final URL after redirects, redirect count, content type, server header and protocol. Results are exported as CSV across three datasets - Alive_Checker (the full report), Alive_URLs and Dead_URLs.

What does the Mass Alive Checker do?

You paste a list of URLs, one per line, and the bot works through the whole list in a single run. It is built for speed and honesty rather than depth: three browser workers run in parallel, and every sub-resource - images, scripts, stylesheets, fonts, media, XHR, fetch, websockets and manifests - is blocked, because a status check only needs the navigation response itself. Each URL is visited inside error handling, so a timeout or a domain that no longer resolves never kills the run; the failure is recorded and the next URL proceeds. The scope is deliberately narrow: it validates a list you supply. It does not crawl sites, discover links, or re-check anything on a schedule.

Who uses a bulk URL status checker?

The SEO consultant cleaning a backlink list asks “which of these three hundred domains still resolve, and which redirect somewhere else entirely?” The webmaster mid-migration asks “do all the old URLs return a 3xx, and do they land where I intended?” The content maintainer asks “which links on our resource pages have quietly died this year?” The developer asks “which endpoints in this list now serve JSON or a PDF instead of HTML?” All four need the same artifact: a dated CSV with one row per URL, a status code, and a final destination - produced on their own machine, with no per-check URL cap and nothing uploaded to anyone else’s servers.

How does a run work, step by step?

Inputs come from project settings rather than a mid-run dialog: urls_to_check (a required list, one URL per line), check_status_min (default 100) and check_status_max (default 399). The engine starts at a blank page - initial navigation is skipped - and works through your list. For each URL, a try_catch block wraps a goto navigation; if the navigation throws, the catch branch logs the failure with a comment step carrying ${last_error} and the run continues. After the attempt, the engine’s last-navigation metadata (target, status, final URL, redirect count, content type, server, protocol, success flag, error) is read by three extract_data steps: the full Alive_Checker report; Alive_URLs, filtered to statuses where Number(item.Status) >= Number('${check_status_min}') && Number(item.Status) <= Number('${check_status_max}'); and Dead_URLs, filtered to everything else. Each dataset is exported as CSV beside the launcher.

What does the HTTP status code checker output look like?

The sample row is the listing’s own published sample output, so table and prose agree by construction:

Target_URLStatusFinal_URLRedirect_CountContent_TypeServerProtocolNavigation_OKError
https://shop.example.com/old-page301https://shop.example.com/new-page1text/html; charset=UTF-8nginxHTTP/2true

Target_URL is the URL you supplied, exactly as pasted - the join key back to your original list.

Status is the HTTP status code observed at the end of navigation: 200 for a clean hit, 301/302 for a redirect, 404/410 for gone, 5xx for server errors.

Final_URL is where the browser actually landed after all server-level redirects. Diff it against your intended destination to catch mis-mapped redirects.

Redirect_Count is the number of hops taken. Anything above one is a chain worth collapsing for crawl efficiency.

Content_Type is the served MIME type - the column that reveals a URL now answering with a PDF, JSON or a generic error page type instead of HTML.

Server is the server response header when the host publishes one. Empty is normal: many servers omit or mask it, and absence is never treated as a failure.

Protocol is the negotiated protocol version, useful for spotting URLs still stuck on plain HTTP.

Navigation_OK is the success flag for the attempt itself. When it reads false, the URL never completed a navigation and the row belongs in Dead_URLs regardless of status.

Error carries the failure text - timeout, DNS resolution failure, connection refused - and is empty on successful navigations.

The split happens inside the run, not in your spreadsheet afterwards: Dead_URLs collects every row whose status falls outside your alive window or whose navigation failed, with the reason attached. Because sub-resources are blocked and three workers run in parallel, long lists finish in minutes rather than hours, and there is no per-run cap on how many URLs you paste - the practical limits are your connection and the patience of the target servers. Hosted tools in this space commonly meter checks per batch; here the marginal cost of a bigger list is your own bandwidth.

Can it serve as a URL list validator before a migration?

Yes, in both directions. Before the switch, run the old URL list and confirm nothing is already dead. After the switch, run it again and validate three things per row: the Status is a 3xx, the Final_URL matches the intended new location, and Redirect_Count is one. Rows that fail any of the three become your fix list, and re-running after fixes produces a clean dated CSV you can attach to the migration report as evidence. It is a snapshot validator, though - nothing re-runs itself, so schedule the launcher through your operating system’s scheduler if you want periodic checks.

How does the bulk redirect checker data help after a redesign?

Redesigns break URLs in patterns: old paths 404ing, new paths redirecting to the homepage instead of the right page, chains forming where two redirect rules overlap, and protocol stragglers still answering on HTTP. The Redirect_Count, Final_URL and Protocol columns turn each pattern into a one-line spreadsheet filter. A pivot on Status and Content_Type after a platform rebuild quickly answers “how many old article URLs now serve something other than an HTML page?”

How does it compare to hosted crawlers and monitoring services?

Desktop crawlers discover links themselves and audit whole sites; this bot does the opposite - it validates a list you already have, and never wanders beyond it. Hosted checkers and monitoring services run continuously, keep your URL lists and results in their cloud, and commonly meter how many URLs one check may contain; this bot runs once per launch, entirely on your machine, with the CSVs landing on your disk and no account, upload or per-check quota. The trade is real: no dashboards, no alerting, no history, no crawl discovery. You own the artifact and the workflow outright, and a thousand-URL list costs exactly as much as a ten-URL one.

How do you set it up on Windows, macOS and Linux?

Download the launcher for your operating system from this page. On Windows, run the executable; SmartScreen may ask for confirmation on first launch, and “More info” then “Run anyway” proceeds if you trust the published checksum. On macOS, Gatekeeper may quarantine the download; right-click and “Open”, or clear the flag with xattr -d com.apple.quarantine /path/to/MassAliveChecker, then launch. On Linux, the launcher is a shell script: chmod +x ./mass-alive-checker then ./mass-alive-checker. On first run, paste your URL list into urls_to_check (one per line) and adjust the status thresholds if you want anything other than the default 100-399 alive window; the shipped defaults include one deliberately non-existent domain so you can see what a failure row looks like. A visible browser window opens during the run - flip the headless setting to true for unattended use, and pair it with your OS scheduler for recurring checks.

What do I check when a run returns zero rows?

In order: was the list pasted into urls_to_check one URL per line, with full https:// schemes? Did every navigation fail at once - check the visible browser window and your own connection, since a dead local network produces an all-error batch. Are the thresholds sane - check_status_min greater than check_status_max would classify everything as dead, and an unusual window can hide rows from the dataset you expected them in. If Alive_Checker itself is empty, the runs never recorded navigation metadata; re-run a handful of URLs and watch the browser. The contract is that failure is loud: dead URLs appear in Dead_URLs with their error text, and a row is never fabricated, silently dropped, or marked alive without an observed response.

What are the limits of the bot?

It checks the list you give it - no crawling, no link discovery, no sitemap parsing. It runs once per launch: no scheduling, alerting, history or diffing is built in. There is no retry logic; a flaky host produces one failure row, and re-running is your retry. Because scripts are blocked for speed, JavaScript-driven redirects fired after load may not execute, and pages behind logins, consent walls or bot challenges will report their gate response rather than real content. Server and Protocol columns depend on what hosts choose to publish - empty values are normal. And it sees one moment in time: a 200 now says nothing about next Tuesday.

What is responsible URL list checking?

Check URLs you own or have explicit permission to test. Three parallel workers with blocked sub-resources is already a light footprint, but keep lists batched and re-runs purposeful - do not hammer a small host, and never point the bot at third-party infrastructure as a probe or stress test. Server headers in the output are operational metadata about systems you are entitled to audit; using them to fingerprint and target sites you do not own is out of scope and out of bounds. The acceptable-use policy applies in full before your first run.

#url-status-check#dead-link-checker#bulk-url-checker#http-status-codes#redirect-checker#seo-audit#web-maintenance

Sample output

The first rows a finished run produces. The Output tab documents every dataset and field.

Target_URLStatusFinal_URLRedirect_CountContent_TypeServerProtocolNavigation_OKError
https://shop.example.com/old-page301https://shop.example.com/new-page1text/html; charset=UTF-8nginxHTTP/2true

Related resources

Technical details

Launcher version
1.0.0
Minimum runtime version
1.0.0
Internet required at launch
Yes
Update channel
live
Config encoding
plain

Requirements

  • Minimum launcher runtime version: 1.0.0.
  • Supported operating systems: Windows x86_64, macOS Apple Silicon, macOS Intel, Linux x86_64.
  • On macOS Apple Silicon and macOS Intel and Linux x86_64 the launcher is a shell script: if your system flags it as quarantined or strips the executable bit, grant execute permission with chmod +x BOT_mass-alive-checker.sh and approve the launcher in Gatekeeper (macOS security settings) before the first run.
  • First launch requires an internet connection to fetch the bot's configuration by id.

Responsible use

See our acceptable use policy and takedown process.

Commands this bot uses

These are the commands the published configuration actually uses.

The count is how many times each command appears in the published configuration; it is derived from the project, not hand-authored.

Frequently asked questions

How do I check if a list of URLs is still live?
Paste the list, one URL per line, into the urls_to_check variable on the launcher input screen and start the run. The bot visits each URL in a real browser, records its HTTP status, and splits the results into an Alive_URLs dataset and a Dead_URLs dataset, both exported as CSV you can open in Excel or Sheets.
How do I find dead links in bulk?
The Dead_URLs dataset isolates every URL whose final status falls outside your alive window (100-399 by default) or whose navigation failed outright, with an Error column explaining timeouts, DNS failures and connection resets. You get the full dead list in one file instead of hunting through the complete report.
What HTTP status codes count as alive?
By default, any status from 100 to 399 counts as alive, which means 3xx redirects land in Alive_URLs because the resource still exists somewhere. If you want only clean 200-level responses treated as alive, set check_status_min to 200 and check_status_max to 299 and redirects will move to the dead list instead.
How do I check redirects for a list of URLs?
Every row of the full Alive_Checker report carries a Redirect_Count and a Final_URL column. Redirect_Count tells you how many hops the URL took, and Final_URL tells you where it ended up, so you can spot both single 301s and long redirect chains without opening a browser for each URL.
Can I customize which status codes are treated as alive?
Yes. The check_status_min and check_status_max variables define the alive window, and both filtered datasets are driven by that same window, so Alive_URLs and Dead_URLs always stay consistent with each other no matter what thresholds you set.
How fast is a bulk URL status check?
The configuration runs three browser workers in parallel and blocks all sub-resources - images, scripts, stylesheets, fonts, media, XHR and websockets - because a status check only needs the navigation itself. That makes per-URL cost close to raw response time; hundreds of URLs typically finish in minutes, with slow hosts and timeouts dominating the total.
Does it capture the final URL after redirects?
Yes, Final_URL records the address the browser landed on after all server-level redirects. One honest caveat: because scripts are blocked for speed, purely client-side redirects fired by JavaScript after page load may not execute, so a JS-driven redirect can show as its initial response rather than its destination.
How do I audit a domain migration for broken links?
Export your old URL list from a sitemap or analytics package, run it through the bot, then check three things in the CSV: old URLs now returning 404 or 410, Final_URL values that do not match the intended new destination, and Redirect_Count values greater than one that reveal chains worth collapsing. Re-run after fixes to confirm.
Does the checker work without a browser window?
The shipped configuration runs with headless set to false, so a visible browser window opens and you can watch each URL being checked - useful for diagnosing slow or blocked runs. For scheduled or background use, flip the headless setting to true and the run proceeds without any window.
What happens when a URL times out or fails to resolve?
Each navigation is wrapped in error handling, so one bad URL never stops the run. The failure is recorded with Navigation_OK set to false and the error text captured in the Error column, and the row lands in Dead_URLs. Failures are always visible in the output; a row is never silently dropped or marked alive.
Does the bot need an internet connection to run?
Yes on first run: the launcher fetches its configuration by id from the backend at launch, so an internet connection is required at least the first time it starts.
Can I rename the downloaded file?
No. The downloaded file must keep its exact name - the filename carries the per-bot configuration id, and renaming it breaks the configuration fetch at launch.