Data transfer time calculator
Enter a file size and a connection speed and see how long the copy takes: 10 MB over a 10 Mbps line takes 8 seconds, because a byte is eight bits. Decimal and binary units are both handled. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Size
- 10
- Size unit
- MB
- Speed
- 10
- Speed unit
- Mbps
- Size bytes
- 10,000,000
- Size bits
- 80,000,000
- Speed bytes per sec
- 1,250,000
- Speed bits per sec
- 10,000,000
Backup operators, network engineers, and anyone about to copy a disk image start from a file size and a connection speed, then need the hours, minutes, and seconds before that copy finishes. This data transfer calculator converts the size into bytes, converts the advertised speed into bytes per second, and divides to get the transfer duration.
How transfer time is formed from size and speed
Decimal SI units KB, MB, GB, and TB use powers of one thousand, so one megabyte is one million bytes. Binary IEC units KiB, MiB, GiB, and TiB use powers of one thousand twenty-four, so one mebibyte is one million forty-eight thousand five hundred seventy-six bytes. Consumer and carrier links are almost always quoted in bits per second—bps, Kbps, Mbps, Gbps, Tbps—so those factors divide by eight because one byte is eight bits.
Byte-per-second units Bps, KBps, MBps, and GBps skip that divide. That bit-versus-byte split is why ten megabytes over a ten-megabit-per-second line is eight seconds, not one: ten megabytes is eighty megabits, and eighty megabits at ten megabits per second takes eight seconds. Defaults are MB for size and Mbps for speed, matching how file sizes and ISP plans are usually written.
The model is ideal throughput: it does not add TCP handshake, protocol headers, disk seek, or congestion, which keeps the answer fully determined by the numbers you sent.
Where a data transfer time calculator earns its keep
A publisher ranking for that query is serving backup windows, cloud-region copies, SFTP and rsync jobs, USB and Thunderbolt disk clones, and office LAN moves of installers or virtual-machine images. Capacity planners compare durations across Mbps and Gbps tiers to justify an upgrade; the resolved bytes-per-second field is the audit trail for that comparison. Failed validation does not consume balance.
Keep requests small, pin the rounded seconds and the human label in tests, and you get reproducible transfer-duration arithmetic for runbooks, status pages, and lightweight copy estimators without standing up a full network model. Pair this surface with a separate unit converter when you only need to rename Mbps as MB/s; keep this calculator focused on the duration that people mean when they search data transfer time.
What you can do with it
Backup and cloud copy windows
Estimate how long a snapshot, object-store prefix, or region-to-region copy will occupy a known link before you start it, using the units your provider quotes.
LAN, USB, and disk-clone planning
Turn a file size and a gigabit, USB, or Thunderbolt throughput into hours and minutes so a clone or installer copy fits a maintenance slot.
FAQ
Why is 10 MB at 10 Mbps eight seconds, not one second?
ISP speeds are bits per second. Ten megabytes is eighty megabits, so at ten megabits per second the ideal transfer lasts eight seconds. Use MBps if your link is quoted in bytes per second.
What happens if speed is zero?
Duration is size divided by speed, so a connection speed of zero is undefined and is not billed.
What is the difference between MB and MiB?
MB is decimal, so one megabyte is one million bytes, while MiB is binary and uses powers of 1024. A one-gigabyte file therefore holds less data than a one-gibibyte file, and mixing them skews the estimate.
Does the estimate include network overhead?
No. It assumes ideal throughput and leaves out connection setup, protocol headers, disk seek time and congestion. Real copies usually take longer, so treat the result as the best case for that link.
Can I enter the speed in megabytes per second?
Yes. Choose a byte-per-second unit such as MBps and no division by eight is applied. Bit-based units like Mbps, which providers usually quote, are divided by eight to get bytes per second.
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/web/data-transfer \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"size":10,"speed":10}'const res = await fetch("https://api.kit.forhosting.com/web/data-transfer", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"size": 10,
"speed": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/web/data-transfer",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"size": 10,
"speed": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/web/data-transfer", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"size":10,"speed":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"size":10,"speed":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/web/data-transfer", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"size": 10,
"speed": 10
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "web.data_transfer",
"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
max_mb | 25 |
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
A data transfer duration is the clock time it takes to move a known payload across a link of known throughput. Zero-byte payloads finish in zero seconds, which is a valid empty transfer. A negative size is rejected as invalid_input, and a connection speed of zero is rejected because duration is size divided by speed and that quotient is undefined. Successful calls are billed at $0.002; invalid input is not charged.
How transfer time is formed from size and speed
Transfer duration is payload size divided by link throughput, after both quantities live in the same unit system. Size is first turned into bytes using size_unit. Mixing those families is the first way an estimate goes wrong: a one-gigabyte file is not the same payload as a one-gibibyte file. Speed is then turned into bytes per second using speed_unit. The result reports resolved size_bytes, size_bits, speed_bytes_per_sec, and speed_bits_per_sec so you can audit the conversion before you trust the clock. The identity itself is t equals size_bytes divided by speed_bytes_per_sec.
Input contract, duration fields, and error behaviour
A negative speed is likewise rejected. Missing fields, empty strings, non-finite values, and unknown units fail the same way and are not billed. Seconds and secs are rounded half-up to three decimal places so goldens stay stable across runtimes. POST a JSON body with two required finite numbers. size is the payload to move and must be greater than or equal to zero; aliases file_size, bytes, and payload are accepted so a backup job or an object-store listing does not need a rename step. speed is the connection or link rate and must be strictly greater than zero; aliases bandwidth, rate, connection_speed, and link_speed are accepted. Optional size_unit defaults to MB and must be one of B, KB, MB, GB, TB, KiB, MiB, GiB, or TiB. Optional speed_unit defaults to Mbps and must be one of bps, Kbps, Mbps, Gbps, Tbps, Bps, KBps, MBps, or GBps. A negative size fails with invalid_input naming size, because a negative payload is not a transfer. A speed of zero fails with invalid_input naming speed, because dividing by zero does not yield a duration. On success the body echoes size, size_unit, speed, and speed_unit, returns the resolved byte and bit quantities, and splits the duration into seconds plus whole hours, minutes, and a fractional secs field, with a compact human label such as 8s or 1m 25.899s. Example: size ten, size_unit MB, speed ten, speed_unit Mbps yields eight seconds and human 8s. Prefer JSON numbers over strings with unit suffixes; the unit belongs in size_unit and speed_unit, not inside the number. Pricing for a successful item is a flat $0.002.
Where a data transfer time calculator earns its keep
Classroom networking labs need an oracle that marks a zero-speed link as invalid_input instead of returning Infinity, and that treats a zero-byte payload as a finished transfer of zero seconds rather than an error. Automation pipelines call the same API contract at $0.002 per successful item without standing up a spreadsheet of unit tables.
Integration use cases
Bandwidth upgrade justification
Compare transfer duration across Mbps and Gbps tiers from the same payload, reading resolved bytes per second to check the bit-versus-byte math.
Technical questions
How is data transfer time calculated?
Convert size to bytes with size_unit, convert speed to bytes per second with speed_unit (bit units divided by eight), then divide. The API returns seconds plus hours, minutes, secs, and a compact human label.
Can size be zero or negative?
A zero-byte payload is valid and finishes in zero seconds. A negative size is rejected as invalid_input because a negative payload is not a transfer.
What does the data transfer calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.