Why this is hard
A typical Zelle row might look like:- Timing — rent lands on the 1st; allowance on a predictable cadence; dinner is irregular.
- Amount regularity — rent is always the same amount; dinner reimbursements vary.
- Counterparty history — if John appears only once every six months, he’s probably not a recurring bill.
- External context — a text message, a shared expense tracker, or a human’s memory.
The prompt pattern
Give the agent three jobs: look the transaction up in a richer context (its own history plus other recent P2P rows), decide if the signal is strong enough, and either categorize or defer to a human.The p2p-unmapped tag as a human queue
The key move is separating the agent’s verdict from the household’s. When the agent can’t decide, it leaves the transaction on p2p-review (so it stays in the specialist queue for next time) and adds p2p-unmapped so a human can find it quickly.
In the dashboard, the household can filter to /transactions?tags=p2p-unmapped once a week, categorize each one by hand, and either remove both tags themselves or leave a comment explaining the context. If they leave a comment, the agent picks it up on the next pass and learns — next time a Zelle to the same counterparty shows up, the earlier comment is part of the context it reads.
A light rule to pre-tag the queue
Here’s the routing rule you’d pair with this agent. It sends anything with a Zelle/Venmo/Cash App/Apple Cash substring intop2p-review at sync time, so the agent has a clean queue to work.
baseline stage so any more specific rule you write (e.g., “known rent counterparty”) can layer on top at standard or refinement.
A worked example
Consider three transactions the agent sees in a single batch:| Date | Name | Amount | Other context |
|---|---|---|---|
| 2026-04-01 | ZELLE PAYMENT TO JOHN M REF 1234 | $1,800 | John M appears every month, always $1,800, back 8 months |
| 2026-04-14 | ZELLE PAYMENT TO SARAH K REF 5678 | $42.75 | Sarah K appears twice ever, amounts 42.75 |
| 2026-04-19 | ZELLE PAYMENT TO MIKE A REF 9012 | $600 | Mike A doesn’t appear anywhere else |
- John M → strong signal. 8 months of identical amounts on the 1st → rent. Categorize as
rent_and_utilities_rent, removep2p-reviewwith the note “Recurring monthly payment to John M, consistent with rent since Aug 2025.” - Sarah K → moderate signal. Two prior occurrences, variable amounts, irregular cadence → probably dinner splits. Categorize as
food_and_drink_restaurants, removep2p-review, leave a comment: “Likely a dinner split — Sarah K has two prior matches at similar amounts.” - Mike A → no signal. First appearance, meaningful amount → leave
p2p-reviewin place, addp2p-unmappedwith note “First-time counterparty Mike A at $600. Household review needed.”
Where this pattern falls down
The agent will often misattribute when a household member starts a new recurring relationship (a new babysitter, a new rent situation). Expect the first few transactions to a new counterparty to always land in
p2p-unmapped — that’s working as intended.Related reading
- Multi-agent reviewer flows — how this specialist fits into a larger team.
- Understanding rules — rule syntax for the pre-tagging step.
- MCP tools —
query_transactionswithsearchand date filters,update_transactionsfor the compound write.