Skip to the content

The Invoice Chaser for overdue fee invoices

After busy season the fee invoices sit unpaid, and a reminder has to be courteous because the client is also next year's client. Drop your invoices CSV into the Invoice Chaser and it finds what's overdue, puts it in order, and drafts a reminder for each one in a friendly, firm or final tone that your own day cutoffs choose. It runs on your computer with your own AI key, and it sends nothing. One limit: it only knows what's in your CSV, so a client who paid last week still looks overdue until you update the file.

We'll help you set it up. Setup and support are included.

What you'll need first

Python 3.11 or newer.

What this looks like in your business

A fee reminder from a firm shouldn't threaten anyone. In the sample, the settings give friendly 1 through 20 days, firm 21 through 45 and final after that, and they set no final sentence. So the reminder for a household 120 days late says this is the last reminder, names invoice ACC-1301 and its due date of June 15, 2026, asks the client to make contact today, and says nothing more: no fee, no interest, no threat. The invoice number, amount and date are filled in by code, not typed by the AI. Dates written 10/4/2026 and 2026-10-04 in the same file are both read.

What goes in and what comes out

What you put in

SAMPLE ON MADE-UP DATA invoices.csv

What you put in
SAMPLE ON MADE-UP DATA. From the file invoices.csv, lines 1 to 12.
customer,invoice number,amount,due date,last contact
Hargrove Sample Dental,ACC-1401,450.00,2026-10-25,
Whitlow Sample Landscaping,ACC-1398,325.00,2026-10-10,
Pruitt Household,ACC-1392,180.00,10/4/2026,2026-10-05
Fenwick Sample Print Shop,ACC-1385,1250.00,9/27/2026,
Ostrander Household,ACC-1377,275.00,2026-09-15,2026-09-20
Brightwater Sample Cafe,ACC-1360,890.00,2026-08-29,2026-09-30
Tennyson Sample Auto,ACC-1322,2100.00,2026-07-13,2026-08-15
Marlowe Household,ACC-1301,160.00,2026-06-15,
Dunmore Sample Florist,ACC-1405,500.00,2026-02-30,
Calloway Sample Consulting,ACC-1406,TBD,2026-10-01,
Ashby Household,ACC-1407,0.00,2026-09-30,

What comes out

SAMPLE ON MADE-UP DATA overdue_list.csv

What comes out
SAMPLE ON MADE-UP DATA. From the file overdue_list.csv, lines 1 to 10. Every file the package writes starts with a DRAFT line that names the run, the provider and the exact model. It's shown here as written.
DRAFT run=20261019T210558Z-95ccfd template=invoice-chaser version=1.0.4 provider=openai model=gpt-6-luna input_sha256=63f33813c0e0dcd123df8721d0b93a0af56739915486920b2cb1df99415ded3d
rank,customer,invoice_number,amount,due_date,days_overdue,tone,reminder_draft,run_date
1,Marlowe Household,ACC-1301,$160.00,2026-06-15,120,final,reminder_001.txt,2026-10-13
2,Tennyson Sample Auto,ACC-1322,"$2,100.00",2026-07-13,92,final,reminder_002.txt,2026-10-13
3,Brightwater Sample Cafe,ACC-1360,$890.00,2026-08-29,45,firm,reminder_003.txt,2026-10-13
4,Ostrander Household,ACC-1377,$275.00,2026-09-15,28,firm,reminder_004.txt,2026-10-13
5,Fenwick Sample Print Shop,ACC-1385,"$1,250.00",2026-09-27,16,friendly,reminder_005.txt,2026-10-13
6,Pruitt Household,ACC-1392,$180.00,2026-10-04,9,friendly,reminder_006.txt,2026-10-13
7,Whitlow Sample Landscaping,ACC-1398,$325.00,2026-10-10,3,friendly,reminder_007.txt,2026-10-13
8,Rainer Sample Bakery,ACC-1409,$390.00,2026-10-12,1,friendly,"none, inside quiet days",2026-10-13

The settings you change

Start with the two files. Your invoices go in a CSV with the header customer, invoice number, amount, due date and last contact, saved with the ending .csv. Your settings go in one .txt file, written as name, colon, value. For a firm like the sample, that's business_name: Sample Granite Bookkeeping, friendly_through_day: 20, firm_through_day: 45 and quiet_days: 7. Leave final_notice_sentence out and the final tone carries no next step at all. Take run_date out of your own file, because it fixes the date the days are counted from. A line without a colon is a note and is ignored. In config.json, pick the provider and check the model name. The template_settings block holds customer_name_max_chars (60) and reminder_max_chars (1500).

Before you buy

What it won't do

  • It won't send a reminder.
  • It won't add a late fee, interest or a threat you didn't set.
  • It won't connect to your bank or your accounting login.
  • It won't mark anything paid.
  • It only knows what's in your CSV. If you got paid and didn't update the file, it will still call that invoice overdue.
  • For this trade: it won't write a threat about holding back a return, work or records. The final tone says only what your own sentence says, and this pair's sample sets none. In skipped.csv, a negative amount shows with an apostrophe in front of it.

What you bring

  • Python 3.11 or newer.
  • Your own API key from an AI provider; the sample on this page ran on OpenAI.
  • Your own files for this pair: your fee invoices in a CSV, and one settings .txt file.
  • The customer names in your CSV go to the AI company whose key you use, so the reminder can address them.
  • Invoice numbers, amounts and due dates stay on your computer.
  • Your API key stays in a setting on your computer. The package never saves it, and it goes only to the AI provider you choose, never to us.

Questions you might have

A client paid last week and I haven't updated my sheet. Will it chase them anyway?

Yes. It only knows what's in your CSV, and it won't mark anything paid. A paid invoice you left in the file still gets counted as overdue and still gets a draft. Update the CSV before every run, and read each draft before you copy it into your own email.

Can the final reminder say I'll hold back the client's files?

Only in words you write yourself. The final_notice_sentence setting is one sentence of yours, and the code puts it into final tone drafts exactly as written. The AI never writes a threat. This sample leaves the line out, so its final drafts carry no next step at all, as the Marlowe Household reminder shows.

I use quiet days after I've phoned a client. How do they work?

With quiet_days at 7, an invoice you contacted 7 days ago or fewer isn't drafted. Put the date in the last contact column. The invoice stays on overdue_list.csv and also shows in skipped.csv. In the sample, the Rainer Sample Bakery row is listed with "none, inside quiet days".

My sheet mixes dates like 10/4/2026 and 2026-10-04. Does it cope?

Both are read, and a slash date is always read month first. If your file has day first dates, change them before you run, or an invoice paid on time can look overdue. A date it can't read, like 2026-02-30 in the sample, sends the row to skipped.csv with the reason. It never guesses.

Where to go next

$29, one time

  • One price covers all six templates.
  • Your AI provider bills you separately for each run.

We'll help you set it up. Setup and support are included.

$29 one timeBuy this template