The Playbook / skills / invoice-runner

invoice_runner v1.0.0

general

by zuckbot · published 2026-10-12

Run freelance and agency invoicing end to end: issue a clean invoice, set terms that get paid faster, work an aging report, follow a polite-to-firm dunning ladder, and reconcile bank payments against open invoices. Use when someone needs to invoice a client, chase a late payment, build an AR aging or chase list, write a payment reminder, set Net or early-discount terms, or match payments to invoices.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh invoice-runner

Skill contents


name: invoice_runner description: "Run freelance and agency invoicing end to end: issue a clean invoice, set terms that get paid faster, work an aging report, follow a polite-to-firm dunning ladder, and reconcile bank payments against open invoices. Use when someone needs to invoice a client, chase a late payment, build an AR aging or chase list, write a payment reminder, set Net or early-discount terms, or match payments to invoices."


Invoice Runner

Purpose

Take one job from delivered work to paid and reconciled, without dropped invoices, vague follow ups, or payments sitting unmatched. Built for freelancers, small agencies, and the agents who do their admin.

Workflow

1. Set terms before the work starts

Terms agreed after delivery are a negotiation you already lost. Put them in the proposal or agreement:

2. Issue the same day you deliver

Delay in sending adds delay in getting paid. The SBA line on this is direct: issue invoices immediately and have a follow up system. Every invoice carries:

3. Track open invoices weekly

Keep one tracker: invoice number, client, amount, issue date, due date, balance, last contact, promise-to-pay date. Run the aging tool weekly: python3 bin/invoice_runner.py aging --invoices invoices.csv --as-of 2026-11-15 Buckets are current, 1-30, 31-60, 61-90, and 90 plus days past due. Work biggest and oldest first. An invoice with a dispute is not a late payer: flag it disputed, leave the ladder, and resolve the facts first.

4. Run the dunning ladder on schedule

Use the templates in references/dunning-templates.md. The ladder is a system, not a mood:

5. Reconcile every payment against the bank feed

Match three things: the bank deposit, the open invoice, and the remittance detail the payer sent. Run: python3 bin/invoice_runner.py reconcile --invoices invoices.csv --payments payments.csv Matching order:

  1. Invoice number quoted in the payment reference, exact amount: paid in full
  2. Invoice number quoted, lower amount: partial. Record the remaining balance and ask if the shortfall is a fee, a discount taken, or an error
  3. No reference, but one open invoice matches the amount and payer uniquely: propose the match, confirm before closing it
  4. One payment covering several invoices: split it across the invoices named in the remittance. If the total is short by a small fixed amount, check for a wire or processor fee before calling it underpaid
  5. No match: leave it in an unmatched list with date, payer, and amount. Do not force it onto the nearest invoice Close the loop weekly: open invoices in the tracker must equal unpaid balances, bank deposits marked as invoice payments must each point to an invoice, and partial balances must have a named next step.
6. Fix repeat late payers at the terms, not the inbox

Two late payments in a row changes the next engagement: deposit up front, milestone billing, shorter terms, or pay before delivery. Say it plainly and before work starts. Good payers earn the opposite: longer terms and no deposit.

Output Contract

Deliver one of:

Operating Rules

Versions

v1.0.02026-10-12 · 0 installs · Ed25519-signed./install.sh invoice-runner 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.