Help you leverage the API in a more efficient and effective way by connecting it with other tools and services.
Want to check the status and redirect behavior of dozens (or hundreds) of URLs — without writing code?
In this tutorial, you'll build a low-code automated workflow in Retool that connects to the HttpStatus API, processes a list of URLs from Google Sheets, and writes the results (including redirect chains and errors) back into the sheet. You don't need any scripting skills — just follow the steps, and you'll have a working setup in a few minutes.
We'll create a Retool workflow that:
This setup enables ongoing URL validation, automated reporting, and a streamlined way to catch broken or redirected links.
The workflow will automatically validate a list of URLs from the Google Sheets document using the HttpStatus API and returns the validation output (including status codes, number of redirects, complete redirect chains, and any possible errors) along with the requested URL to another tab in the Google Sheets document.
To follow along, you'll need:
By meeting these requirements, you can configure Retool workflows that integrate the HttpStatus API with Google Sheets, and lots of other blocks. This tutorial provides you with a start to setting up a workflow with Retool; the possibilities are endless.
Each step in this workflow performs a specific part (block) of the process, from retrieving URLs to saving the final results.
Visit the Workflows section in your Retool account, and click the 'Create new' button and choose 'Workflow'. A startTrigger block is added to the beginning of the workflow. This allows the workflow to run at set intervals (e.g., every hour, day, or week) or by using a Webhook. You can also run the workflow or specific blocks manually for testing purposes. Retool has also created a code block that should be removed.
This step reads the list of URLs from the sheet and makes them available for the next step.
fetchRequestUrls
.
URLs
.
Now add a Loop block named fetchHttpStatusApi
. This
ensures that each URL is processed individually.
fetchRequestUrls
.
POST
https://api.httpstatus.io/v1/status
Header name: X-Billing-Token
and
Header value: your_api_key
.
Header name: Content-Type
and
Header value: application/json; charset=utf-8
.
requestUrl
value:
{{ value.URLs }}
. You can, of course, include other parameters (see the
documentation ), but the requestURL
parameter is mandatory.
Now that we have fetched the results for all of the URLs, we want to store them in the Google Sheets document.
Add another Loop block named storeApiResults
. This
loop takes the API responses and appends them to the Results tab
of the Google Sheets document.
fetchHttpStatusApi
.
Results
.[
{
"URL": "{{ String(value.requestSettings.custom.requestUrl) }}",
"# Redirects": "{{ value.response.numberOfRedirects != null ? String(value.response.numberOfRedirects) : '' }}",
"Error": "{{ value.response.chain[0]?.errorType ? JSON.stringify(value.response.chain[0].errorType) : '' }}",
"Error message": "{{ value.response.chain[0]?.errorMessage ? JSON.stringify(value.response.chain[0].errorMessage) : '' }}",
"Status code 1": "{{ value.response.chain[0]?.statusCode != null ? String(value.response.chain[0].statusCode) : '' }}",
"URL 1": "{{ value.response.chain[0]?.redirectTo ? String(value.response.chain[0].redirectTo) : '' }}",
"Status code 2": "{{ value.response.chain[1]?.statusCode != null ? String(value.response.chain[1].statusCode) : '' }}",
"URL 2": "{{ value.response.chain[1]?.redirectTo ? String(value.response.chain[1].redirectTo) : '' }}",
"Status code 3": "{{ value.response.chain[2]?.statusCode != null ? String(value.response.chain[2].statusCode) : '' }}",
"URL 3": "{{ value.response.chain[2]?.redirectTo ? String(value.response.chain[2].redirectTo) : '' }}",
"Status code 4": "{{ value.response.chain[3]?.statusCode != null ? String(value.response.chain[3].statusCode) : '' }}",
"URL 4": "{{ value.response.chain[3]?.redirectTo ? String(value.response.chain[3].redirectTo) : '' }}",
"Status code 5": "{{ value.response.chain[4]?.statusCode != null ? String(value.response.chain[4].statusCode) : '' }}",
"URL 5": "{{ value.response.chain[4]?.redirectTo ? String(value.response.chain[4].redirectTo) : '' }}",
"Status code 6": "{{ value.response.chain[5]?.statusCode != null ? String(value.response.chain[5].statusCode) : '' }}",
"URL 6": "{{ value.response.chain[5]?.redirectTo ? String(value.response.chain[5].redirectTo) : '' }}",
"Status code 7": "{{ value.response.chain[6]?.statusCode != null ? String(value.response.chain[6].statusCode) : '' }}",
"URL 7": "{{ value.response.chain[6]?.redirectTo ? String(value.response.chain[6].redirectTo) : '' }}",
"Status code 8": "{{ value.response.chain[7]?.statusCode != null ? String(value.response.chain[7].statusCode) : '' }}",
"URL 8": "{{ value.response.chain[7]?.redirectTo ? String(value.response.chain[7].redirectTo) : '' }}",
"Status code 9": "{{ value.response.chain[8]?.statusCode != null ? String(value.response.chain[8].statusCode) : '' }}",
"URL 9": "{{ value.response.chain[8]?.redirectTo ? String(value.response.chain[8].redirectTo) : '' }}",
"Status code 10": "{{ value.response.chain[9]?.statusCode != null ? String(value.response.chain[9].statusCode) : '' }}"
}
]
Enter a number of URLs in the 'Request URL' column of the 'URLs' tab in your Google Sheets document. Click the 'Run Workflow' button in Retool and inspect the outputs. If all is set correctly, your target table (Results) will begin filling with status results.
Once your workflow is complete, you can activate it to run automatically or trigger it manually whenever needed. Every time it runs, it will:
This setup is ideal for keeping an eye on broken links, unwanted redirects, or downtime. With some minor adjustments, you can even expand the workflow to notify your team via Slack, Teams, email, or another service whenever a problem is detected.
This brings us to the end of this tutorial. I hope this will enable you to create your own workflows in Retool, combining the HttpStatus API with blocks from other apps.