4 ready-to-build workflows

AI agent workflows for Personal finance & document admin

Get renewals, warranties, tax papers and forgotten subscriptions out of the Downloads folder and onto a dated timeline — organised and reminded, never advised, and never paid without your click.

Each recipe below is expressed only in VegaDūta's real workflow building blocks — Trigger, Agent, Knowledge, Condition, Approval, Output, Tool (MCP), Voice, Device, Loop, Code and Parallel — so it maps 1:1 to something you can assemble in the Workflow designer. Consequential actions always pass a human Approval step.

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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

  • Email
  • WhatsApp
  • 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 agent1 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.

2. The tax-time document pack, assembled all year instead of hunted in April

Every April is the same search: interest certificates in one inbox, rent receipts in a phone gallery, donation receipts in a WhatsApp thread, the investment statement never downloaded at all. Three evenings go into finding documents that all arrived months ago and were all, at the time, just closed and forgotten.

Trigger: Email (certificates and statements, year-round) + scheduled Webhook (pre-filing assembly)

How the workflow runs

  1. Trigger

    Catch it when it arrives. An Email trigger catches interest certificates, statements, receipts and salary documents as they land through the year; a WhatsApp forward covers the paper ones photographed on the spot.

  2. Agent

    Tag it to the right year and category. An Agent node identifies the document type and the financial year it belongs to, from the document itself, and files it. A document that could belong to either year is flagged rather than filed on a guess.

  3. Knowledge

    One folder that is actually one folder. A Knowledge node holds the year's pack, categorised — income, interest, rent, donations, insurance, investment statements — each with its source file.

  4. Sub-workflow

    Pre-filing assembly. A scheduled Sub-workflow runs before filing season: it walks the expected categories and produces the pack plus, crucially, the list of what is MISSING and who to request it from.

  5. Condition

    Missing is the useful output. A Condition node separates complete categories from incomplete ones — the incomplete list is the actual value, because it is knowable in February rather than discovered in April.

  6. Output

    Pack out, checklist out. An Output node delivers the categorised pack and the missing-documents checklist by Email, with reminders for the outstanding items on WhatsApp.

  7. Approval

    Nothing is filed for you. An Approval node makes it explicit: the pack goes to the person or their accountant. The workflow does not file a return, does not log into a tax portal, and does not compute a tax position.

Channels & connectors

  • Email
  • WhatsApp
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → tax portal, read-only where available)

Outcome

The filing pack assembles itself through the year, and the list of what is still missing is known months before the deadline instead of the night before it.

Why it helps

The mechanism is shifting the work from a single April search to a per-document moment of arrival, and making absence visible — the expensive part of tax admin is not organising what you have, it is discovering in April what you never downloaded.

Build spec

2 agents1 tagging agent (per document, year-round) + 1 assembly agent (once, pre-filing). The missing-category gate and the hand-off Approval are workflow nodes.

System prompt (paste-ready)

(Tagger) Identify ONE document belonging to the user. Return strict JSON {category (SALARY|INTEREST|RENT|DONATION|INSURANCE|INVESTMENT|CAPITAL_GAINS|OTHER), issuer, financial_year, period_from, period_to, amount, reference, needs_review}. Determine the financial year from dates printed on the document only — if the document spans or ambiguously straddles two years, set needs_review=true rather than choosing. Never compute, estimate or total anything; you are categorising and dating, not calculating. Do NOT extract, store or echo any bank account number, card number, password, OTP or government identity number — mask them. Give no opinion on deductions, exemptions, regimes or tax position: that is the user's or their accountant's judgement, not yours.

Agent roles & model tiers

  • Document tagger (per document, all year) Economy tier — one short structured pass per document, spread across the year; with a fallback model so a certificate that arrives once annually is never lost to a transient failure

    Categorise and date one document into schema-valid JSON from printed dates only. Ambiguous year → needs_review. No totals, no tax opinions, sensitive numbers masked.
  • Pack assembler (once, pre-filing) Standard tier — a single call that reasons over the whole year's collection

    Assemble the year's categorised pack index and, for each expected category, state whether it is present, partial or missing, naming the issuer to request the missing document from. List only what is actually in the collection — never assume a document exists, never fill a gap with an estimate, and produce no tax computation, no deduction advice and no filing recommendation.

MCP connectors

  • Tax-filing portal — no first-party connector; read-only reference via a Tool (MCP) node at most, and never written to or logged into by the workflow
  • Banks, insurers and employers — documents arrive by Email or WhatsApp forward; portals are not scraped
  • Email / WhatsApp — pack delivery and missing-document reminders

