Batting strike rate calculator
50 runs off 35 balls is a strike rate of 142.86: runs divided by balls faced, times 100, so a Test grind and a T20 finish can be compared on one scale. A batter yet to face a ball gets no invented rate. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Runs
- 50
- Balls faced
- 35
- Strike rate
- 142.8571428571
Batting strike rate is how cricket turns an innings into a pace number: runs scored per one hundred balls faced. Fifty from a hundred balls and fifty from thirty balls are the same aggregate and completely different innings. Use it to power a scoreboard graphic, to compare a Test grind with a T20 assault, or to gate a report that should never invent a rate when the batter has not yet faced a ball.
What batting strike rate measures and how the formula works
Batting strike rate is the cricket metric that converts an innings into runs per hundred balls faced. Selectors, commentators, and scoring apps quote it because a raw run total hides tempo: a Test opener who makes 80 from 200 balls and a T20 finisher who makes 80 from 40 balls have the same aggregate and opposite jobs.
Official scorecards count balls faced as legal deliveries the batter had to play — wides and no-balls are extras and are not charged to the batter as balls faced, which is why a broadcast graphic and a ball-by-ball file can disagree if someone divides by total deliveries instead of balls faced. This calculator does not fetch a scorecard and does not reclassify extras. You pass the two numbers you already have from the book, the scoring app, or the ball-by-ball extract, and it returns the ratio.
It also does not label 120 as excellent or 50 as poor: a strike rate of 50 can win a Test session and lose a Super Over. Those judgements live in your report. Zero runs from a positive number of balls is valid and yields strike rate zero — the honest reading of a duck or a long, leave-heavy start.
Inputs, formula, rounding, and the zero-balls error
Negative runs are rejected because a run total cannot go below zero in this calculator. Balls faced must be greater than zero: batting strike rate is undefined when balls faced is zero, and the task fails instead of returning Infinity, NaN, or a silent zero. That failure is not billed.
Zero runs with a positive ball count is valid and yields strike rate 0. Example: 50 runs from 35 balls produces 142.8571428571, the familiar 50 off 35 that commentators round to 142.86 on a graphic. Rates above 100 mean more than a run a ball; rates above 200 appear in T20 finishes and are not capped.
Where a deterministic batting strike rate calculator earns its keep
Live scoring products need the same formula every ball, not a spreadsheet cell that someone edited during a rain delay. Academy databases that mix age-group cricket, domestic List A, and international T20 should still speak one language for strike rate even when each competition stores extras differently upstream. Fantasy pipelines and scouting sheets sort a squad by tempo as well as by average; batting average rewards occupancy, strike rate rewards scoring pace, and the two numbers answer different selection questions.
Failed validation does not consume balance. Keep the two inputs in the same innings or the same career window — do not divide this match's runs by last season's balls faced — and you get a reproducible runs-per-hundred-balls figure for scoreboards, LMS quizzes, and edge workers without standing up a cricket data vendor of your own.
If you need bowling economy, batting average, or baseball on-base plus slugging, compute those with their own denominators; this landing is for the cricket batting strike rate that people search for as runs per 100 balls.
What you can do with it
Live scoreboard and broadcast graphics
Turn the current runs and balls faced into a strike rate for the innings graphic after every legal delivery, without inventing a number before the first ball.
Scouting and selection sheets
Compare a Test grind with a T20 assault on the same scale by converting each innings' runs and balls faced into runs per hundred balls.
FAQ
What happens if balls faced is zero?
Batting strike rate is undefined when balls faced is zero, so the calculator does not return Infinity, NaN, or a fake zero rate, and the failure is not billed.
Can runs be zero, and what if runs is negative?
Zero runs with a positive ball count is valid and yields strike rate 0 (a duck or a scoreless start).
Is this cricket strike rate or a baseball statistic?
Cricket. The formula is runs per 100 balls faced, the scorecard identity used in Tests, ODIs, and T20. It is not batting average, bowling economy, or baseball on-base plus slugging.
How do you calculate strike rate in cricket?
Divide the runs by the balls faced and multiply by 100. Fifty runs off 35 balls gives 142.8571428571, which a broadcast graphic rounds to 142.86. Anything above 100 means more than a run a ball.
Do wides and no-balls count as balls faced?
No. Wides and no-balls are extras and are not charged to the batter as balls faced. Dividing by total deliveries instead is the usual reason a scoring file and a broadcast graphic disagree.
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/sports/batting-strike-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"runs":50,"balls_faced":35}'const res = await fetch("https://api.kit.forhosting.com/sports/batting-strike-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"runs": 50,
"balls_faced": 35
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/sports/batting-strike-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"runs": 50,
"balls_faced": 35
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/sports/batting-strike-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"runs":50,"balls_faced":35}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"runs":50,"balls_faced":35}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/sports/batting-strike-rate", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"runs": 50,
"balls_faced": 35
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "sports.batting_strike_rate",
"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_abs_value | 1000000000000000 |
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
What batting strike rate measures and how the formula works
The identity is universal across formats: strike_rate equals runs divided by balls_faced, multiplied by one hundred. What lives here is a deterministic implementation of strike_rate = (runs / balls_faced) × 100, a hard error when balls faced is zero so a dashboard never renders Infinity, and a hard error when runs is negative because this model does not accept a completed innings below zero runs.
Inputs, formula, rounding, and the zero-balls error
POST a JSON body with two required finite numbers: runs, the non-negative runs scored in the innings or window you are measuring, and balls_faced, the strictly positive number of balls the batter faced. Each field may arrive as a JSON number or as a numeric string; aliases runs_scored and r are accepted for the numerator, and balls and bf for the denominator. Missing fields, empty strings, NaN, Infinity, and non-numeric text fail with invalid_input naming the field. On success the body echoes the two inputs, the strike_rate as runs per hundred balls rounded to ten decimal places for stable goldens across runtimes, and a formula string restating strike_rate = (runs / balls_faced) * 100. Pair the response with your own format benchmarks if you need a traffic-light label; this endpoint returns the rate only.
Integration use cases
Fantasy and academy pipelines
Gate a not-yet-batted player as invalid_input when balls faced is zero instead of rendering Infinity in a ranking or inventing a zero rate.
Technical questions
How is batting strike rate calculated from runs and balls faced?
strike_rate = (runs / balls_faced) × 100. Send a non-negative run total and a balls-faced count greater than zero; the API returns runs per hundred balls.
What does the batting strike rate calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.