Pregnancy test at 3 weeks
At 3 weeks from your last period, serum hCG is usually 5 to 50 mIU/mL, so a standard 25 mIU/mL home strip has about a 30% chance of turning positive. Enter your last period date to see your week-3 window. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- First day of last period
- 2026-01-01
- As of
- 2026-01-22
- Week3 date
- 2026-01-22
- Week3 end
- 2026-01-28
- Gestational days
- 21
- Weeks
- 3
Three weeks of pregnancy counted from the first day of the last menstrual period is still very early: ovulation has usually only just happened, implantation may not even be complete, and a home urine strip can still read negative even when a pregnancy is underway. This pregnancy test at 3 weeks calculator takes that last-period date and an as-of calendar day, checks that the period date is not in the future, and returns the expected serum hCG range for week three, the likely home-test result against a standard 25 mIU/mL strip, and the calendar window that corresponds to 3 weeks 0 days through 3 weeks 6 days. Use it when you need a transparent 3-week hCG band and home-test likelihood without shipping an obstetric library of your own.
What three weeks from the last period means for hCG and a home test
Three weeks of pregnancy, counted from the first day of the last menstrual period, is an obstetric calendar fact rather than a statement that an embryo has been growing for twenty-one days. In a typical twenty-eight-day cycle ovulation sits near day fourteen, so day twenty-one from the last period is only about seven days after ovulation.
Implantation of a blastocyst commonly occurs six to twelve days after ovulation, which means the start of week three can still precede implantation, while the end of week three (three weeks and six days, twenty-seven days from the last period) is often when serum human chorionic gonadotropin first becomes reliably measurable. Clinical laboratory tables for three weeks from the last period usually quote a serum hCG band of about five to fifty milli-international units per millilitre. This capability uses that published three-week band, not a live immunoassay.
Home urine strips commonly claim a detection limit near twenty-five milli-international units per millilitre. Because hCG rises by roughly doubling, values inside a multiplicative band are modelled as log-uniform: the chance that a draw from five to fifty exceeds twenty-five is the log span above the strip limit divided by the log span of the whole band, which rounds to thirty percent. That is why the likely home-test result at three weeks is reported as a possible faint line or a negative, not as a reliable positive.
The calculator is an educational timing aid. It does not diagnose pregnancy, rule pregnancy out, or replace a quantitative blood test or clinical care when symptoms or risk factors need a clinician.
What you can do with it
Early home-test planning after a known last period
Show the week-3 calendar window, the 5–50 mIU/mL serum band, and a thirty percent chance of a positive 25 mIU/mL strip so testers know a negative at 3w0d is common.
FAQ
What happens if my last period date is in the future?
Impossible calendar days (for example 31 April) also fail. Invalid input is not billed.
What hCG range is expected at 3 weeks of pregnancy?
About 5 to 50 mIU/mL in blood, the band that laboratory tables usually quote for three weeks from the last period. The calculator uses that published band, not a live blood test.
How likely is a positive home test at 3 weeks?
About 30% with a standard 25 mIU/mL urine strip. That is why the likely result is shown as a possible faint line or a negative, not as a reliable positive.
Why can a home test be negative at 3 weeks even if I am pregnant?
In a 28-day cycle, day 21 from the last period is only about seven days after ovulation, and implantation often happens six to twelve days after it. hCG usually becomes reliably measurable only towards the end of week 3.
Which days count as week 3 of pregnancy?
Week 3 runs from 21 to 27 days after the first day of your last period, that is 3 weeks 0 days to 3 weeks 6 days. With a last period on 1 January 2026, it runs from 22 to 28 January.
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-at-3-weeks \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"lmp":"2026-01-01","as_of":"2026-01-22"}'const res = await fetch("https://api.kit.forhosting.com/health/pregnancy-test-at-3-weeks", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"lmp": "2026-01-01",
"as_of": "2026-01-22"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/pregnancy-test-at-3-weeks",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"lmp": "2026-01-01",
"as_of": "2026-01-22"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/pregnancy-test-at-3-weeks", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"lmp":"2026-01-01","as_of":"2026-01-22"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"lmp":"2026-01-01","as_of":"2026-01-22"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/pregnancy-test-at-3-weeks", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"lmp": "2026-01-01",
"as_of": "2026-01-22"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.pregnancy_test_at_3_weeks",
"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
Invalid or future dates fail with invalid_input and are not billed.
Input contract, the future-date rule, and the response shape
Optional output keys are omitted rather than set to null. POST a JSON object with two required calendar fields. lmp is the first bleeding day of the last menstrual period as a strict four-digit year, hyphen, two-digit month, hyphen, two-digit day string; aliases last_menstrual_period, lmp_date, and period_start are accepted so forms can keep their usual names. as_of is the reference day used as today or as the day you want gestational age reported; aliases reference, on_date, today, and date map to the same parse. Each field is validated as a real Gregorian day in years one through nine thousand nine hundred ninety-nine, including leap-day rules, so values such as thirty-one April or twenty-nine February in a common year fail with invalid_input naming the field. If lmp falls after as_of the last-period date is in the future relative to the reference day and the task fails with invalid_input; that failure is not billed. On success the body echoes the normalised lmp and as_of strings; returns week3_date (last period plus twenty-one whole civil days) and week3_end (plus twenty-seven days); reports gestational_days, weeks, and days at as_of; sets at_week3 when as_of sits inside that twenty-one to twenty-seven day window; returns days_to_week3 as twenty-one minus gestational_days (negative after week three starts); and attaches hcg_min, hcg_max, hcg_mid, hcg_unit, test_sensitivity, likely_result, likelihood_percent, and a formula string. Example: lmp 2026-01-01 with as_of 2026-01-22 is exactly three weeks 0 days, at_week3 is true, and the 5 to 50 mIU/mL band is returned with a thirty percent likelihood against a 25 mIU/mL strip.
Where a 3-week pregnancy-test estimate earns its keep
People search for a pregnancy test at three weeks because that is often the first moment they even consider testing, still before a missed period on a twenty-eight-day cycle. Wellness apps, editorial explainers, and intake forms need a transparent number they can show next to that search: the expected serum range, a home-strip likelihood against a named sensitivity, and the calendar window that three weeks actually occupies. Embedding this calculator gives ISO dates and integer percentages a user interface can render without inventing a doubling model of its own. If a test is negative at three weeks and a period still does not arrive, the usual teaching is to repeat later in the week or at four weeks, when the published band sits much higher. Classroom demos of gestational dating can change the last-period day and immediately see week3_date move, including across February in a leap year, which is exactly the kind of civil-calendar edge a host clock mishandles near time-zone offsets. Automation that archives last-period columns can call the same pure function on the prepaid path at $0.002 per successful request; invalid input does not consume balance. Pin the examples, keep last-period validation strict, and you get a reproducible three-week hCG and home-test estimate without standing up an obstetric SDK of your own for a two-date problem.
Integration use cases
Editorial explainers and health-education widgets
Power a live pregnancy-test-at-3-weeks page whose free browser result matches the API, including leap-year last-period dates and a hard future-date rejection.
Intake forms and gestational-age archives
Convert stored LMP columns plus an as-of day into ISO week3_date values and an hCG band without a host Date object or an obstetric SDK.
Technical questions
Can a home pregnancy test be positive at 3 weeks?
Sometimes, but it is still early. This calculator reports a 5–50 mIU/mL serum band at three weeks from LMP and a 30 percent log-uniform chance of meeting a 25 mIU/mL strip, so the likely result is possible_faint_or_negative rather than a reliable positive.
What hCG range should I expect at 3 weeks of pregnancy?
The educational serum band used here is 5 to 50 mIU/mL (hcg_min / hcg_max), with geometric midpoint hcg_mid 16. It is a published three-week-from-LMP table, not a blood-test result for one person.
Why do I have to send as_of as well as lmp?
The engine never reads a wall clock or constructs a Date. as_of is the reference day used both to compute gestational age and to reject an lmp that is in the future relative to that day. Aliases include today, reference, on_date, and date.
What does the pregnancy test at 3 weeks calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.