Payment Reconciler
Slug: ai-payment-reconciliation · Category: Billing & Collections · Provisioning: Requires AgentLane staff approval
Runs every night, matches the previous day’s Stripe charges against the outstanding invoice list, and emails the bookkeeper only the ones a human has to decide about. The failure it prevents is the expensive one: chasing a customer for money they already sent.
Required credentials
| Provider | Used for |
|---|---|
anthropic | Explains the ambiguous rows in plain language — never the matched ones, and never any figure |
stripe | Reads charges. Use a restricted key (rk_...) with read access to charges; a key that can move money has no business in this connection |
resend | Delivers the exceptions email |
Stripe is reached through an ordinary HTTP step with the key as a bearer token, the same route Cal.com already takes.
Industry fit
Home Services, Construction, Solar, Automotive, Accounting, Legal, Insurance, Dental, Veterinary, Healthcare, Recruitment — the verticals that invoice after the work and wait to be paid. It pairs with the Invoice & Payment Chaser.
How to deploy
Request it like any non-instant agent, then set the outstanding invoice list on the provisioned workflow’s config as outstandingInvoices — an array of { reference, amountDue, customerEmail }. AgentLane triggers the flow at 2am in the client’s own timezone; a client whose list has never been set is skipped rather than reconciled against nothing, which would report every payment the business took as unexplained.
AgentLane does not keep a ledger of your clients’ own invoices, so this list is yours to maintain. (PartnerInvoice in AgentLane is AgentLane billing the agency — a different thing entirely.)
Flow
Nightly trigger ──► Look up client config ──► Fetch Stripe charges ──► Reconcile (code) ──► Summarise exceptions (Claude) ──► Apply results ──► Email exceptions (Resend)Every match is decided in the code step, on normalised reference, customer and exact minor-unit amount. Refunded and unsuccessful charges are ignored. A charge that matches an invoice for a different amount is classified partial, not matched — the difference is a human’s decision, not a rounding one. No monetary figure ever passes through the model on its way to a total.
The results are handed back to your own system through your registered webhook endpoints, and any running chase sequence for that client is called off.