The other demos in this portfolio return their result in a webhook response. This one writes it back into a
real system of record: a new row in a Google Sheet triggers the workflow, Claude scores and explains the
variance, and the analysis lands in a Variance Report tab in the same spreadsheet — no
copy-pasting a JSON response anywhere.
The variance percentage and severity aren't left to the model to compute — a code node calculates them first from whatever Budgeted/Actual values are on the row. Claude never sees a blank slate; it explains, recommends, and drafts, but it doesn't do the arithmetic.
A row lands in the sheet, gets scored and explained, then fans out to two places at once: every row writes back into the Variance Report tab, and alert-tier rows also get tagged for a Slack/email push.
Budget Input tab and fires on every new row — Department, Category, Budgeted, Actual, Owner, Notes.Variance Report tab, matched on Department + Category.This is genuinely live: the rows below were typed straight into the connected Google Sheet, picked up by the Sheets Trigger polling that sheet, and written back into the Variance Report tab by the workflow — no pinned test data, no simulated I/O. The variance math is deterministic; the explanations, recommendations, and drafted messages are unscripted Claude output.
The same Claude call that explains the variance also drafts what happens next, toned to severity. Every row — alert, watch, or ok — gets a row in the Variance Report tab; only alert-tier rows also get tagged for a live Slack/email push, so the notification volume tracks what actually needs a person's attention.
| Department | Category | Variance % | Severity | Explanation |
|---|---|---|---|---|
| Marketing | Promotional Campaigns | +100% | alert | Doubled customer acquisitions scaled rewards/incentives spend proportionally. |
| Design | Contractor Design Work | +41.43% | alert | Freelancer brought in for a rebrand sprint, likely under-scoped at budget time. |
| Operations | Field Marketing Events | +30% | alert | Extra regional event added mid-period, per owner's notes. |
| IT | Software Licensing | +20% | alert | New-hire seat licenses plus an unplanned, unbudgeted security tool. |
| Legal | Outside Counsel Contracts | −10.56% | watch | Fewer contract reviews than planned — a demand-side underspend to keep an eye on. |
| Product | User Research Tools | −10% | watch | Mid-quarter vendor subscription cancellation; permanence unconfirmed. |
| Customer Success | Onboarding Events | +4% | ok | One extra virtual onboarding session — minor, well-explained overage. |
| Finance | Audit & Compliance | 0% | ok | Landed exactly on budget, as expected for fixed compliance costs. |
This is a live, authorized connection to a real Google Sheet — not a simulated credential. Here's what's actually configured, for anyone wiring up their own copy.
Budget Input (columns: Department, Category, Budgeted, Actual, Owner, Notes) and Variance Report, with a header row matching the workflow's write-back columns (Department, Category, Budgeted, Actual, Variance Amount, Variance %, Direction, Severity, Explanation, Recommended Action, Notify Draft, Updated At).Budget Input every minute for newly-added rows — it only catches rows added after it starts watching, not edits to existing rows, so a change to an existing row needs a fresh row (or a switch to an "any update" trigger event) to be picked up.Variance Report instead of duplicating it.Unlike the webhook-based demos in this portfolio, the write-back here is already the real system of record, and the trigger and credential are already live — there's no "going live" migration left for storage or auth. What's left is entirely about closing the loop on notifications.
A conditional-formatting rule or an IF formula can flag a variance percentage in seconds, and at a company with a lightly-used budget sheet, that's genuinely enough — this workflow isn't a replacement for a formula that already does the job.
Where this earns its place: a formula can color a cell red, but it can't read the Notes column and tell you why the number moved, it can't distinguish a one-time spend decision from a structural cost increase, and it can't draft the actual message to the owner in a tone matched to how serious the variance is. This build is the shape you reach for when the sheet you already use needs a layer of judgment and drafting on top — without migrating off it.