The Invoice Chaser for overdue job invoices
The work is done, the truck is back, and the property manager's invoice is still open weeks later. Give the Invoice Chaser your invoices CSV and it works out what's overdue, sorts it longest first, and drafts a reminder for each invoice at the tone your cutoffs set. It runs on your own computer with your own AI key, and no reminder leaves unless you send it. The caution: it can't see who has paid, only what the CSV says, so keep the file current.
We'll help you set it up. Setup and support are included.
What you'll need first
You need a computer with Python 3.11 or later and an API key you make yourself at an AI provider.
What this looks like in your business
A shop bills property managers and commercial accounts after the work, and some go past due for months. In the sample, an office building's invoice, 123 days late, gets a final reminder that carries the shop's own sentence: "If this invoice stays unpaid, we'll have to put new work orders on hold until it's settled." The invoice number, the amount and the due date are filled in by code, not by the AI. Two invoices inside the five quiet days are listed but get no draft. A due date typed as 2026-13-02, or as Sept 30, goes to skipped.csv with the reason.
What goes in and what comes out
What you put in
SAMPLE ON MADE-UP DATA invoices.csv
SAMPLE ON MADE-UP DATA. From the file invoices.csv, lines 1 to 12. customer,invoice number,amount,due date,last contact Larkspur Sample Property Group,E-5010,1840.50,2026-10-20, Cobblestone Sample Apartments,E-5004,625.00,2026-10-09, Hartwell Sample Dental,E-4998,2150.00,10/3/2026,2026-10-09 Pemberton Household,E-4990,380.00,9/26/2026, Ironbridge Sample Storage,E-4975,4200.00,2026-09-12,2026-09-22 Valdez Sample Restaurant,E-4961,975.25,2026-09-01, Oakmont Sample Rentals,E-4930,3320.00,2026-08-14,2026-09-14 Sterling Sample Church Hall,E-4902,1450.00,2026-07-10,2026-07-30 Rookwood Sample Offices,E-4871,5100.00,2026-06-12, Fairlane Household,E-5011,260.00,2026-13-02, Tamarack Sample Bakery,E-5012,twelve hundred,2026-09-30,
What comes out
SAMPLE ON MADE-UP DATA overdue_list.csv
SAMPLE ON MADE-UP DATA. From the file overdue_list.csv, lines 1 to 11. 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=20261019T211017Z-026004 template=invoice-chaser version=1.0.4 provider=openai model=gpt-6-luna input_sha256=043f073d65fd6d0402a1ff5ca9cbabf9c38b6a5521a8429e2d59bdf0a14b40d8 rank,customer,invoice_number,amount,due_date,days_overdue,tone,reminder_draft,run_date 1,Rookwood Sample Offices,E-4871,"$5,100.00",2026-06-12,123,final,reminder_001.txt,2026-10-13 2,Sterling Sample Church Hall,E-4902,"$1,450.00",2026-07-10,95,final,reminder_002.txt,2026-10-13 3,Oakmont Sample Rentals,E-4930,"$3,320.00",2026-08-14,60,final,reminder_003.txt,2026-10-13 4,Valdez Sample Restaurant,E-4961,$975.25,2026-09-01,42,final,reminder_004.txt,2026-10-13 5,Ironbridge Sample Storage,E-4975,"$4,200.00",2026-09-12,31,final,reminder_005.txt,2026-10-13 6,Pemberton Household,E-4990,$380.00,2026-09-26,17,firm,reminder_006.txt,2026-10-13 7,Hartwell Sample Dental,E-4998,"$2,150.00",2026-10-03,10,friendly,"none, inside quiet days",2026-10-13 8,Cobblestone Sample Apartments,E-5004,$625.00,2026-10-09,4,friendly,reminder_008.txt,2026-10-13 9,Summit Sample Clinic,E-5015,"$1,090.00",2026-10-12,1,friendly,"none, inside quiet days",2026-10-13
The settings you change
Your invoices.csv needs the five columns customer, invoice number, amount, due date and last contact, and extra columns are ignored. The settings file is a single .txt in the same folder. A shop that wants its property managers chased harder might use the sample's lines: business_name: Sample Voltline Electric, friendly_through_day: 14, firm_through_day: 30, quiet_days: 5, and a final_notice_sentence of your own wording. A name the program doesn't know stops the run, so spell the keys as shown. In config.json, choose the provider and the model name. The setting reminder_max_chars is 1500, and customer_name_max_chars is 60.
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 know a warranty callback from a paid job, or that a customer disputes the work. The reminder carries only your one sentence and the amount, the date and the number from your file. In skipped.csv, a negative amount shows with an apostrophe in front of it.
What you bring
- You need a computer with Python 3.11 or later and an API key you make yourself at an AI provider.
- OpenAI made the sample above.
- Then bring your job invoices in a CSV and one settings .txt file.
- Only customer names are handed to your AI company, to address each reminder.
- The numbers, amounts and dates are filled in by our code on your machine.
- 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
Can I tell it to put new work on hold for the property managers?
Only with your own sentence. The final_notice_sentence setting holds one sentence, and the code drops it into final tone drafts exactly as you wrote it. The AI never writes a threat. In the sample it reads "If this invoice stays unpaid, we'll have to put new work orders on hold until it's settled." Leave the line out and your final drafts carry no next step.
A customer got a call from my office yesterday. Will the reminder go out anyway?
Not if the call is inside your quiet days. The sample sets 5. An invoice you contacted within the last 5 days isn't drafted. It stays on overdue_list.csv and shows in skipped.csv. In the sample, the Hartwell Sample Dental and Summit Sample Clinic rows are listed as "none, inside quiet days".
My job software exports odd rows, like a zero invoice or a date that doesn't exist. What happens?
Each odd row goes to skipped.csv, and the last column says why in plain words: not due yet, bad due date, bad amount, amount is zero or below, inside quiet days. In the sample, "twelve hundred" as an amount and 2026-13-02 as a date are both skipped. Nothing is guessed.
How does it pick friendly, firm or final?
By days overdue against your two cutoffs. The sample sets friendly through day 14 and firm through day 30, so an invoice 17 days late is firm and one 31 days late is final. Our code counts the days and sorts the list, longest overdue first. The AI writes only the words of each reminder.
Where to go next
$29, one time
- Running the template costs extra, billed by your AI provider.
We'll help you set it up. Setup and support are included.