Pull the AR aging report, score each customer by payment history, draft a tone-matched reminder for each overdue invoice, and present them to the owner. Nothing sends until the owner says so.
Do not ask again on subsequent runs.
-
Pull overdue receivables. Query QuickBooks AR aging for all invoices more than 1 day past due. If Stripe is enabled (owner confirmed at setup), also pull Stripe overdue invoices.
-
Cross-reference payment history. For each overdue customer, query PayPal for settled transactions using these parameters:
- (settled only — filters out pending and denied transactions that inflate result size and increase rate-limit risk)
- Date window: last 7 days ending today (not 14 or 30 — wider windows are the primary cause of PayPal 429 rate limit errors)
If PayPal returns a 429 rate limit error:
- Retry once immediately with a 3-day window instead.
- If the retry also returns 429, skip the PayPal cross-reference entirely for this run. Flag all customers in the batch as "PayPal unavailable — verify manually" in the summary table. Proceed to scoring using QuickBooks history only. Do not silently drop the caveat.
If a customer shows a settled payment within the query window, flag as "possibly paid — verify" and exclude from the draft queue.
-
Score each customer. Read
reference/tone-matching.md for scoring logic. Result:
,
, or
.
-
Draft reminder emails. One email per customer — consolidate multiple overdue invoices into one email. Match tone to score. See reference/examples/gentle-reminder.md and reference/examples/firm-reminder.md.
-
Present drafts to owner. Show a summary table first:
| Customer | Amount Due | Days Late | Tone | Send via |
|---|
| Acme Corp | $1,200 | 18 days | Gentle | PayPal |
| Smith LLC | $450 | 47 days | Firm | Gmail draft |
Then show each draft email in full. Wait for owner to say "send these" or approve individually.
-
Send or queue — only after approval.
- PayPal invoices: send the reminder via PayPal.
- Non-PayPal invoices: queue as a draft in the owner's configured mail app.
- Never send without explicit approval.
-
Report what happened. List what was sent, what was queued as draft, and what was flagged (possibly paid, excluded).