NNotionPulseBrowse templates
ProductivityFinanceBusiness & FreelanceStudentsContent CreatorsHealth & HabitsProject Management

Build a Notion Invoice Tracker That Actually Gets You Paid

5 min read
Cover image for Build a Notion Invoice Tracker That Actually Gets You Paid

The most common money leak in freelancing isn't underpricing. It's an invoice sent in April that nobody chased in May, discovered in June when you happened to scroll far enough back in your sent folder.

Invoicing software solves this, and if you're sending thirty invoices a month you should buy some. But most freelancers send three or four, and paying a monthly subscription to track four invoices is its own kind of leak. Notion handles this well — provided you build the one thing that makes a tracker useful: overdue status that calculates itself.

The properties you need

One database. Each row is one invoice.

  • Invoice — title, something like "INV-014 — Harbor & Co"
  • Client — text is fine to start; make it a relation later if you run a CRM
  • Amount — number, formatted as currency
  • Issued — date
  • Due Date — date
  • Status — Draft, Sent, Paid
  • Paid Date — date, filled in when the money lands

Notice there's no "Overdue" option in Status. That's deliberate, and it's the whole trick.

Why "Overdue" must not be a status you set

If Overdue is something you manually select, then an invoice is only overdue when you remember to mark it overdue. Which means your tracker tells you what you already knew, and stays silent about exactly the thing you forgot.

Make it a formula instead:

Days Overdue:
if(prop("Status") == "Paid" or empty(prop("Due Date")), 0,
   dateBetween(now(), prop("Due Date"), "days"))
Overdue Flag:
if(and(prop("Status") != "Paid", prop("Days Overdue") > 0),
   "🔴 " + format(prop("Days Overdue")) + "d overdue", "")

Because these recompute from now(), an invoice becomes overdue on its own, on the right morning, without anyone touching Notion. You open the page and the red flags are simply there. That is the entire difference between a tracker that works and a list of invoices.

The one number that matters

Add a view filtered to unpaid invoices — Status is Sent — and turn on the Sum footer on the Amount column.

That number is how much money you are owed right now, in total. Most freelancers cannot answer that question without opening three apps and doing arithmetic, and not knowing it is precisely how an unpaid invoice survives for four months.

Check it weekly. It takes two seconds and it changes behaviour: a number that isn't going down is a number that makes you send the chasing email.

Group by client to see the real pattern

Take the same unpaid view and group it by client, with the Amount sum per group.

Now you can see something the total hides: that one client accounts for most of what you're owed, or that a particular client is always thirty days late. That's not an admin detail — it's pricing information. A client who reliably pays sixty days late is more expensive to work with than their rate suggests, and you should either price that in or require a deposit.

You can build this without any relations, just by grouping on a text field. Adding the relation to a client database gets you the same view from the other direction — outstanding balance visible on each client's page — which is how Invoice & Proposal Hub links into Freelance CRM Pro if you run both.

Track proposals in the same place

Proposals are the mirror image of invoices: money that might arrive rather than money that should have arrived. Same shape of data — a value, a date sent, a status of Sent, Accepted or Declined, and a follow-up date.

Keeping them adjacent is useful because the two together tell you something neither does alone: what you're owed, plus what's plausibly coming. For a freelancer deciding whether to take an underpriced job this month, that combined picture is the actual input to the decision.

Add a follow-up date to every proposal, and a view filtered to follow-ups that have arrived. Most proposals aren't declined — they're forgotten, on both sides.

The habit that makes it work

Ten minutes, once a week:

  1. Open the unpaid view. Look at the sum.
  2. Anything with a red flag, send the chasing email. Now, not later.
  3. Any proposal past its follow-up date, follow up.
  4. Mark anything that arrived as Paid and set the Paid Date.

Step four matters more than it seems. Filling in Paid Date is what makes "how much did I actually earn in March" answerable later, from a view grouped by paid month. Skip it for six months and you'll be reconstructing your income from bank statements at tax time.

What Notion won't do here

Being straight about the limits, because they're real:

  • It won't send the invoice. This is a tracker, not an invoicing tool. You'll still generate the actual document elsewhere — most freelancers use their accounting software or a PDF template.
  • It won't chase automatically. No dunning emails. The red flag tells you; you send the email.
  • It won't reconcile with your bank. No feed, no matching. You mark things paid by hand.
  • It isn't your accounts. Come tax time, your accountant wants the real records, not a Notion database.

What it does give you is the thing the expensive tools are mostly used for anyway: knowing, at a glance, who owes you money and how late they are. For a freelancer sending a handful of invoices a month, that's ninety per cent of the value at none of the cost.

Start smaller than you think

If this is more structure than you want today, start with the client side — a simple client tracker with a note about what you last invoiced will carry you for a while.

Add the invoice database the first time you catch yourself wondering whether a client ever paid you. That's not a failure of memory; it's the signal that you've outgrown tracking money in your head.

Templates mentioned in this post

Related reading

New templates, roughly monthly

One email when something new ships, plus the occasional Notion system breakdown. No drip sequence, no upsell ladder — unsubscribe in one click.