Built-in tools

  • knowledge_search (the year's filed documents, by category)
  • send_email (deliver the pack and checklist to the person or, on approval, their accountant)
  • user-defined tool `pack_ready` (SpEL): input.presentCategories >= input.expectedCategories ? 'COMPLETE' : (input.daysToDeadline <= 30 ? 'CHASE_NOW' : 'GATHERING') — a tenant-authored SpEL expression over the tool's JSON input, sandboxed by construction (no method calls, no constructors, no bean/type references, no loop in the grammar): a formula tool, not a scripting engine. The benefit is that the person defines which categories they personally expect — a salaried filer's list is not a freelancer's — and how close to the deadline counts as chase-time, once, and the pack is assessed against their own definition every year without a developer.

Guardrails

  • NOT FINANCIAL OR TAX ADVICE, plainly: the agent organises, reminds, summarises and compares the user's OWN documents. It does not compute a tax position, does not advise on deductions, exemptions or regimes, and does not recommend financial products — the pack goes to the person or their accountant, who decide
  • SECURITY: no bank account, card, password, OTP or government ID number is stored, echoed or typed; the workflow never logs into a tax portal and never submits a return or any other financial form
  • Nothing is totalled or estimated by the agent — it categorises and dates printed documents; a straddling or ambiguous financial year is flagged for review rather than assigned
  • The missing-documents list names only genuinely absent categories against the user's own expected set — a gap is never filled with an assumed or reconstructed document
  • Hand-off to an accountant passes the Approval node, because sending a year of personal financial documents to a third party is the person's decision to make explicitly

Cost strategy

Tagging is one economy-tier call per document amortised across a whole year — negligible per event, and worth a hard cap plus a fallback model because these documents often arrive exactly once. The assembly pass is a single standard-tier call per year. The completeness check itself is deterministic `pack_ready` SpEL, so the pack's status can be recomputed daily in the run-up to the deadline for nothing.

Output & delivery

Each document is tagged and filed into the year's Knowledge pack as it arrives → the pre-filing Sub-workflow assembles the categorised index and runs `pack_ready` → the Condition node surfaces the missing categories → an Output node emails the pack plus the chase-list and sends WhatsApp reminders for outstanding items → the Approval node governs any hand-off to an accountant.

3. The subscriptions nobody cancelled

Somewhere between four and nine small recurring charges leave the account every month. Some are used daily, some are a trial from two years ago that converted, and at least one is a duplicate of something the household already pays for. Nobody has ever sat down with a statement and read every line, because that is a genuinely tedious hour.

Trigger: Email (card/bank statement) / WhatsApp (forward the statement PDF) + monthly sweep

How the workflow runs

  1. Trigger

    The statement arrives. An emailed statement, or a PDF forwarded on WhatsApp. Bank and card portals have no first-party connector — the statement is a document the person supplies, or is fetched read-only by a Tool (MCP) node they explicitly connected.

  2. Loop

    Read every line, once. A Loop node walks the statement lines so the tedious part — actually reading all of them — is done completely rather than skimmed.

  3. Agent

    Identify the recurring ones. An Agent node groups lines into recurring charges by merchant and cadence, and matches them against the person's own filed receipts and confirmation emails in Knowledge to name what each one actually is.

  4. Condition

    Known, unknown, or duplicated?. A Condition node splits the result three ways: recognised and expected; recognised but overlapping with another subscription the household already has; and unrecognised — the third group is the one that matters and it is presented as a question, never as an accusation.

  5. Output

    One plain list. An Output node sends a plain monthly list on WhatsApp or Email: what recurs, how much, how long it has been running, and which ones the person may want to look at.

  6. Approval

    Cancelling is yours to do. An Approval node holds any cancellation draft. The agent can draft the cancellation email; the person sends it, and cancels through the provider themselves. The workflow never submits a form on a provider's site and never touches payment credentials.

Channels & connectors

  • Email
  • WhatsApp
  • Knowledge base
  • Approval / HITL
  • Tool (MCP → card/bank statement source)

Outcome

Every recurring charge on the statement is named, dated and grouped once a month, with duplicates and unrecognised ones surfaced as questions the person can answer in two minutes.

Why it helps

The mechanism is completeness where a human skims: the tedium of reading every statement line is precisely what makes forgotten subscriptions survive, and the agent's only real advantage here is that it does not get bored on line forty. It reports what the person's own documents say; it does not recommend what to keep.

Build spec

1 agent1 statement-analysis agent, run per statement with a Loop over the lines. The three-way branch and the cancellation Approval are workflow nodes.

System prompt (paste-ready)

Analyse the user's OWN statement lines. Group them into recurring charges: return strict JSON {merchant, cadence (MONTHLY|QUARTERLY|ANNUAL|IRREGULAR), amount, currency, first_seen, last_seen, occurrences, matched_receipt (from Knowledge or null), status (RECOGNISED|OVERLAPPING|UNRECOGNISED)}. Use ONLY what is printed on the statement and what is in the user's own filed receipts — never guess what an unfamiliar merchant descriptor is, mark it UNRECOGNISED and let the user say. Never state or imply that a charge is fraudulent, wasteful or should be cancelled; present unrecognised and overlapping charges as questions for the user. Do NOT extract, store or echo any card number, bank account number, CVV, password or OTP — mask them. Give no advice about which services to keep, switch to or buy.

Agent roles & model tiers

  • Statement analyser (per statement) Economy tier — line-level grouping over a bounded document, once a month; a fallback model keeps a month from being skipped entirely on a transient failure

    Group the user's own statement lines into recurring charges with schema-valid JSON. UNRECOGNISED for anything not matched to a filed receipt. No judgements, no advice, sensitive numbers masked.

MCP connectors

  • Card / bank statement — no first-party connector; supplied by the user as a document, or fetched read-only through a Tool (MCP) node they explicitly connected
  • Subscription providers — not integrated; cancellation is done by the person on the provider's own site
  • WhatsApp / Email — the monthly list and the cancellation drafts

Built-in tools

  • knowledge_search (the person's own receipts, confirmation emails and prior statements)
  • send_email (cancellation drafts — released only by the Approval node)
  • user-defined tool `sub_flag` (SpEL): input.matchedReceipt == false ? 'ASK_USER' : (input.overlapsExisting == true ? 'REVIEW' : 'KNOWN') — a tenant-authored SpEL expression over the tool's JSON input, sandboxed by construction: no method calls, no constructors, no bean or type references, no loop in the grammar. A formula tool, not a scripting engine. The benefit is that the triage rule is the person's own and it is deterministic — the same merchant is banded the same way every month, so the monthly list is comparable month to month instead of re-litigated by a model each time.

Guardrails

  • NOT FINANCIAL ADVICE, plainly: the agent organises, reminds, summarises and compares the user's OWN statements and receipts. It never recommends which services to keep, cancel, switch to or buy, and it gives no personalised investment or product advice
  • SECURITY: card numbers, account numbers, CVVs, passwords and OTPs are masked and never stored, echoed or typed; the workflow never logs into a provider or a bank and never auto-submits a cancellation or payment form
  • An unfamiliar merchant descriptor is reported as UNRECOGNISED, not guessed and not labelled fraudulent — the person identifies it
  • Cancellation emails are drafts held at the Approval node; the person sends them and cancels with the provider themselves
  • Analysis is idempotent per statement, so re-forwarding a month can't double-count a subscription's occurrence history

Cost strategy

One economy-tier pass per statement per month, hard-capped — this is a low-volume, high-tedium job, which is exactly the profile where a cheap model earns its place. The three-way triage runs on deterministic `sub_flag` SpEL rather than a second model call, so month-over-month comparability costs nothing.

Output & delivery

The Loop walks every statement line → the agent groups them into named recurring charges matched against the person's own receipts → `sub_flag` bands each one deterministically → an Output node sends one plain monthly list on WhatsApp or Email → any cancellation draft waits at the Approval node for the person to send and action themselves.

4. A parent's paperwork, explained out loud in their own language

A pension letter, a hospital bill and an insurance renewal notice arrive at a parent's house. They are in English, in small print, and the person who can read them lives four hundred kilometres away and finds out about them on a Sunday call, usually after the date on the letter has passed.

Trigger: WhatsApp (photo of the letter) / Voice ("what does this letter say?")

How the workflow runs

  1. Trigger

    A photo of the letter. The parent photographs the letter and sends it on WhatsApp, or calls in on Voice and asks. No app to learn, no portal to log into.

  2. Agent

    Read it, say what it says. An Agent node extracts what the letter actually states — who sent it, what it is about, any amount, any date, and what if anything is being asked for. It summarises; it does not interpret or recommend.

  3. Voice

    Answered in their language. A Voice node with Sarvam replies in the parent's own language — Hindi, Kannada, Tamil, Bengali — read aloud, at length if needed; ElevenLabs handles the spoken delivery. The point is that the explanation reaches them without a translator on a Sunday.

  4. Condition

    Does it need someone to act?. A Condition node separates letters that are informational from letters with a date and an action — only the second kind escalates.

  5. Output

    The family member is looped in. An Output node forwards the summary, the deadline and the photograph to the adult child on WhatsApp or Email — on the day the letter arrives, not on the Sunday call.

  6. Approval

    No one's money moves automatically. An Approval node governs anything with a payment. A Razorpay UPI link is generated for a family member to complete deliberately. The agent never asks for, stores or repeats a card number, a bank password, an OTP or a government ID number — and it says so if a caller offers one.

Channels & connectors

  • WhatsApp
  • Voice / Call
  • Sarvam
  • ElevenLabs
  • Email
  • Approval / HITL
  • Razorpay (UPI)

Outcome

A letter is understood on the day it arrives, in the language the person actually thinks in, and the family member who needs to act knows about the deadline while there is still time to act on it.

Why it helps

The mechanism is closing the gap between a letter arriving and a family member learning about it — that gap, not the letter's difficulty, is what turns a routine renewal into a lapsed one. Summarising a document is not advising on it, and the agent holds that line explicitly.

Build spec

1 agent1 reader/explainer agent handling both the extraction and the spoken reply. Voice, the action branch, the family notification and the payment Approval are workflow nodes.

System prompt (paste-ready)

You are helping an elderly person understand ONE letter or bill they have received, speaking in their own language. Say what the document actually states: who sent it, what it concerns, the amount if any, the date if any, and what is being asked for. Use plain, unhurried language and offer to repeat. Read ONLY what is printed — if something is unclear or missing, say so rather than filling it in. NEVER give financial, insurance, medical, legal or tax advice, never suggest buying, switching, claiming or cancelling anything, and never say whether a charge is fair. NEVER ask for — and never repeat back, store or type — a card number, bank account number, password, OTP or government identity number; if the person starts to read one out, stop them and explain that it is not needed and should not be shared. You do not pay anything and you do not fill in any form: a family member reviews and completes anything that involves money.

Agent roles & model tiers

  • Reader / explainer (per document) Standard tier — the spoken turns need to be responsive, and the extraction is short; keep a fallback model configured, because the person on the other end is on the phone and a failed call has a real cost

    Extract and explain one letter in plain language in the person's own tongue. Printed facts only. No advice of any kind. Never solicit or repeat card numbers, passwords, OTPs or ID numbers; stop the caller if they begin to.

MCP connectors

  • Sarvam — Indian-language understanding and reply
  • ElevenLabs — spoken delivery on the Voice channel
  • Razorpay (UPI) — payment link only, generated after Approval and completed by a family member
  • Insurer / hospital / pension portals — no first-party connector and deliberately not integrated; the letter itself is the input

Built-in tools

  • knowledge_search (the family's own filed policies and prior letters, so a renewal can be matched to the policy it belongs to)
  • send_email (forward the summary and the photograph to the family member)

Guardrails

  • NOT FINANCIAL ADVICE, plainly and out loud: the agent organises, reminds, summarises and compares the family's OWN documents. It gives no personalised investment advice, recommends no financial product, and offers no opinion on whether to renew, claim, switch or pay
  • SECURITY, spoken as well as stored: the agent never asks for, repeats, stores or types a card number, bank account number, password, OTP or government ID number, and it actively interrupts and warns if the caller starts to read one out — elderly callers are a targeted group and this is the guardrail that matters most here
  • No financial form is auto-submitted and no payment is automatic: an Approval node holds anything involving money, a Razorpay UPI link is generated, and a named family member completes it deliberately
  • The summary states only what is printed on the document; anything unclear is reported as unclear rather than inferred, because a confidently wrong deadline is the specific harm this recipe exists to prevent
  • The family notification carries the original photograph alongside the summary, so the person acting can always check the source document themselves

Cost strategy

One standard-tier agent per letter, with the Voice channel's minutes — not tokens — being the meaningful cost; cap the call length rather than downgrading the model, since comprehension for an elderly caller is the entire product. Sarvam handles the language layer, so no premium-tier model is needed to reach a non-English speaker, which is what makes running this for a parent affordable at all.

Output & delivery

The photographed letter is read into printed facts → a Voice node replies in the parent's own language through Sarvam and ElevenLabs, repeating on request → the Condition node escalates only letters with a date and an action → an Output node forwards the summary, deadline and photograph to the family member the same day → anything involving money waits at the Approval node and is completed by a person through a Razorpay UPI link.

Related industries

Build one of these in minutes

The sandbox gives you a live agent workspace — no account, no card. Or head back to the full catalogue and compare patterns across every industry.

See how VegaDūta compares to n8n, Dify and BotpressWhy VegaDūta's architectureEstimate your WhatsApp API costs