Skip to main content
RTILA Marketplace

Mass Alive Checker - project configuration

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 presents the complete project configuration exactly as published - the same JSON the launcher fetches at launch - ready to read, copy, or import into the desktop product. Back to the overview tab.

Project configuration

Full project JSON for mass-alive-checker

Canonical byte length: 4,006 - the length of the canonical form the digest covers.

Canonical digest: bebba5c7baa6c7c1c714429af7b2b0ebdd9479cde7bc057b8a13cfb8209434c0

About the delivered configuration encoding

At launch the backend delivers this configuration to the launcher as plain JSON. The block below is the complete project definition the launcher receives.

What you are reading has machine-readable equivalents, and the JSON at those routes is the same document as the JSON rendered on this page: the listing overview, the per-listing detail document and the configuration document. The digest and byte count shown in the panel header are computed over that document's canonical JSON form - recursively sorted keys, two-space indentation, no trailing newline - which is the form the provisioning pipeline signs and the reconcile control re-digests; it differs from the highlighted block above in key order and by that trailing newline, so hashing the visible text will not reproduce the digest.

Download this JSON
{
  "name": "Mass Alive Checker",
  "settings": {
    "urls": [
      "${urls_to_check}"
    ],
    "headless": false,
    "max_concurrent_workers": 3,
    "humanoidEnabled": false,
    "proxyEnabled": false,
    "captchaEnabled": false,
    "matchTimezoneAndLocale": false,
    "block_resources": false,
    "get_urls_from_sitemap": false,
    "respect_robots_txt": false,
    "skip_initial_navigation": true,
    "variables": [
      {
        "name": "urls_to_check",
        "value": "https://www.google.com\nhttps://example.com\nhttps://this-domain-does-not-exist-9x7q.com",
        "required": true,
        "is_list": true
      },
      {
        "name": "check_status_min",
        "value": "100",
        "required": false,
        "is_list": false
      },
      {
        "name": "check_status_max",
        "value": "399",
        "required": false,
        "is_list": false
      }
    ]
  },
  "datasets": {
    "Alive_Checker": {
      "item_selector": "css=html",
      "properties": [
        {
          "name": "Target_URL",
          "type": "text",
          "selector": "variable=last_target_url"
        },
        {
          "name": "Status",
          "type": "text",
          "selector": "variable=last_http_status"
        },
        {
          "name": "Final_URL",
          "type": "text",
          "selector": "variable=last_final_url"
        },
        {
          "name": "Redirect_Count",
          "type": "text",
          "selector": "variable=last_redirect_count"
        },
        {
          "name": "Content_Type",
          "type": "text",
          "selector": "variable=last_content_type"
        },
        {
          "name": "Server",
          "type": "text",
          "selector": "variable=last_server"
        },
        {
          "name": "Protocol",
          "type": "text",
          "selector": "variable=last_protocol"
        },
        {
          "name": "Navigation_OK",
          "type": "text",
          "selector": "variable=last_navigation_ok"
        },
        {
          "name": "Error",
          "type": "text",
          "selector": "variable=last_navigation_error"
        }
      ]
    },
    "Alive_URLs": {
      "item_selector": "css=html",
      "properties": [
        {
          "name": "URL",
          "type": "text",
          "selector": "variable=last_target_url"
        },
        {
          "name": "Status",
          "type": "text",
          "selector": "variable=last_http_status"
        }
      ]
    },
    "Dead_URLs": {
      "item_selector": "css=html",
      "properties": [
        {
          "name": "URL",
          "type": "text",
          "selector": "variable=last_target_url"
        },
        {
          "name": "Status",
          "type": "text",
          "selector": "variable=last_http_status"
        },
        {
          "name": "Error",
          "type": "text",
          "selector": "variable=last_navigation_error"
        }
      ]
    }
  },
  "commands": [
    {
      "command": "try_catch",
      "params": {
        "try": [
          {
            "command": "goto",
            "params": {
              "url": "${last_target_url}"
            }
          }
        ],
        "catch": [
          {
            "command": "comment",
            "params": {
              "text": "${last_error}"
            }
          }
        ]
      }
    },
    {
      "command": "extract_data",
      "params": {
        "dataset": "Alive_Checker"
      }
    },
    {
      "command": "extract_data",
      "params": {
        "dataset": "Alive_URLs",
        "filter_condition": "Number(item.Status) >= Number('${check_status_min}') && Number(item.Status) <= Number('${check_status_max}')"
      }
    },
    {
      "command": "extract_data",
      "params": {
        "dataset": "Dead_URLs",
        "filter_condition": "!(Number(item.Status) >= Number('${check_status_min}') && Number(item.Status) <= Number('${check_status_max}'))"
      }
    }
  ],
  "authors": []
}

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.