Pregnancy test calculator
At 14 days after ovulation, an hCG of 150 mIU/mL gives an estimated pregnancy probability of 100%. The calculator weighs the hormone level against when implantation is expected, so the same reading means different things on day four and day fourteen. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Days since ovulation
- 14
- Hcg
- 150
- Hcg unit
- mIU/mL
- Probability
- 100
- Band
- very_high
- Hcg class
- positive
A quantitative pregnancy test is more than a plus or minus on a stick: the same blood or urine hCG reading means different things on day four after ovulation than it does on day fourteen. This pregnancy test calculator accepts days since ovulation and an hCG concentration in milli-international units per millilitre, then returns an estimated pregnancy probability as a percentage together with the hormone class (below threshold, grey zone, or positive), an implantation-timing factor, and a short interpretation.
Why days since ovulation change what an hCG number means
Human chorionic gonadotropin is produced by trophoblast after implantation, and implantation itself is not instantaneous on ovulation day. In a typical cycle the blastocyst attaches between about six and twelve days after ovulation, with a median near day nine. Until that happens, a new pregnancy does not yet secrete measurable hormone, so a reading below five milli-international units per millilitre on day four is expected whether or not conception occurred.
After implantation, median serum hCG starts around the low teens and roughly doubles every two days in a viable early pregnancy, which is why a home urine cassette that fires at twenty-five milli-international units per millilitre is often negative at nine days post ovulation and clearly positive at fourteen. This calculator therefore refuses to treat hCG as a context-free laboratory flag.
It first evaluates a logistic implantation curve with midpoint nine days and scale one point four, then compares the observed concentration to a log-normal trajectory whose median is twelve times two to the power of max(days minus nine, zero) over two, mixed with a non-pregnant exponential baseline of mean two milli-international units per millilitre. The result is a posterior probability, reported as a percentage, that a testing user is pregnant given both numbers.
How to read the percentage, and what this tool is not
Use the percentage as an educational posterior, not as a diagnosis. Very early elevated hCG, before about day seven, is mixed toward a testing prior of one quarter because endogenous hormone from a conception this cycle is not yet expected and exogenous or residual hCG is common after fertility treatment. The calculator does not read a photograph of a dipstick, does not convert mIU to IU, does not date a pregnancy from a last menstrual period, does not distinguish viable from non-viable gestations, and does not replace a clinician.
Prefer this landing when the search is a pregnancy test calculator that wants a probability from days since ovulation and hCG; use an ovulation-date tool if you still need to find ovulation, and a gestational-weight tool if the question is recommended gain rather than whether pregnancy is likely.
FAQ
What does this pregnancy test calculator need as input?
Two finite numbers: days since ovulation (zero or more) and quantitative hCG in mIU/mL (zero or more). It returns an estimated pregnancy probability as a percentage.
What happens if days since ovulation is negative?
A negative day count is not a real elapsed time and is never billed.
Is a high percentage a medical diagnosis of pregnancy?
No. The figure is an educational posterior from a published analytic model. Confirm with a licensed clinician and, when indicated, serial quantitative hCG or ultrasound.
Why can a positive-looking hCG still score as indeterminate before day seven?
Endogenous hCG from a new pregnancy is not expected that early. Elevated readings in that window are mixed toward the prior because residual or exogenous hormone (for example a trigger shot) is a common alternative.
What does the pregnancy test calculator cost?
The browser tool is free and runs locally.
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/health/pregnancy-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"days_since_ovulation":14,"hcg":150}'const res = await fetch("https://api.kit.forhosting.com/health/pregnancy-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"days_since_ovulation": 14,
"hcg": 150
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/pregnancy-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"days_since_ovulation": 14,
"hcg": 150
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/pregnancy-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"days_since_ovulation":14,"hcg":150}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"days_since_ovulation":14,"hcg":150}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/pregnancy-test", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"days_since_ovulation": 14,
"hcg": 150
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.pregnancy_test",
"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
min_days_since_ovulation | 0 |
min_hcg | 0 |
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
Negative days since ovulation are rejected as invalid_input rather than silently clipped, because a clock that runs backwards is not a test result.
Why days since ovulation change what an hCG number means
Days since ovulation below zero cannot arise from a real clock and are rejected with invalid_input so clients never confuse a typo with a medical-looking zero percent.
Input contract, cut-offs, and the JSON you get back
Fractional days are allowed for an afternoon blood draw. POST a JSON body with two required finite numbers: days_since_ovulation (aliases dso, days_post_ovulation, dpo, days) which must be greater than or equal to zero, and hcg (aliases hcg_level, hcg_miu, beta_hcg, bhcg) in milli-international units per millilitre, which must be greater than or equal to zero. Missing fields, empty strings, non-numeric text, infinities, and negative hCG fail with invalid_input naming the field; a negative days_since_ovulation fails with a message that the value must not be negative and is never billed.
How to read the percentage, and what this tool is not
A very_high band with hCG well above twenty-five milli-international units per millilitre at fourteen days after ovulation is what people mean by a clear blood-test positive; a very_low band with undetectable hormone at the same day is what people mean by a reassuringly late negative. Grey-zone readings between five and twenty-five remain indeterminate by design: the usual clinical next step is a repeat quantitative test about forty-eight hours later to look for doubling, which this endpoint does not perform because it receives a single pair of numbers. Failed validation does not consume prepaid balance, so exploratory scripts that deliberately send a negative day are cheap to run.
Integration use cases
Fertility-app hCG log interpretation
A tracking app stores quantitative beta-hCG beside an ovulation mark and needs a deterministic pregnancy probability percentage plus hormone class for the in-app explainer, without calling a clinic API.
Education and worksheet keys
Midwifery and nursing tutors enter vignette days-since-ovulation and hCG values and compare student estimates against a documented Bayes posterior, including the required invalid_input path for a negative day count.
Fixture generation for test suites
Engineers freeze known-good JSON for a late positive, an early undetectable reading, and a negative-day rejection so pregnancy-test UI states stay honest across refactors.