Inspiration
Small teams drown in invoice reconciliation, boring, error-prone bookkeeping that eats hours a human could spend on real work. Most "AI agents" are just chatbots with recall: they can talk about your invoices but never actually reconcile them. We wanted an agent that does the task end-to-end, stops to ask before touching money, and can prove every decision it made.
What it does
Grand Micromanager is an autonomous invoice-reconciliation worker, not a chatbot. Every Monday it wakes on a cron, pulls PDF invoices from Gmail, reads them with Gemini, cross-checks every line item against your bank statement, categorizes against your chart of accounts, and resolves or escalates discrepancies. It catches duplicate charges, wrong amounts, wrong vendors, and date anomalies, recovering real dollars. It sends a digest, but the one thing it never does alone is touch money: disputes pause for your explicit approval. And because it keeps a full audit trail, you can ask it "what did you flag this week?" and get a grounded answer.
How we built it
Google ADK (Python) with a supervisor + 7 specialist agents (intake, extraction, verification, resolution, categorization, reconciliation, reporting) on Cloud Run. Gemini 3.5 Flash on Vertex AI does multimodal extraction at temperature 0.0 with native structured-output enforcement. Verification uses Chain-of-Verification to independently cross-check the bank CSV. Firestore is the shared memory + audit trail. Cloud Scheduler → Pub/Sub → Cloud Run is the trigger spine, with a dead-letter queue, idempotency, checkpointing, retry/backoff/circuit-breaker, and a two-tier human-in-the-loop gate. Secrets live in Secret Manager; PII is redacted before it reaches the model.
Challenges we ran into
Gemini 3.5 wasn't on the regional Vertex endpoint. It 404'd on 9 regions before we found the global endpoint. ADK 2.7 is early-stage: callbacks are invoked by keyword, so a wrong parameter name crashes silently in production. We caught it by reading the framework source. Making "resolved" trustworthy meant forcing independent re-verification, because the agent would otherwise rubber-stamp its own draft. And a planted $1M decoy line forced our null-not-guess schema design.
Accomplishments that we're proud of
The $2,400 duplicate-payment catch: the agent found two identical charges for one invoice, disputed it, and recovered the money only after the human clicked "approve." A closed loop that re-verifies before resolving. It escalated a vendor-typo fix rather than self-certify. 100% extraction accuracy, 5/5 injected discrepancies caught, zero hallucinated entities, zero false positives.
What we learned
"Agentic" isn't a chatbot with memory, it's a worker with a verification loop. Deterministic invariants belong in code, not prompts, when money is involved. temp=0.0 is near-deterministic, not guaranteed. Reading the framework source beats trusting the docs. And honesty in an eval beats a forced 5/5: we documented the one miss instead of fudging it.
What's next for Grand Micromanager
A2A federation to reconcile across org boundaries, a 50-invoice scale eval, native MCP exposure, and a self-serve portal for approving disputes from Slack or mobile. The goal: graduate from weekly invoices to a full multi-ledger close.


Log in or sign up for Devpost to join the conversation.