Business budget calculator
Planned income of 60,000 from product sales and retainers, against 31,650.5 of rent, payroll, supplies and marketing, leaves a net balance of 28,349.5 for the period. List each income and expense line by category to see your plan's three totals. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
A business budget is the planned cash story of a period: every named income line you expect to collect, every named expense line you expect to spend, and the net that remains when the two totals meet. Owners, bookkeepers, and operators still rebuild that sum in a spreadsheet cell that drifts when a category is added and someone forgets to extend the range.
How planned income, expenses, and net balance are formed
A planned business budget is a list of named income lines and a list of named expense lines in a single currency, not a single lump figure typed into one cell. Each income row carries a category such as product sales, retainers, licensing, or interest, together with a planned amount for the period. Each expense row does the same for rent, payroll, supplies, marketing, insurance, and the rest of the operating plan.
A strictly positive net is a surplus for the window you are planning; a strictly negative net is a deficit; a net of zero is a balanced plan and is reported as such. Category names are labels for humans and for the echoed line arrays in the response; they never change the arithmetic, so two rows both named Sales are simply two addends. Amounts may be fractional because quotes and invoices rarely land on whole units.
Zero is a valid planned amount for a placeholder category you want visible on the sheet without contributing cash this month. The identity matches a simple profit-and-loss draft: collect, spend, remainder. The calculator does not apply tax, depreciation, accrual timing, or currency conversion; those layers belong in a later step once the planned totals are known.
Where a business budget calculator earns its keep
People who type business budget into a search box already know they are totalling a plan, not computing tax brackets, not splitting a household bill, and not pricing a trip. They want planned inflows minus planned outflows from named categories, without rebuilding the same SUM range in a spreadsheet that drifts when a row is inserted. Independent shops draft a monthly plan from sales, retainers, rent, and payroll and need three headline numbers they can paste into a review.
Classroom bookkeeping courses that teach a simple profit-and-loss identity need an oracle that rejects a non-finite amount instead of silently emitting a total a grader might treat as success. Failed validation does not consume balance. Pair this capability with a separate tax or cash-flow tool when you need those layers; keep this surface focused on the planned income, planned expenses, and net balance that people mean when they search that phrase.
What you can do with it
Monthly owner and shop plans
Total named sales, retainers, rent, payroll, and supplies for the month and read surplus or deficit before the period starts.
Classroom profit-and-loss drills
Check a simple planned P&L identity with an oracle that rejects non-finite amounts instead of silently skipping a poisoned row.
FAQ
How does the business budget calculator get net balance?
Send two lists of {category, amount} rows: income and expenses.
What happens if an amount is not a finite number?
NaN, Infinity, and non-numeric text are rejected so a poisoned amount cannot silently change the totals. Invalid input is not billed.
Can income or expense lists be empty?
No. Each list needs at least one planned line with a non-empty category name and a finite amount. Use a zero amount if a category should appear without contributing cash this period.
What does the expense percentage in a business budget tell me?
It shows how much of your planned income the planned expenses use up. In the example, 31,650.5 of expenses against 60,000 of income is 52.75%, so a little over half of every unit collected is already committed.
Can two budget lines have the same category name?
Yes. Category names are labels for you and your reviewers, not part of the arithmetic, so two rows both called Sales are simply added together. Use them to keep the plan readable.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/fin/business-budget \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"income":[{"category":"Product sales","amount":48000},{"category":"Service retainers","amount":12000}],"expenses":[{"category":"Rent","amount":3600},{"category":"Payroll","amount":22000},{"category":"Supplies","amount":1850.5},{"category":"Marketing","amount":4200}]}'const res = await fetch("https://api.kit.forhosting.com/fin/business-budget", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"income": [
{
"category": "Product sales",
"amount": 48000
},
{
"category": "Service retainers",
"amount": 12000
}
],
"expenses": [
{
"category": "Rent",
"amount": 3600
},
{
"category": "Payroll",
"amount": 22000
},
{
"category": "Supplies",
"amount": 1850.5
},
{
"category": "Marketing",
"amount": 4200
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/business-budget",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"income": [
{
"category": "Product sales",
"amount": 48000
},
{
"category": "Service retainers",
"amount": 12000
}
],
"expenses": [
{
"category": "Rent",
"amount": 3600
},
{
"category": "Payroll",
"amount": 22000
},
{
"category": "Supplies",
"amount": 1850.5
},
{
"category": "Marketing",
"amount": 4200
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/business-budget", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"income":[{"category":"Product sales","amount":48000},{"category":"Service retainers","amount":12000}],"expenses":[{"category":"Rent","amount":3600},{"category":"Payroll","amount":22000},{"category":"Supplies","amount":1850.5},{"category":"Marketing","amount":4200}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"income":[{"category":"Product sales","amount":48000},{"category":"Service retainers","amount":12000}],"expenses":[{"category":"Rent","amount":3600},{"category":"Payroll","amount":22000},{"category":"Supplies","amount":1850.5},{"category":"Marketing","amount":4200}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/business-budget", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"income": [
{
"category": "Product sales",
"amount": 48000
},
{
"category": "Service retainers",
"amount": 12000
}
],
"expenses": [
{
"category": "Rent",
"amount": 3600
},
{
"category": "Payroll",
"amount": 22000
},
{
"category": "Supplies",
"amount": 1850.5
},
{
"category": "Marketing",
"amount": 4200
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.business_budget",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_items | 500 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
This business budget calculator accepts two lists of category names and amounts, totals planned income, totals planned expenses, and returns net_balance as total_income minus total_expenses. Each amount must be a finite number; Infinity, NaN, and non-numeric text fail with invalid_input instead of poisoning the sum. Successful calls are billed at $0.002; invalid input is not charged.
How planned income, expenses, and net balance are formed
This calculator walks the income list, adds every finite amount into total_income, walks the expense list, adds every finite amount into total_expenses, and subtracts to produce net_balance: net_balance equals total_income minus total_expenses. Rounding each line to two decimal places before summing keeps the displayed rows and the three headline totals consistent in ordinary currency, so a dashboard can bind total_income, total_expenses, and net_balance without a second rounding pass.
Input contract, response shape, and error behaviour
On each row, category also accepts name or label, and amount also accepts value. Up to five hundred rows are accepted on each list on this free parse path. Prefer bare numbers over formatted strings; currency marks and thousands separators are not parsed. POST a JSON body with two required arrays of records, both in the same currency and the same planning window. The field income is a non-empty list of objects, each with a non-empty category string and a finite amount number; aliases revenues, income_items, and income_lines are accepted so an export does not need a rename step. The field expenses is the matching list for outflows; aliases costs, expense_items, and expense_lines are accepted. Missing fields, empty lists, non-object rows, blank category names, non-finite amounts, Infinity, NaN, and non-numeric text all fail with invalid_input naming the field and are not billed. That finite-number rule is the product contract: a poisoned amount must not silently become zero or skip the row. On success the body reports income_count, expense_count, and line_count, returns total_income, total_expenses, and net_balance rounded to two decimal places, sets balance_status to surplus, deficit, or balanced, and echoes the cleaned income and expenses arrays with index, category, and amount. When total_income is not zero, expense_to_income_ratio and expense_percent are included so a dashboard can chart spend against inflow without a second division; those keys are omitted when income is zero rather than returned as null. A formula string restates net_balance equals total_income minus total_expenses. Example: product sales of forty-eight thousand plus retainers of twelve thousand against rent three thousand six hundred, payroll twenty-two thousand, supplies one thousand eight hundred fifty and fifty cents, and marketing four thousand two hundred yields total_income of sixty thousand, total_expenses of thirty-one thousand six hundred fifty and fifty cents, and a surplus net_balance of twenty-eight thousand three hundred forty-nine and fifty cents. Successful API calls use the published base price $0.002 per item.
Where a business budget calculator earns its keep
Agencies roll category lists out of a billing export and need a deterministic net a finance script will later call over the API. Keep requests small, pin total_income, total_expenses, and net_balance in tests, and you get a reproducible planned surplus or deficit for owner reviews, board packets, and lightweight practice-management notebooks without standing up a full accounting system.
Integration use cases
Agency and studio reviews
Roll category lists from a billing export into a deterministic net_balance a finance script can call again later without a spreadsheet range.
Technical questions
Does this produce a full profit-and-loss statement?
No. It totals planned income and expense line items and returns net_balance. It does not apply tax, depreciation, accruals, or currency conversion.
What does the business budget calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.