All work
Google · MBA Intern · Summer 2026

Building an Agentic Budget System from 0 to 1

Solo-built an agentic budget observability system for Google's Health finance org - a dashboard, chatbot, and automated alerting layer that cut time-to-information by 45% and scaled beyond a single team.

AIAgentic SystemsFinOpsDashboard0-to-1
Summary

Google's Health Opex team was tracking approved budgets and open purchase orders across fragmented, accounting-first finance systems, leaving underutilized funds undetected until it was too late to reallocate them. I designed and built an agentic system spanning a live-synced database, an AI matching engine, a dashboard, and a chatbot to give budget owners real-time visibility - then architected it to scale beyond my own team and internship.

45% less time to find budget info
52% fewer steps to get an answer
2 additional Core orgs adopted it

Background

I joined Google's Health team as an MBA intern for the summer. The team's finance tooling was built for accounting needs, not for the business leaders who actually had to make budget decisions. That gap forced budget owners into manual, spreadsheet-driven tracking to answer basic questions like "how much of this program's budget is still available?"

I owned this end to end: problem framing, technical architecture, build, evaluation, and rollout, working across a database, an AI matching layer, a dashboard, a chatbot, and an automated notification system.

The Problem

Budget and purchase order data lived across siloed finance systems that required slow, manual lookups to reconcile. Budget owners couldn't easily see which programs were underspending against their allocation, which meant reclaimable funds went undetected until the annual fiscal deadline made them unrecoverable. The legacy manual matching process linked purchase orders to the right program automatically less than 5% of the time - everything else required someone to go dig.

The core tension: making AI-assisted matching fast and useful without ever letting an unverified match erode trust in the numbers people were reporting up to leadership.

Opex AI Dashboard overview: KPI cards for approved budget and spend, portfolio line-items table, action cards for PO confirmation, and the Budget Butler chatbot
Dashboard overview: budget KPIs, portfolio line-items, PO confirmation action cards, and the Budget Butler chatbot

What I Built

An agentic system with four layers: a synced database pulling live budget and PO data from finance sources, a hybrid AI/rules matching engine linking POs to programs, a dashboard surfacing spend and approval status, and a chatbot ("Budget Butler") for ad-hoc questions - backed by a scheduler that pushed weekly alerts and monthly recaps by email.

Designing for trust, not just automation

Early AI-matching accuracy sat around 65-78%, which was tempting to paper over with a fully autonomous system. I decided against it. Financial data is exactly the wrong place to let a non-deterministic system make silent decisions - one bad match would destroy confidence in the whole platform.

Instead I built a human-in-the-loop review layer: every AI match shipped with a confidence score, was visually flagged as unverified, and routed to the relevant owner for a one-click confirm or reject. I also added deliberate friction where it protected trust - for example, delaying "missing PO" alerts by 30 days so the system wasn't crying wolf on data that was simply still in transit.

Cutting cost and latency

Feeding raw, unparsed financial data - dozens of POs, line items, and invoice logs - directly into the Gemini API caused token bloat, slow responses, and degraded matching accuracy from context noise. I built a two-stage pipeline: deterministic, rule-based matching first (matching WBS codes directly), then invoking Gemini only on the remaining ambiguous cases, pre-filtered and chunked rather than dumped in whole.

That cut LLM token consumption by over 60%, took runtime from timing out after 6 minutes to completing in about 1, and pushed matching accuracy up to 65% by removing irrelevant context the model had been getting distracted by.

Building for a life beyond my internship

A tool an intern builds and then leaves behind is a tool that breaks the next time its assumptions change. Budget cycles reset annually, and my access would expire with my internship, so I decoupled every team-specific setting - model selection, data mappings, configuration - out of the code and into a Settings panel that non-technical finance managers could update themselves. That let the same architecture get adopted, unmodified, by two additional teams within Google's Core organization beyond the one I built it for.

Results

-45% time to find budget info
-52% steps to complete a task
+25% ease rating in user testing
65% automated PO-match accuracy, up from <5%

In moderated user testing, budget owners rated the system 25% easier to use than their prior manual workflow, with a 25% jump in successfully finding the information they needed and 16% more complete answers. Several team members started using it for real budget decisions before it officially launched. I also led the technical demos and training that got two additional Core teams to adopt the architecture for their own budgets.

Reflection

The instinct with agentic tools is to automate as much as possible. The harder and more useful discipline was figuring out exactly where to stop - where a confidence score and a human click mattered more than one more percentage point of automation. Financial data punishes overconfidence, and the human-in-the-loop layer was what let people actually trust the numbers enough to act on them.

The other lesson was about time horizons. It would have been easy to build something that worked well for my six weeks and broke the moment my access expired. Architecting for handoff from day one - configs a non-technical finance manager could maintain, a template other teams could copy - was what turned a summer project into something that outlasted the internship.