EPS calculator
Net income of 1,000,000 minus 50,000 of preferred dividends, spread over 500,000 weighted-average shares, gives basic earnings per share of 1.9, with 950,000 left for common shareholders. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Net income
- 1,000,000
- Preferred dividends
- 50,000
- Weighted average shares
- 500,000
- Income available to common
- 950,000
- Eps
- 1.9
Earnings per share, or EPS, is the profit or loss that belongs to each ordinary share after preferred dividends are set aside. Equity analysts, lenders, and investor-relations teams use that single figure to compare issuers of different size on a per-share basis, to feed price-to-earnings multiples, and to check whether a period's net income actually reached common shareholders. This EPS calculator takes three finite numbers — net income, preferred dividends, and weighted-average shares outstanding — subtracts preferred dividends from net income, divides by the share count, and returns EPS together with income available to common as the numerator. A zero share count is rejected because division by zero is undefined.
How basic EPS turns net income, preferred dividends, and shares into a per-share figure
Basic earnings per share asks a narrow question: after preferred shareholders take their contractual dividends, how much of the period's net income remains for each ordinary share that was outstanding, on average, during the period. Net income is the bottom-line profit or loss for the period in one currency, already after interest and tax. Preferred dividends are the amount that does not belong to common shareholders and must come off the numerator first; send zero when the issuer has no preferred stock.
Weighted-average shares outstanding is the denominator: the time-weighted ordinary share count for the same period, which already reflects issuances, buybacks, and splits that the filer has applied. A one-million net income, fifty-thousand preferred dividend, and five-hundred-thousand weighted-average share count print income available to common of nine hundred fifty thousand and EPS of one point nine. Zero net income is a legitimate outcome and is not an error: a breakeven period still has an EPS of zero once the share count is positive.
Negative net income is accepted because a loss still has a (negative) earnings-per-share figure that analysts quote next to a price-to-earnings multiple that they may choose not to compute. Preferred dividends may be zero; they may also print a credit in a rare reversal, and the numerator follows that sign instead of hiding behind an absolute value. Negative share counts are rejected for the same reason.
This calculator does not compute diluted EPS, does not add convertibles, options, or warrants to the denominator, does not apply a two-class participating-security allocation, does not annualise a stub period, and does not convert currencies. You supply three finite numbers that already share one period and one currency; the calculator subtracts, divides, rounds income available to common half-up to two decimal places, and rounds EPS half-up to six decimal places so goldens compare byte-for-byte across runtimes.
This is basic EPS from the three-line identity, not a diluted-share walk, not a trailing-twelve-month reconstruction, and not a live quote.
Where an EPS calculator earns its keep
Operators screening a monthly close use an EPS calculator to turn last period's net income, preferred dividends, and weighted-average share count into one comparable per-share line before they open a full earnings model. Equity analysts re-run the same three fields when a year closes or a consensus pack asks for basic earnings per share, then pin eps next to a price-to-earnings multiple so every memo starts from one per-share figure rather than from net income that has not been scaled by shares.
Investor-relations and board packs drop net income from the income statement, preferred dividends from the notes, and WASO from the share table, and they compare that basic EPS with a diluted case and a trailing-twelve-month reconstruction rather than treating any one of those as a substitute. This is a different search and a different job from diluted EPS, from a price-to-earnings multiple, from a dividend-per-share identity, and from a return-on-equity ratio: those tools start from different lines and answer different questions. Failed validation does not consume balance.
Keep all three fields finite, keep the share count strictly positive, pin the rounded EPS in tests, and you get a reproducible basic-earnings-per-share figure for teasers, LMS plugins, and edge workers without standing up a general ledger of your own.
What you can do with it
Monthly close before the earnings model
Turn last period's net income, preferred dividends, and weighted-average shares into one basic EPS line before you open a full earnings model.
Analyst memos and P/E multiples
Pin basic earnings per share next to price so a price-to-earnings pack shares one per-share figure rather than unscaled net income.
IR packs versus a diluted case
Drop filing net income, notes preferred dividends, and WASO into one going-in basic EPS beside a diluted walk and a trailing-twelve-month view.
FAQ
How is EPS calculated?
Money amounts round half-up to two decimal places; EPS rounds half-up to six.
What happens if shares outstanding is zero?
EPS is undefined when the weighted-average share count is zero, so the calculator does not return Infinity. A negative share count is also rejected. Those failures are not billed.
Is this basic EPS or diluted EPS?
Basic EPS. The denominator is the weighted-average ordinary share count you send. The calculator does not add convertibles, options, or warrants, and it does not apply a two-class participating-security allocation.
Can net income be negative, and can preferred dividends be zero?
Yes. A loss still has a (negative) EPS.
What does weighted-average shares outstanding mean?
It is the ordinary share count averaged over the time each share was outstanding during the period, so issuances, buybacks and splits already count in proportion. Use the same period as your net income.
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/eps \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"net_income":1000000,"preferred_dividends":50000,"weighted_average_shares":500000}'const res = await fetch("https://api.kit.forhosting.com/fin/eps", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"net_income": 1000000,
"preferred_dividends": 50000,
"weighted_average_shares": 500000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/eps",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"net_income": 1000000,
"preferred_dividends": 50000,
"weighted_average_shares": 500000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/eps", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"net_income":1000000,"preferred_dividends":50000,"weighted_average_shares":500000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"net_income":1000000,"preferred_dividends":50000,"weighted_average_shares":500000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/eps", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"net_income": 1000000,
"preferred_dividends": 50000,
"weighted_average_shares": 500000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.eps",
"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
Any input that is missing, empty, or not a finite number fails with invalid_input and is not billed.
How basic EPS turns net income, preferred dividends, and shares into a per-share figure
The identity this calculator uses is eps equals net_income minus preferred_dividends, all divided by weighted_average_shares. Subtracting preferred dividends from net income yields income available to common, which this endpoint also returns so a worksheet can pin the numerator next to the per-share result. A zero share count is not a legitimate EPS: division by zero is undefined, so the task fails with invalid_input rather than returning Infinity or a hollow empty payload.
Input contract, response shape, and error behaviour
Zero and negative net income are allowed: a breakeven or a loss still produces a finite EPS rather than an error. Example: one million of net income, fifty thousand of preferred dividends, and five hundred thousand weighted-average shares yield income available to common of nine hundred fifty thousand and EPS of one point nine. POST a JSON body with three required finite numbers. net_income is the period bottom line in one currency; aliases net_profit, earnings, and profit map to the same field so a worksheet can keep its column names. preferred_dividends is the amount subtracted before earnings belong to common shareholders; aliases preferred_div, pref_dividends, and preferred are accepted. weighted_average_shares is the time-weighted ordinary share count for the same period; aliases shares_outstanding, shares, and weighted_shares are accepted. Each numeric field may arrive as a JSON number or a numeric string. Missing fields, empty strings, and non-finite values — NaN, Infinity, or text that does not parse as a number — fail with invalid_input naming the field. Those failures are not billed. Zero preferred dividends are allowed when there is no preferred stock. weighted_average_shares must be strictly greater than zero; a zero share count fails because EPS is undefined when shares outstanding is zero, and a negative share count fails because it is not a weighted average. On success the body echoes net_income, preferred_dividends, and weighted_average_shares, then reports income_available_to_common as net income minus preferred dividends (rounded half-up to two decimal places) and eps as that numerator divided by the share count (rounded half-up to six decimal places), plus a formula string restating the identity. Pair the JSON with your own rule for which share count matches the period of the net income you send — basic WASO from the notes is not diluted WASO, and a year-end spot count is not a weighted average — because this endpoint divides the three numbers you send; it does not rebuild the equity roll-forward, choose a reporting convention, or look up a filing.
Technical questions
What does the EPS calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.