Estimate file download time from size and connection speed
A 750 MB file over a 100 Mbps connection takes about one minute in ideal conditions. Enter the size and the speed in the units you have, and get the time in seconds, minutes and hours. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Estimate how long a file download should take before you begin the transfer. Enter the file size, choose its decimal or binary unit, then provide the connection speed in bits or bytes per second. The calculator normalizes both values and returns seconds, minutes, hours, a structured duration, and a readable label. It is useful for planning backups, software delivery, media downloads, and any workflow that needs a consistent ideal-throughput estimate without network access or changing external data.
Choose units that match the source values
A reliable estimate begins with units that describe the numbers accurately. Storage tools may report a file in decimal megabytes, where one MB is 1,000,000 bytes, or in binary mebibytes, where one MiB is 1,048,576 bytes. Those values are close but not identical, and the difference becomes more visible for large archives or disk images.
Select B, KB, MB, GB, or TB for decimal sizes and KiB, MiB, GiB, or TiB for binary sizes. Connection plans are usually advertised in bits per second, using bps, Kbps, Mbps, or Gbps. File-copy programs sometimes show bytes per second instead, using Bps, KBps, MBps, or GBps.
Capitalization matters because one byte equals eight bits. For example, a speed of 100 Mbps is 12.5 MBps, not 100 MBps. The calculator performs this conversion explicitly and returns both the normalized file size in bytes and the connection rate in bits per second.
Those fields make it easy to audit the calculation, compare data from different sources, and catch the common eightfold error caused by treating bits and bytes as interchangeable units.
Understand what the estimated duration represents
The calculation converts the file size to bytes, converts the selected connection rate to bits per second, changes the file size to bits, and divides size by rate. The result is an ideal transfer duration: it assumes the selected throughput remains available continuously from the first byte through the last. Decimal values are rounded consistently to keep responses compact and deterministic.
Negative sizes, non-finite numbers, and unknown units are rejected as invalid input. This strict validation prevents a plausible-looking answer from being produced when a unit is misspelled or when a program accidentally supplies a missing, infinite, or unusable speed value.
Allow for real-world transfer overhead
Treat the result as a baseline rather than a promise from an internet provider or server operator. Real downloads carry protocol headers, acknowledgements, encryption overhead, and sometimes retransmitted packets. Wi-Fi interference, shared household traffic, mobile signal changes, server limits, congestion, storage performance, and the time required to establish a connection can all reduce sustained throughput.
A connection sold as 500 Mbps may reach that rate during a speed test yet deliver less from a particular host. For practical scheduling, calculate with a measured sustained speed when one is available, or apply a safety margin after receiving the estimate. Teams commonly add ten to thirty percent for stable wired transfers and a larger allowance for variable wireless or long-distance links.
Because the capability is deterministic and uses no network request, it does not attempt to measure the current line, inspect the destination, or predict congestion. That separation is useful in automation: upstream systems can supply their own conservative speed, call the same calculation repeatedly, and compare scenarios consistently.
What you can do with it
Plan a backup window
Estimate whether a database archive or workstation backup can finish before a maintenance window closes.
Set expectations for customers
Show a consistent approximate duration for software packages, media exports, or other downloadable files.
Compare connection options
Calculate the same transfer at several advertised or measured rates to quantify the practical time saved.
FAQ
Why are Mbps and MBps different?
Mbps means megabits per second, while MBps means megabytes per second. One byte contains eight bits, so 80 Mbps equals 10 MBps.
Does the estimate include internet overhead?
No. It represents ideal sustained throughput. Protocol overhead, congestion, Wi-Fi conditions, server limits, and other traffic can make a real download take longer.
Can I enter binary file units?
Yes. KiB, MiB, GiB, and TiB use powers of 1024, while KB, MB, GB, and TB use powers of 1000.
How long does a 750 MB file take at 100 Mbps?
About one minute in ideal conditions. 750 MB is 750,000,000 bytes, or six billion bits, and at 100,000,000 bits per second that takes 60 seconds. Real downloads are usually somewhat slower.
Can the file size be zero?
Yes. A zero-byte file returns a zero duration. The connection speed, however, must always be greater than zero, because dividing by zero cannot describe a transfer.
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/misc2/internet-download-time-estimate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"file_size":750,"connection_speed":100}'const res = await fetch("https://api.kit.forhosting.com/misc2/internet-download-time-estimate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"file_size": 750,
"connection_speed": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/misc2/internet-download-time-estimate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"file_size": 750,
"connection_speed": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/misc2/internet-download-time-estimate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"file_size":750,"connection_speed":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"file_size":750,"connection_speed":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/misc2/internet-download-time-estimate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"file_size": 750,
"connection_speed": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "misc2.internet_download_time_estimate",
"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
Understand what the estimated duration represents
The response provides the same duration as estimated_seconds, estimated_minutes, and estimated_hours so applications can choose the most useful scale without repeating conversion logic. It also includes a structured duration with whole days, hours, minutes, and seconds, plus a human_readable label for dashboards, status messages, or planning notes. A zero-byte file legitimately returns a zero duration, but connection_speed must always be greater than zero because division by zero cannot describe a transfer.
Allow for real-world transfer overhead
The API charge is $0.002 per request, while the tier A browser experience can perform the same pure calculation locally for quick interactive planning.
Technical questions
What happens when connection speed is zero or negative?
The request returns an invalid_input error because a download duration cannot be calculated from a non-positive connection speed.
How much does the API request cost?
Each API request costs $0.002. The browser calculator is available as a tier A local experience.