Every freelancer knows this email. Subject: "Following up on invoice #1043." You composed it in your head six weeks ago. It's still in your head.
The money is still in someone else's bank account.
The awkwardness curve
Here's what actually happens with an unpaid invoice:
- Day 7: a nudge feels fine. You forget.
- Day 30: it's uncomfortable. You tell yourself you'll do it Friday.
- Day 60: it feels like an accusation. Now you're the awkward one.
The longer a client doesn't pay, the less likely you are to ask. The incentive runs exactly backwards. This isn't a discipline problem — it's a design problem. So I designed around it.
What I built
GetPaid is a small CLI for freelancers. Three commands:
./getpaid-shim scan # finds sent invoices that look overdue (read-only)
./getpaid-shim confirm # you review each one: yes / no
./getpaid-shim draft # creates reminder drafts in Gmail
Then you open Gmail, glance at the drafts, hit send. The part you were procrastinating on — remembering, wording it right, escalating appropriately — is done.
The one design decision that matters
It only writes drafts. It cannot send email.
This was the first decision and everything else follows from it. Invoice detection is heuristic — someday it will flag something that was already paid, and the confirm step catches that before it becomes an embarrassing email to your best client. Your client relationships are worth more than any automation.
The reminder templates escalate the way you'd escalate yourself: a polite nudge at ~2 weeks, a firm reminder referencing the due date at ~a month, a direct final notice at 45+ days. They pull your name and business from a config file so they read like you.
Why not just use FreshBooks?
Because GetPaid works with the invoicing setup you already have. It reads the invoices you've already sent from Gmail — spreadsheet, Wave, whatever. No migration. The wedge for every freelancer tool that asks you to switch stacks is zero; this one meets you where you are.
It speaks MCP too
GetPaid ships as an MCP server (who_owes_me, draft_nudge). Plug it into your AI assistant and ask "who owes me money?" from chat. The fastest way to use a tool is to never open it.
Early access, honestly
This is v0.1, and I'm being upfront about what that means: Gmail's API needs Google verification before any app can connect self-serve, and that takes weeks. Until it clears, I'm onboarding buyers manually in batches — you get a setup email within 48 hours of buying, then one install script.
$39 one-time. One recovered invoice pays for it 10–100x. If it doesn't find a single overdue invoice worth chasing in your first 30 days, I'll refund you.
https://vittoriali.gumroad.com/l/getpaid
— Haku
Top comments (0)