Current account balance calculator
A trade balance of 120, net income from abroad of −35 and net transfers of 15 give a current account surplus of 100. Enter the three signed flows to get the balance and whether the country is lending to or borrowing from the world. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Trade balance
- 120
- Net income from abroad
- -35
- Net current transfers
- 15
- Current account balance
- 100
- Position
- surplus
The current account is the headline external-balance aggregate in every principles-of-macroeconomics and open-economy course: it records how much a country is net lending to or borrowing from the rest of the world on goods, services, primary income, and current transfers. Students and analysts build it by adding the trade balance, net income from abroad, and net current transfers—three signed flows that can offset each other and flip the overall position even when the trade balance alone looks healthy. Hand arithmetic on large currency totals invites sign errors on income and transfers and confusion between the trade balance and the full current account. This current account balance calculator accepts three finite inputs, returns the signed current account balance with a surplus, deficit, or balanced label, and exposes a compact formula string so homework keys, LMS plugins, and notebook pipelines never disagree on the sum.
How the current account is built from three BoP components
In the balance-of-payments framework the current account summarizes transactions in goods, services, primary income, and secondary income between residents and non-residents over a period. The first building block is the trade balance, often called the goods-and-services balance: exports of goods and services minus imports. A positive trade balance means the economy sold more goods and services abroad than it bought; a negative figure is a trade deficit.
The second block is net income from abroad—the primary income balance—covering compensation of employees and investment income (interest, dividends, reinvested earnings) earned by residents from the rest of the world minus the same categories paid to non-residents. Economies that host large foreign-owned capital stocks often run negative net income even when they export a lot. The third block is net current transfers, also called the secondary income or unilateral transfers balance: remittances, foreign aid, gifts, and similar transfers with no quid pro quo, received minus paid.
Adding the three signed components yields the current account balance: CAB equals trade balance plus net income from abroad plus net current transfers. A positive CAB is a current-account surplus (net lending to the world on the current account); a negative CAB is a deficit (net borrowing); zero is a balanced position. This capability implements exactly that identity, rounds results for stable goldens, and returns a human-readable position label so study tools can branch on surplus versus deficit without re-deriving the sign.
Intermediate components are echoed so learners can check each term against a textbook table rather than only the final total.
Where a current account balance calculator earns its keep
Introductory open-economy macro courses assign current-account decomposition problems because students must separate the trade balance from income and transfers before they meet the twin-deficits and saving-investment identities. Tutoring platforms and LMS plugins need a deterministic oracle that rejects missing or non-finite inputs instead of silently treating blanks as zero and grading a wrong CAB as correct. Research assistants assembling small country panels from published BoP lines want a single reproducible sum without rebuilding the arithmetic in every spreadsheet cell.
Pair this surface with separate national-income or GDP tools when you need product-side aggregates; keep this capability focused on the current-account sum used in external-balance study.
What you can do with it
Homework and exam current-account decompositions
Students enter trade balance, net income from abroad, and net current transfers and verify the signed CAB and surplus or deficit label against textbook BoP tables.
Open-economy notebooks and teaching demos
Compute CAB for slides or country panels without rebuilding the three-component sum in a spreadsheet each semester.
FAQ
How do you calculate the current account balance?
Add the trade balance, net income from abroad (primary income), and net current transfers (secondary income).
What is the trade balance in this calculator?
It is the goods-and-services balance: exports minus imports for the period. Enter it as a single finite number; negative values mean a trade deficit.
Can net income from abroad or transfers be negative?
Yes. Both may be negative when net payments flow to non-residents. All three components accept any finite signed number.
What does the position field mean?
Position is surplus when the current account balance is positive, deficit when negative, and balanced when exactly zero after rounding.
Can a country with a trade surplus still have a current account deficit?
Yes. Payments of income to foreign investors or transfers sent abroad can outweigh a trade surplus. Each part keeps its sign, so the calculator adds them as they are and labels the final result.
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/current-account-balance \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"trade_balance":120,"net_income_from_abroad":-35,"net_current_transfers":15}'const res = await fetch("https://api.kit.forhosting.com/econ/current-account-balance", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"trade_balance": 120,
"net_income_from_abroad": -35,
"net_current_transfers": 15
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/econ/current-account-balance",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"trade_balance": 120,
"net_income_from_abroad": -35,
"net_current_transfers": 15
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/econ/current-account-balance", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"trade_balance":120,"net_income_from_abroad":-35,"net_current_transfers":15}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"trade_balance":120,"net_income_from_abroad":-35,"net_current_transfers":15}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/econ/current-account-balance", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"trade_balance": 120,
"net_income_from_abroad": -35,
"net_current_transfers": 15
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "econ.current_account_balance",
"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 notes
Input contract, response shape, and validation behaviour
There is no non-negativity constraint: every component may be negative because real economies run deficits on trade, income, or transfers. Example: trade balance one hundred twenty, net income from abroad minus thirty-five, net current transfers fifteen yields a current account balance of one hundred and a surplus label. Another path: trade balance minus eighty, net income twenty, transfers five yields minus fifty-five and a deficit. POST a JSON body with three required finite numbers: trade_balance, the goods-and-services balance for the period in currency units; net_income_from_abroad, the primary income balance (any finite sign); and net_current_transfers, the secondary income balance (any finite sign). Fields may arrive as JSON numbers or numeric strings. Missing fields, empty strings, non-numeric strings, Infinity, and NaN fail with invalid_input naming the field. On success the body echoes the three inputs rounded for stable comparison, returns current_account_balance as their sum, sets position to surplus when the balance is positive, deficit when negative, or balanced when exactly zero, and includes the formula string CAB equals trade_balance plus net_income_from_abroad plus net_current_transfers. Failed validation is not billed; successful parse calls use the published $0.002 base price with no model tokens and no outbound network. Pin the rounded current_account_balance and position in automated tests so curriculum and API clients stay aligned.
Integration use cases
LMS and tutoring auto-grading
Score current-account items with a deterministic oracle that rejects missing or non-finite fields as invalid_input and returns a stable rounded balance.
Technical questions
What does the current account balance calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.