Skip to main content
← All posts

Your 2027 Budget Is Already in Slack: Plan From This Year's Purchase Requests

November 5, 2026 · BuyFlow Team

It's November, which for a lot of startups and SMBs means next year's budget is due. Finance sends department heads a spreadsheet, and department heads guess. Software "about the same as this year." Contractors "maybe a bit more." Events "TBD."

You don't have to guess. If your team has been asking for purchases in Slack all year, you already have the best planning input you'll get: a record of what each team asked for, what got approved, what got rejected, and when. This post is about turning that record into a 2027 budget that holds up, and then wiring the budget back into the approval so next year's requests are checked against it.

What finance is about to ask department heads for

Budget templates for growing companies look roughly the same. Fiscallion's guide to SaaS department budget templates describes four sections: headcount, operating expenses by category (software and tools, travel, marketing and events, professional services, contractors, training), capex above a set threshold, and revenue for teams that own it. It also says finance should pre-populate prior-year actuals and current run-rate, and require an assumptions column so "every material number has a stated reason behind it" (Fiscallion).

Two parts of that are hard to fill from the books alone:

  • Run-rate. Your accounting system shows what was billed and paid. It doesn't show the annual contract approved in October that won't invoice until January, or the tool that was approved but never bought.
  • Assumptions. The ledger tells you a number. It doesn't tell you why the spend happened, who asked, or whether it'll come back.

Your approval history covers both.

Step 1: Pull this year's requests, not just this year's bills

Export the year's purchase requests by team. For each one you want: requester, team or cost center, vendor, amount, category, approved or rejected, one-off or recurring, and the "why" the requester wrote.

Then sort them into four piles:

  1. Recurring and approved. Subscriptions, retainers, renewals. These carry into 2027 unless someone decides to cut them. List them by vendor with the renewal month.
  2. One-off and approved. The offsite, the laptop refresh, the one-time consulting project. Don't copy these into next year by default. Ask the owner whether each one happens again.
  3. Rejected or deferred. This is the pile people forget. A request that was turned down "until next quarter" or "after we close the round" is a demand signal. If it's coming back in 2027, it belongs in the budget, not as a surprise in March.
  4. Approved but not yet billed. Committed spend that hasn't hit the books. If it lands in 2027, it's part of 2027's number.

That gives each department head a starting list that's specific to their team, which is better than a blank grid with last year's totals.

Step 2: Make each budget line match how requests are coded

A budget you can't compare against is just a forecast. The comparison only works if budget lines and approvals use the same buckets.

Inflection CFO's guide to Series A finance ops says to start with a clean cost center structure: one budget owner per department who "has authority and responsibility," and cost center codes that map to the chart of accounts (Inflection CFO). Fiscallion says to lock the chart of accounts and cost-center list before anything goes out to department heads, because changing structure mid-collection forces everyone to redo their work (Fiscallion).

Concretely, that means the fields on your Slack request form (team, category, GL account) should be the same list your budget uses. If the request form says "Tools" and the budget says "Software subscriptions" and the GL says "6140 Dues & Subscriptions," someone is translating by hand every month.

Step 3: Load the budget where actuals live

Both QuickBooks Online and Xero can hold a budget split by the same dimensions you code purchases to.

QuickBooks Online. Budgeting is available on Plus and Advanced. You create a profit and loss budget for the fiscal year and can choose a subdivided budget by class or location. You can also import a budget from an Excel template (QuickBooks help: create budgets). Intuit's class budgeting guide suggests running Profit and Loss by Class for last fiscal year first, and notes you can pre-fill a new budget with last year's actuals before running Budgets vs. Actuals per class (QuickBooks help: budget targets by class).

Xero. Budget Manager holds one Overall Budget plus additional budgets, and an additional budget can be tied to a tracking option such as a department. One catch worth knowing before you build: those department budgets don't add up into the Overall Budget, so the overall still needs its own figures (ReportPost guide to Xero Budget Manager). The Budget Variance report then compares actuals with a chosen budget, filtered by tracking category (Ataski guide to Xero budget vs actual). In an October 15, 2026 reply on Xero's product ideas forum, a Xero admin said you can also compare several tracking categories to budget in one Profit and Loss report by adding Budget and Tracking columns (Xero Product Ideas).

Whichever you use, the department and category on each approved request should land in the class, location, or tracking category the budget uses. If that coding happens at request time in Slack, budget vs. actuals works without a cleanup pass. (We wrote about this in Code the Purchase in Slack.)

Step 4: Show the budget on the request, not only in a report

Budget-vs-actual reports are monthly. Approvals happen every day. The useful moment to know "how much does Marketing have left this quarter?" is when someone in Marketing asks to spend.

The spend tools have noticed. Ramp's Budgets page says it shows "context at every approval" and alerts when spend goes off-track across cards, bills, and POs (Ramp Budgets). Procurer describes a budget as four numbers (budget, committed, spent, remaining) and shows the remaining balance on every request before approval (Procurer). Brex's October 2026 early-access release added monthly pacing on purchasing cards and alerts when a card nears its limit (Brex product announcements).

You don't need a card platform to do the same thing in an approval-first setup. On each Slack request, the approver should see:

  • the team's budget for the period,
  • what's already approved but not yet billed (committed),
  • what's been booked (spent),
  • what's left after this request.

The committed number is the one spreadsheets miss, and it's the one an approval tool naturally has. (More on that in Don't Approve Blind.)

Step 5: Decide what happens when a request goes over

Write the rule down before January, so it isn't argued request by request. A simple version:

  • Within budget: normal approval chain.
  • Over budget but under a small tolerance: budget owner approves and writes one line on what gets cut or moved.
  • Over tolerance: goes to finance, with the "why now" answered on the request.

Inflection CFO recommends a 30-minute monthly review with each department head covering spend vs. budget, the top three to five categories, the rest-of-quarter forecast, and decisions needed (Inflection CFO). Over-budget approvals from the month are a good agenda for that meeting.

A one-week version

If budget season is already on you:

  1. Monday: export this year's Slack requests by team, including rejected ones.
  2. Tuesday: tag each as recurring, one-off, rejected or deferred, or approved-not-billed.
  3. Wednesday: send each department head their own list along with the budget template, and ask them to confirm or kill each recurring line and to say whether each deferred request is coming back.
  4. Thursday: lock categories and cost centers so they match the request form and your QuickBooks classes or Xero tracking categories.
  5. Friday: load the budget into QuickBooks or Xero, and turn on remaining-budget context in your approval flow.

Next November, the input will be even better, because every 2027 request will already be tagged to the line it was budgeted against.