A few weeks ago a Canadian government affairs firm came to me with a problem. Every Monday morning, one of their analysts was opening the Innovation Canada programs database, copying out 1,000+ rows of new and updated funding programs, manually tagging which ones were a fit for which client sector, deduping against last week's list, and putting together a digest email for the partners.

Six hours. Every Monday. By hand.

Worse: by the time the digest landed, half the new programs were already a week old. The team was always playing catch-up, and the partners felt it.

1,615
programs tracked /wk
6 hrs
analyst time saved /wk
0
missed deadlines since launch

The bottleneck wasn't the data, it was the human

The Innovation Canada feed is public. The data is structured. The fit-scoring logic is well-defined. There was nothing about this work that actually required a human, except the part where someone had to sit down on a Monday and grind through it.

That's the kind of work I love automating. Repetitive, rule-based, and bleeding the team's most valuable resource: attention.

"If you can trace it, you can improve it. If you can improve it, you can automate it."

What I built: GrantRadar

I built a self-hosted n8n workflow called GrantRadar that runs every Monday at 6 AM. By the time the team logs in, the analyst work is already done.

Here's every node in the workflow and what it does:

Node 01 · Schedule Trigger
Runs the workflow every Monday at 6 AM

A simple cron trigger. No webhooks, no manual button. The workflow fires on a schedule so it's predictable, observable, and easy to debug.

Node 02 · HTTP Request
Pulls the live Innovation Canada feed

Hits the public IC programs endpoint, returns 1,615 active funding programs as JSON. Cached locally so we can replay if anything downstream fails.

Node 03 · Code
Cleans, normalizes, deduplicates

Standardizes field names, parses dates, deduplicates against last week's snapshot stored in Supabase. Only new or updated programs continue downstream.

Node 04 · Split In Batches
Loops through programs one at a time

To respect Claude's rate limits and avoid one bad request crashing the whole run, each program is processed individually with retry logic.

Node 05 · Claude (Anthropic)
AI fit-scoring against client sectors

This is the magic. Each program is sent to Claude with a custom prompt that knows the firm's client portfolio: their sectors, their geographies, their funding ranges. Claude returns a structured score (HIGH / MED / LOW) plus a one-line rationale.

Node 06 · Google Sheets
Writes the scored programs to a live tracker

The team's existing Google Sheet gets new rows appended. Color-coded by score, sortable, filterable. The format the analysts already know, just populated automatically.

Node 07 · Gmail
Sends a Monday digest to the partners

An email with the top 10 high-fit programs lands in the partners' inboxes at 6:30 AM, with a link to the full tracker. The digest is templated so it looks identical to the one the analysts used to write.

The honest result

The workflow has been running for several weeks now. The analyst still glances at the tracker on Monday morning, but they're using the time to think about which programs to surface to which clients, not to copy-paste from a database.

The 6 hours we saved? It went straight into client-facing work that actually moves the firm forward.

A note on transparency

A small confession: the first version of the AI scoring node had a bug where about 15% of programs were getting flagged as "unknown" instead of being properly scored. We caught it in the second week of running, traced it to an edge case in the Claude prompt, and patched it. Now we're at over 99% successful classification.

I'm calling that out because most case studies hide stuff like that. Real automation work has bugs, has trade-offs, has things that need a second pass. The win isn't perfection on day one. The win is a system that gets better every week and a feedback loop tight enough to catch issues fast.

Want the workflow?

I'm packaging GrantRadar as a fork-able template. If you want to track a different dataset (your country's funding programs, RFPs in your industry, anything with a structured public feed) the same skeleton works.

Got a 6-hour-a-week problem?

Book a free 30-minute audit. I'll tell you exactly what I'd build, what it would cost, and what it would save you.

Book a Free Audit

We build these systems for government relations firms. See what yours could look like.

Built for public affairs →

Get every teardown in your inbox.

One email per build. The full node-by-node breakdown, plus the JSON to fork it. No fluff, no spam.