Vaccine production time calculator
1,000,000 doses at 50,000 a day on two parallel streams need 10 days of plant time. Enter the campaign size, what one stream finishes per day and how many run at once to get days needed and calendar days. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Required doses
- 1,000,000
- Daily plant capacity
- 50,000
- Batches in parallel
- 2
- Effective daily output
- 100,000
- Days needed
- 10
- Calendar days
- 10
Estimating how long a vaccine campaign occupies a plant is a throughput problem, not a clinical one. Planners, contract manufacturers, and public-health logistics teams need a reproducible answer from three quantities: how many doses must be produced, how many doses one stream of the plant can finish per day, and how many batches can run in parallel. This vaccine production time calculator divides required doses by the product of daily plant capacity and batches in parallel, returning days needed plus a calendar-day ceiling for occupancy planning.
How required doses, daily capacity, and parallel batches set production days
Vaccine production time at first order is a throughput identity, not a clinical model and not a full factory digital twin. Required doses is the campaign size you must release: a national immunization target, a tender lot, a stockpile replenishment, or a clinical-trial fill expressed in finished doses. Daily plant capacity is the number of doses one production stream can complete in a calendar day at the bottleneck you choose to model—commonly a filling line, a downstream purification train, or a bulk antigen bioreactor converted into finished-dose equivalents.
Batches in parallel is how many of those streams can run at the same time without sharing that bottleneck: two filling lines, three bioreactors, or any other simultaneous lots. Effective daily output is daily plant capacity multiplied by batches in parallel. Days needed is required doses divided by that product, which is the same demand-over-rate formula operations research uses for make-to-order production.
The calculator also returns calendar days as the whole-day ceiling of days needed, so a 1.7-day occupancy still books two calendar days of plant time. The identity does not invent changeover, aseptic holds, quality-control release, yield loss, or shipping. Those add calendar time on top of the pure manufacturing window and belong in your own schedule.
When every input is a positive finite number, the quotient is unique and deterministic. Use days needed as a lower bound on occupancy, then layer holds if your process requires them.
Who plans plant time with this calculator
Ministries and immunization programmes use a vaccine production time calculator so a campaign target can be turned into a plant-occupancy window before a tender is signed, instead of a spreadsheet that silently treats zero capacity as an infinite wait. Contract manufacturing organisations check whether two filling lines at a stated daily rate can meet a lot size inside a promised ship date, then quote the calendar-day ceiling rather than a raw fraction.
Public-health classrooms and tabletop exercises let students vary required doses, daily plant capacity, and batches in parallel and see why doubling parallel streams halves occupancy when the bottleneck is independent. Journalists and policy explainers need a deterministic oracle that returns ten days for one million doses at fifty thousand per line with two lines, instead of a prose estimate that drifts between articles. Validation failures never consume balance.
Keep expectations honest: this is not a batch record, not a sterility-assurance model, and not a substitute for a validated manufacturing schedule that includes changeover, quality-control release, and yield. People who must ship a licensed product should follow their quality system and regulator, not any single occupancy quotient from a first-order throughput identity.
What you can do with it
National immunization campaign sizing
Turn a finished-dose target, a filling-line daily rate, and the number of parallel streams into days needed and calendar days before a tender or stockpile replenishment is committed.
Contract manufacturing bid checks
Test whether stated daily plant capacity and batches in parallel can occupy the plant for a promised lot size without standing up a full manufacturing execution system.
FAQ
What happens if doses, capacity, or parallel batches is not a positive number?
Every quantity must be a positive finite number greater than zero. Missing, zero, negative, infinite, or non-numeric values are not billed.
Does the estimate include quality-control holds or changeover?
No. The identity is demand over rate for the manufacturing window only.
Why are calendar days shown next to days needed?
Because plant time is booked in whole days. Days needed is the exact division, and calendar days rounds it up, so a 1.7-day run still reserves two full calendar days on the schedule.
What should I enter as daily plant capacity?
The finished doses one production stream completes in a calendar day at the bottleneck you choose to model, such as a filling line, a purification train or a bulk antigen bioreactor converted into finished-dose equivalents.
Does a second parallel line halve the production time?
Yes, as long as the two lines do not share the same bottleneck. Daily output is the capacity multiplied by the streams running at once, so doubling the streams doubles output and halves the days needed.
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/vaccine-production \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"required_doses":1000000,"daily_plant_capacity":50000,"batches_in_parallel":2}'const res = await fetch("https://api.kit.forhosting.com/health/vaccine-production", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"required_doses": 1000000,
"daily_plant_capacity": 50000,
"batches_in_parallel": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/vaccine-production",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"required_doses": 1000000,
"daily_plant_capacity": 50000,
"batches_in_parallel": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/vaccine-production", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"required_doses":1000000,"daily_plant_capacity":50000,"batches_in_parallel":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"required_doses":1000000,"daily_plant_capacity":50000,"batches_in_parallel":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/vaccine-production", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"required_doses": 1000000,
"daily_plant_capacity": 50000,
"batches_in_parallel": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.vaccine_production",
"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 quantity that is missing, zero, negative, infinite, or otherwise not a positive finite number fails with invalid_input and is not billed.
Input contract, response shape, and validation errors
Example: one million required doses, fifty thousand daily plant capacity, and two batches in parallel yield one hundred thousand doses per day, ten days needed, and ten calendar days. Units are yours: if capacity is in finished doses per day, days needed is in days. POST a JSON body with three required positive finite numbers: required_doses, the campaign size in finished doses; daily_plant_capacity, doses one stream finishes per calendar day; and batches_in_parallel, how many independent streams can run at once. Each field may arrive as a JSON number or as a numeric string, including scientific notation. Aliases exist so older forms can map without renaming columns: doses, total_doses, target_doses, and demand for required_doses; daily_capacity, plant_capacity, capacity_per_day, and line_capacity for daily_plant_capacity; parallel_batches, batches, n_batches, and parallel_lines for batches_in_parallel. Missing fields, empty strings, booleans, objects, infinities, NaN, zero, and negative values fail with invalid_input naming the field as not a positive number, and those failures are not billed. On success the body echoes the three inputs, returns effective_daily_output as daily plant capacity times batches in parallel, days_needed as the exact quotient rounded to ten decimal places for stable goldens across runtimes, calendar_days as the occupancy ceiling, a formula string restating the identity, and method parallel_batch_throughput. Pair the response with your own Gantt or MES if you need holds; this endpoint estimates manufacturing occupancy only.
Integration use cases
Classroom and tabletop production drills
Let students vary required doses, daily capacity, and parallel batches and see why doubling independent streams halves occupancy in a deterministic JSON contract.
Technical questions
How does the vaccine production time calculator estimate days needed?
It divides required_doses by the product of daily_plant_capacity and batches_in_parallel. Effective daily output is that product; days_needed is the exact quotient; calendar_days is the whole-day ceiling of occupancy.
What is the difference between days_needed and calendar_days?
days_needed is the exact production window as a real number of days. calendar_days is the occupancy ceiling: a 1.67-day run still books two calendar days of plant time. Any positive demand books at least one calendar day.
What does the vaccine production calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.