I'm currently working on a series of automations for a mid-sized grantmaker.
One of the challenges they have is keeping track of the dozens of grantees they support, each with their own milestones, payment schedules and reporting deadlines.
Every month is a fire drill. A grant report is late. A payment was meant to go out, but didn't. The only record of any of it lived in someone's head or a messy spreadsheet.
So I proposed a solution: a single tracker that watches every due date and notifies the right person at the right time.
Grantees get nudged before a report is due. The finance lead gets flagged the moment a payment is ready to release, and because they bank with Wise, the payment is automatically setup waiting for a single approval. Nothing slips, and nobody has to remember anything.

How it works
Every grantees' milestones, payments and report dates live in one place. A scheduler checks those dates once a day. When a report is due soon, it nudges the grantee automatically, and keeps quiet once they submit. When a milestone is met and a payment comes due, it flags the finance lead and stages the payment in the bank, ready for one approval. Everything gets logged, so they always know what was sent and when.
Here's how we built it
- We started with one home for the grantees. Every grantee goes in one table (we use Notion, Google Sheets works just as well), one row each, with the grant, the report due date, the next payment amount and its release date.
- We put a date on everything. This is the part that makes the whole thing work. Each report date and each payment date is a real date field, not a note. The scheduler reads those dates, so they have to be structured.
- We added a status to each row. A simple field like "report due", "report submitted", "payment ready", "paid". The system reads this to decide whether to nudge or stay quiet.
- We set up a daily check. Every morning, a scheduled run reads the whole table and looks at the dates.
- We nudge the grantee before a report is due. When a report date is a set number of days away (say seven, then two), the check sends a reminder by email (we use Gmail and send from the grant lead's address). Once the status flips to "submitted", the nudges stop.
- We let an assistant write the nudge. Instead of a fixed template, an AI assistant (we use Claude) drafts each reminder in their voice, with the grantee's name and the report due. Optional, but it stops every email reading like a robot.
- We flag finance when a payment is ready. When a milestone is met and a payment date arrives, the check posts an internal flag to the finance lead (we use Slack, a plain email works too): "Payment 2 for X, £15,000, staged and ready to approve."
- We stage the payment in the bank. They bank with Wise, which has an API, so the check sets the payment up in the Wise dashboard with the amount and recipient already filled in. The finance lead opens it and approves once. No retyping account numbers, no copy-paste from the spreadsheet.
- We log every action. Each nudge sent and each flag raised gets written back to the row with a date. Now there is a clean record of what went out, and the system never sends the same nudge twice.
What we learned building it
The dates do all the work. The moment every report and every payment is a real date field instead of a line in someone's notes, the rest is just a daily check reading them. Most of the effort went into setting the table up cleanly, not the automation.
Tools used
- Tracker: Notion (or Google Sheets)
- Nudges: Gmail
- Nudge drafting: Claude
- Finance flag: Slack (or email)
- Payments: Wise
If your organisation runs on deadlines and payments that can't slip, this is worth setting up.