Mobile data usage calculator
On a 10240 MB plan, streaming, maps, social apps and email totalling 3470 MB leave 6770 MB, about 33.9% used. List what you have used against your monthly cap and see what remains, line by line. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Limit mb
- 10,240
- Entry count
- 4
- Used mb
- 3,470
- Remaining mb
- 6,770
- Percent used
- 33.8867
A monthly mobile data usage calculator answers one practical question before you tether a laptop, start a long video call, or hand a child a hotspot: after these usage entries, how many megabytes are still left on the plan, and what percent of the allowance is already gone? Negative usage values are rejected as invalid input and are not billed.
How remaining mobile data and percent used are computed
Start with a monthly mobile data allowance already expressed in megabytes. The calculator does not convert gigabytes, kibibytes, or advertised marketing units; you decide whether ten gigabytes means ten thousand or ten thousand two hundred forty megabytes, then pass that number as the limit. For each usage entry, take a finite non-negative amount in the same megabyte unit.
Optional labels name the line for display, such as streaming, maps, or a hotspot session, but only the amounts enter the arithmetic. Total used is the sum of every usage amount. Data left, reported as remaining megabytes, equals the monthly limit minus that total.
Percent used equals total used divided by the limit, then multiplied by one hundred. When remaining is zero or positive, the plan still has room; when remaining is strictly negative, the allowance is exceeded and the overage is the absolute value of remaining. Zero-megabyte lines are accepted and do not change the total, which is useful for a day with no traffic.
Negative usage amounts are rejected because a usage entry cannot describe a refund of megabytes in this product. A limit of zero or less is also rejected, because percent used would divide by zero.
What you can do with it
Family plan check-in
Parents post each child's app totals against a shared cap so everyone sees the same used amount, data left, and percent used.
FAQ
How does the mobile data usage calculator work?
Send a monthly limit in megabytes and a non-empty list of usage amounts in megabytes.
What happens if I go over my monthly data limit?
Exceeding the plan is not treated as invalid input.
Can a usage entry be zero?
Yes. A day or app with 0 MB is allowed.
Do I need labels on every usage entry?
No. Labels are optional. Bare numbers are treated as megabyte amounts, and unlabeled lines receive stable names such as Entry 1 for display.
Does it convert gigabytes to megabytes for me?
No. Enter the monthly allowance already in megabytes. You decide whether a gigabyte counts as 1000 MB or your 10 GB means 10240 MB, and every usage line uses that same unit.
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/life/data-usage \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"limit_mb":10240,"usage":[{"label":"Streaming","amount":2400},{"label":"Maps","amount":180},{"label":"Social","amount":850},{"label":"Email","amount":40}]}'const res = await fetch("https://api.kit.forhosting.com/life/data-usage", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"limit_mb": 10240,
"usage": [
{
"label": "Streaming",
"amount": 2400
},
{
"label": "Maps",
"amount": 180
},
{
"label": "Social",
"amount": 850
},
{
"label": "Email",
"amount": 40
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/life/data-usage",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"limit_mb": 10240,
"usage": [
{
"label": "Streaming",
"amount": 2400
},
{
"label": "Maps",
"amount": 180
},
{
"label": "Social",
"amount": 850
},
{
"label": "Email",
"amount": 40
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/life/data-usage", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"limit_mb":10240,"usage":[{"label":"Streaming","amount":2400},{"label":"Maps","amount":180},{"label":"Social","amount":850},{"label":"Email","amount":40}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"limit_mb":10240,"usage":[{"label":"Streaming","amount":2400},{"label":"Maps","amount":180},{"label":"Social","amount":850},{"label":"Email","amount":40}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/life/data-usage", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"limit_mb": 10240,
"usage": [
{
"label": "Streaming",
"amount": 2400
},
{
"label": "Maps",
"amount": 180
},
{
"label": "Social",
"amount": 850
},
{
"label": "Email",
"amount": 40
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "life.data_usage",
"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
Travelers roaming on a prepaid SIM, parents sharing a family pool, field workers on a capped work line, and support desks that quote remaining data all need a deterministic answer that does not log into a carrier account or scrape a billing portal. This calculator accepts a monthly limit in megabytes and one or more usage entries also in megabytes, sums the consumed amount, subtracts it from the limit, and returns data left plus percent used.
How remaining mobile data and percent used are computed
Rounding is fixed to twelve decimal places for megabyte fields and four decimal places for percents so browser and API goldens stay byte-stable across runtimes without floating noise on simple sums.
Input contract, response shape, and error behaviour
Each entry may be a bare number treated as an amount, or an object with amount required and label optional. Example: a ten thousand two hundred forty megabyte plan with streaming at two thousand four hundred, maps at one hundred eighty, social at eight hundred fifty, and email at forty yields three thousand four hundred seventy megabytes used and six thousand seven hundred seventy megabytes left, about thirty three point nine percent used. Lists longer than five hundred entries are rejected to keep pure-parse work bounded. POST a JSON body with two required fields: limit_mb, a finite number of megabytes greater than zero, and usage, a non-empty array of usage entries. Amount also accepts common aliases such as mb, value, or used; the list field itself accepts aliases entries, usage_mb, amounts, and items. The limit field accepts aliases monthly_limit, limit, allowance, quota, and plan_mb so scripts can reuse vocabulary from carrier dashboards. On success the body echoes the limit, the entry count, each line with a stable label, rounded amount, and running remaining after that line, plus used_mb, remaining_mb, percent_used, percent_remaining, over_limit, overage_mb, a short formula string, a human message, and ordered steps for worksheets. If the same style of list sums past the limit, over_limit is true and overage_mb shows how far past the cap you went, still a successful response, because exceeding the plan is a question the calculator answers. Missing limit, empty usage, non-finite numbers, or any negative usage value fail with invalid_input naming the field and are not billed. Successful API calls use the published base of $0.002 per item.
Where a mobile data usage calculator earns its keep
Parents sharing a family plan enter each child's app totals and stop tethering when percent used crosses a household threshold. Keep requests small, pin rounded megabyte totals in tests, and you get reproducible remaining data for phone checklists, LMS plugins, and edge workers without standing up a carrier integration of your own. Prepaid travelers keep a running list of hotspot sessions and video calls so they can see remaining megabytes before a boarding-gate download eats the rest of a roaming pack. Small offices with capped work SIMs post daily usage entries into a bot that flags over_limit before a field tablet starts an unplanned software update. Classroom units on digital literacy assign remaining-data exercises; an API with running remaining after each line lets graders see which session first crossed the monthly cap. Automation scripts that schedule firmware updates or cloud backups can halt a job when remaining_mb would go negative.
Integration use cases
Prepaid roaming pack
Enter your monthly megabyte limit and each hotspot or video session; watch remaining megabytes and stop before the pack runs out.
Capped work-SIM automation
Scripts send daily usage entries against a work allowance and halt updates or backups when over_limit becomes true.
Technical questions
What does the data usage calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.