Daily IP reputation screening with Slack threat alerts

Every morning we check your list of IP addresses for abusive activity, update your spreadsheet, and alert your team only about the risky ones.

Agentic Task
AbuseIPDBGoogle SheetsSlackEngineeringOperationsNotifications & AlertsResearch & MonitoringData Sync
PromptCreate

Every morning at 7am, run on a cron schedule to screen my IP watchlist against AbuseIPDB and only bother me about the risky ones.

First, read the column of IP addresses from my Google Sheet using Google Sheets' Get Values. These are the IPs hitting our login and API endpoints, or an allowlist we want to keep clean. Assume the IPs sit in a single column (for example column A, with a header row) and read the current values each run so we always work from the latest list.

For each IP, check its abuse reputation with AbuseIPDB's Check IP Reputation. AbuseIPDB enforces a daily per-endpoint quota, so cap how many rows are checked per run (default to the first 200 IPs) to avoid exhausting the quota. The abuseConfidenceScore is an integer from 0 to 100, where higher means more likely malicious.

Write the abuse confidence score, the last-reported date, and the top abuse category back next to each IP using Google Sheets' Update Values, so the sheet stays current. AbuseIPDB returns abuse categories as integer IDs, so translate them to words before writing (for example 18 = Brute-Force, 22 = SSH, 14 = Port Scan, 4 = DDoS, 10 = Email Spam). Use the most-reported category as the top abuse category.

For any IP whose confidence score crosses the threshold I set (default 75), post a Slack alert with Send a Message that names the IP, its score, and what it has been reported for, so my team can decide whether to block it. Only alert on IPs at or above the threshold to avoid noise; the clean IPs should still be updated in the sheet but should not trigger a message.

If several IPs cross the threshold in the same run, group them into a single Slack alert so the channel is not flooded, listing each risky IP with its score and top abuse category.

Additional information

What does this prompt do?
  • Reads a column of IP addresses from your Google Sheet each morning, such as the IPs hitting your login and API endpoints or an allowlist you want to keep clean.
  • Checks each address against a global abuse database and records its risk score, when it was last reported, and what it was reported for.
  • Writes those results back next to each IP so your spreadsheet always reflects the latest reputation.
  • Sends a Slack alert only for the high-risk addresses, so your team can decide what to block without wading through noise.
What do I need to use this?
  • A Google account with the spreadsheet that holds your IP list.
  • An AbuseIPDB account (the free tier works for modest lists).
  • A Slack workspace and the channel where you want threat alerts to land.
How can I customize it?
  • Change the alert threshold (the default risk score is 75) to make alerts stricter or more sensitive.
  • Adjust the run time or how many IPs are checked each morning to stay within your AbuseIPDB plan's daily limit.
  • Point it at a different sheet, column, or Slack channel.

Frequently asked questions

What counts as a risky IP address?
Each address gets an abuse confidence score from 0 to 100 based on how often it has been reported for things like brute-force attempts, port scanning, or spam. Anything at or above your threshold (75 by default) triggers a Slack alert.
Will this change my spreadsheet?
It adds the risk score, the last-reported date, and the main reason for reports next to each IP. Your original list of addresses stays intact.
Does it alert me about every IP?
No. To keep the noise down, it only messages your team about addresses that cross your risk threshold. Clean addresses are still updated in the sheet, but they do not trigger an alert.
Do I need a paid AbuseIPDB plan?
The free tier works for smaller lists. AbuseIPDB limits how many checks you can run per day, so for long lists you can cap how many rows are checked each morning or upgrade your plan.
Can I run it more or less often than daily?
Yes. It is set to run every morning at 7am, but you can change the schedule to whatever cadence fits your team.

Related templates

Weekend football matchday preview, posted to Slack

Every Friday, get a ready-to-read preview of your league's weekend matches, with positions, form, scorers to watch, and predicted results, posted to Slack.

API-Sports
Slack
Agentic Task
Auto-refresh a Google Sheet from Databricks every night

Every night we run your saved Databricks query and refresh a Google Sheet with the results, so your team reads the latest numbers without a login.

Databricks
Google Sheets
Deterministic Code
Log daily football results and league standings to Sheets

Every morning, automatically record yesterday's match results and each league's latest table into a spreadsheet you can chart or pivot.

API-Sports
Google Sheets
Deterministic Code
Weekly Braintree revenue and refund report for finance

Every Monday morning, finance leadership gets a clear recap of last week's Braintree sales, refunds, and disputes by email and Slack.

Braintree
Gmail
Slack
Agentic Task
Daily malicious IP threat brief for your security team

Every weekday morning, get a short brief of the internet's most-reported malicious IPs, double-checked against a second source and posted straight to your security Slack channel.

AbuseIPDB
VirusTotal
Slack Bot
Agentic Task
Turn Heroku deploys into a readable Slack changelog

Every time you ship to Heroku, we post a clear summary to Slack listing what changed, who deployed it, and whether it was a rollback.

Heroku
GitHub
Slack
Agentic Task

Stop manually checking IPs against threat lists.

Let this run every morning so risky addresses surface in Slack before they cause trouble.