Affordable bundle check calculator
5 units at 12 plus 3 at 20 cost exactly 120, so with an income of 120 the bundle sits right on the budget line. Enter income, prices and quantities for two goods to see whether a choice fits and what is left or missing. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Income
- 120
- Price good 1
- 12
- Quantity good 1
- 5
- Price good 2
- 20
- Quantity good 2
- 3
- Status
- on_budget
- Total spending
- 120
- Remaining income
- 0
- Spending good 1
- 60
The affordable bundle check calculator compares a consumer's chosen quantities of two goods with income and the price of each good. It calculates the bundle's total expenditure, identifies whether the choice lies inside, on, or beyond the budget line, and shows the money left or the shortfall. It also reports spending by good, the percentage of income used, and both budget-line intercepts, making the result useful for economics exercises, planning examples, and quick checks of purchasing choices.
Enter one budget and one consistent set of prices
Start with the consumer's income or spending budget, then enter the unit price and chosen quantity for each of the two goods. Every monetary input must use the same currency and time basis. For example, do not combine monthly income with weekly spending unless you first convert them to a common period.
Quantities may be whole numbers, such as four cinema tickets, or decimals, such as 2.5 kilograms of food. Prices must be greater than zero, while income and quantities may be zero. The calculator treats the entries as a simple two-good budget model: it multiplies each quantity by its price and adds those two expenditures.
No taxes, discounts, borrowing, savings interest, or quantity restrictions are added automatically. If any of those belong in your problem, include them in the effective prices or adjust the available income before running the check. Clear, consistent inputs make the classification directly comparable with the budget-line equation taught in introductory microeconomics.
Read inside, on, and beyond the budget line
The central calculation is total spending: the price of good one times its quantity, plus the price of good two times its quantity. When total spending is below income, the status is affordable; geometrically, the selected point lies inside the feasible budget set. When spending equals income, the status is on budget, meaning the point lies on the budget line and uses all available income.
When spending exceeds income, the status is beyond budget, so the selected point is outside the feasible set at the stated prices and income. The remaining-income result is positive for an affordable bundle, zero on the line, and negative for an over-budget bundle; a negative value therefore expresses the shortfall. The calculator uses a very small scale-aware tolerance when comparing decimal arithmetic.
This prevents values such as tenths, which computers cannot always represent exactly, from turning a mathematically exact equality into an accidental over-budget or under-budget classification.
Use the supporting results to interpret alternatives
Beyond the classification, the result separates spending on each good so you can see which component contributes more to the bundle's cost. The budget-share percentage shows how much of income the bundle consumes. If income is zero and the selected bundle costs more than zero, that percentage is undefined and is reported as null; the beyond-budget status and negative remaining income still give the useful conclusion.
The two maximum-quantity results are the intercepts of the budget line. They answer how much of each good could be purchased if the consumer spent the entire budget on that good and bought none of the other. These intercepts help when sketching the line, comparing price changes, or checking classroom work.
Remember that affordability is not the same as preference or optimality. This calculator verifies feasibility only. It does not know the consumer's utility, tastes, minimum needs, or whether a different affordable bundle would deliver greater satisfaction, so those questions require additional economic analysis.
What you can do with it
Check a microeconomics exercise
Verify whether a proposed coordinate lies inside, exactly on, or outside a two-good budget line.
Explain a spending shortfall
Show total cost and negative remaining income when a selected combination exceeds the available budget.
Compare budget-line intercepts
Calculate the maximum amount of either good when all income is allocated to that good alone.
FAQ
Can quantities include decimals?
Yes. Any finite quantity of zero or greater is accepted, so divisible goods can use decimal quantities.
Why must both prices be positive?
A zero or negative price does not define the standard finite intercept used by this two-good budget-line model.
Does affordable mean the bundle is the best choice?
No. Affordable describes feasibility only; choosing an optimal bundle also requires information about preferences or utility.
What does it mean when a bundle is on budget?
It means spending equals income exactly. For example, 5 units at 12 plus 3 units at 20 cost 120, so with an income of 120 nothing is left and the bundle sits on the budget line.
How much of one good could I buy if I skipped the other?
Divide income by that good's price. With an income of 120, that is 10 units of a good priced at 12 or 6 units of a good priced at 20, the two ends of the budget line.
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/econ/affordable-bundle-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"income":100,"price_good_1":10,"quantity_good_1":4,"price_good_2":15,"quantity_good_2":4}'const res = await fetch("https://api.kit.forhosting.com/econ/affordable-bundle-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"income": 100,
"price_good_1": 10,
"quantity_good_1": 4,
"price_good_2": 15,
"quantity_good_2": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/econ/affordable-bundle-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"income": 100,
"price_good_1": 10,
"quantity_good_1": 4,
"price_good_2": 15,
"quantity_good_2": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/econ/affordable-bundle-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"income":100,"price_good_1":10,"quantity_good_1":4,"price_good_2":15,"quantity_good_2":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"income":100,"price_good_1":10,"quantity_good_1":4,"price_good_2":15,"quantity_good_2":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/econ/affordable-bundle-check", 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": 100,
"price_good_1": 10,
"quantity_good_1": 4,
"price_good_2": 15,
"quantity_good_2": 4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "econ.affordable_bundle_check",
"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.
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 questions
What does the calculator cost to use?
It runs free in your browser. API requests cost $0.002 each.
What equation does it use?
It compares income with price_good_1 × quantity_good_1 + price_good_2 × quantity_good_2.
What does on_budget mean?
It means the bundle's total spending equals the available income within a tiny floating-point tolerance.