1. Every policy, bill and warranty on one dated timeline
The insurance premium is remembered two days late. The extended warranty on the fridge expired without anyone noticing, and the receipt is somewhere in Downloads next to eleven files called document(3).pdf. The rent agreement's renewal date is known by nobody, and the electricity bill is paid when the reminder SMS arrives, which is not always.
Trigger: Email (bills, policy documents) / WhatsApp (forward a PDF) + scheduled daily sweep
How the workflow runs
- Trigger
A document arrives, however it arrives. An Email trigger catches statements and policy documents; forwarding a PDF or a photo of a paper bill on WhatsApp works too. Bank, insurer and utility portals have no first-party connector — anything from them arrives as an emailed document or is fetched by a Tool (MCP) node.
- Loop
One pass per document. A Loop node walks each new document — including the backlog sitting in Downloads if it is imported once — so a hundred old PDFs are processed the same way as tomorrow's one.
- Agent
Extract only what's printed. An Agent node pulls out {type, provider, reference, amount, due or expiry date, renewal terms} into strict JSON — from the document itself. If a date isn't printed, the field is null and the document is flagged for a human glance, never estimated.
- Knowledge
Filed where it can be found. A Knowledge node stores the document with its extracted fields, so 'where is the fridge warranty' is a search rather than an archaeology expedition.
- Tool (MCP)
Your reminder windows, encoded once. A user-defined tool converts days-to-expiry into an urgency band using the person's own thresholds — the same rule for a policy, a warranty and a rent agreement.
- Output
Reminded in time to act, not after. An Output node sends the urgency band's reminder on WhatsApp or SMS with the document attached and the exact amount and reference printed on it.
- Approval
Paying is always a human click. If the person chooses to pay through the platform, an Approval node holds it and a Razorpay UPI link is generated for them to complete themselves. The workflow never auto-pays, never stores a card number, and never handles an OTP.
Channels & connectors
- SMS / Twilio
- Knowledge base
- Approval / HITL
- Razorpay (UPI)
- Tool (MCP → biller / insurer portal)
Outcome
Every recurring obligation the household actually has sits on one dated timeline with its source document attached, and the reminder arrives with enough runway to do something about it.
Why it helps
The mechanism is that a due date only works if it is extracted at the moment the document arrives rather than remembered later — turning arrival into filing plus a dated reminder removes the step that was always going to be forgotten. It organises the person's own documents; it does not advise on them.
Build spec
1 agent — 1 extraction agent, run once per document via the Loop node. The urgency SpEL rule, the reminder Output and the payment Approval are workflow nodes.
System prompt (paste-ready)
Extract the obligation details from ONE document belonging to the user. Return strict JSON {doc_type (POLICY|BILL|WARRANTY|AGREEMENT|SUBSCRIPTION|OTHER), provider, reference, amount, currency, issue_date, due_date, expiry_date, renewal_terms, notes}. Read ONLY what is printed on the document — if a value is not present, return null and set needs_review=true. Never estimate an amount, never infer a due date from a billing cycle, never guess a provider from a logo you are unsure of. Do NOT extract, echo, store or repeat any card number, bank account number, password, OTP or government identity number that appears on the document — mask them and note that a masked value was present. You are filing and dating the document, not interpreting it: give no advice about whether to renew, switch, buy or claim.Agent roles & model tiers
Document extractor (per document) — Economy tier — bounded structured extraction that runs once per document and across the whole imported backlog, so this is where the cost lives; configure a fallback model so one failure doesn't strand a document unfiled
Extract printed obligation fields into schema-valid JSON. null + needs_review for anything not printed. Mask any card, account, OTP or ID number rather than extracting it. No advice, no interpretation.
MCP connectors
- Insurer / utility / biller portals — no first-party connector; documents arrive by Email or WhatsApp, or are fetched read-only by a Tool (MCP) node
- Razorpay (UPI) — payment link generation only, completed by the human after Approval
- WhatsApp / SMS — the reminder channel
Built-in tools
- knowledge_search (the person's own filed policies, bills, warranties and agreements)
- http_request (fetch a statement the user has explicitly connected, read-only)
- user-defined tool `renewal_alert` (SpEL): input.daysToExpiry <= 7 ? 'ACT_NOW' : (input.daysToExpiry <= 30 ? 'PLAN' : 'OK') — a tenant-authored SpEL expression over the tool's JSON input, sandboxed by construction: the grammar permits no method calls, no constructors, no bean or type references and no loop, so it is a data-transform/formula tool rather than a scripting engine. The benefit is that the person sets their own reminder windows once — someone who needs three weeks to arrange a premium payment sets thirty and seven, someone else sets fourteen and three — and every document from then on is banded by that rule identically, with no developer and no model deciding what counts as urgent today.
Guardrails
- NOT FINANCIAL ADVICE, stated plainly: the agent organises, reminds, summarises and compares the user's OWN documents. It does not give personalised investment advice and does not recommend financial products, insurers, funds or lenders — 'your policy expires on the 14th, here is the document' is in scope; 'you should switch to a better policy' is not
- SECURITY: card numbers, bank account numbers, passwords, OTPs and government ID numbers are never stored, echoed or typed — they are masked on extraction, and the workflow never enters them anywhere
- No financial form is ever auto-submitted and no payment is ever automatic: an Approval node holds every payment, a Razorpay UPI link is generated, and the human completes it themselves
- Dates and amounts come only from the printed document — nothing is estimated or inferred from a billing cycle; a missing field is null and flagged for review, because a wrong due date is worse than a missing one
- Extraction is idempotent per document hash, so re-forwarding the same bill can't create a duplicate obligation or a second reminder
Cost strategy
Extraction is the only model work and it runs once per document — economy tier with a hard per-call cap, which matters most on the initial backlog import where hundreds of old PDFs go through at once. The daily sweep costs nothing at all: `renewal_alert` is deterministic SpEL, so banding every tracked obligation every morning is arithmetic, not inference. Run the backlog import in Parallel batches for wall-clock speed at unchanged per-item cost.
Output & delivery
The Loop extracts each document into strict JSON → it is filed in Knowledge with its fields and its source PDF → the daily sweep runs `renewal_alert` over everything tracked → an Output node sends the ACT_NOW and PLAN reminders on WhatsApp or SMS with the document attached → any payment waits at the Approval node and is completed by the person through a Razorpay UPI link.