Darts Three-Dart Average Calculator
A three-dart average is the standard way to compare scoring pace in darts, even when players have thrown different numbers of darts.
Run — free
Enter the total points credited and the exact number of darts thrown, and this calculator reports the equivalent score per three darts as well as the underlying points-per-dart rate. It is useful for a full match, a leg, a practice session, or any other consistently recorded scoring sample.
What a three-dart average measures
A darts score total alone does not reveal scoring efficiency because one player may have taken many more throws to produce it. The three-dart average places every recorded sample on the same three-dart scale. It answers a simple question: if the player continued scoring at the same rate, how many points would they score with three darts? This makes a short practice drill easier to compare with a longer match or another player’s session. The measure describes scoring pace, not the total number of points won, the number of legs played, or the quality of finishing decisions. It can be calculated for any positive number of darts; the dart count does not need to be divisible by three. For a meaningful comparison, use totals collected under the same scoring convention. If one source includes every dart thrown and another omits misses or finishing attempts, their averages describe different samples even though the arithmetic is correct. Keeping the source and counting rule consistent matters more than making the sample end after a complete visit.
How the calculator works
The calculation has two stages. First, total points are divided by darts thrown to obtain points per dart. That value is then multiplied by three to produce the three-dart average. For example, 501 points scored with 15 darts gives 33.4 points per dart and a three-dart average of 100.2. The calculator retains full precision during the calculation and rounds the displayed results to two decimal places. It accepts zero total points because a recorded sequence can legitimately contain only misses, but the dart count must be at least one because division by zero has no sporting meaning. Both inputs must be whole numbers: match scoring uses whole points and darts are counted individually. The validator also rejects totals above 60 points for every dart thrown, since treble 20 is the maximum score from a single standard dart. Enter the credited points rather than a starting score or remaining checkout. If you are analyzing several legs together, add all credited points and all darts from those same legs before calculating.
Using the result responsibly
Use the three-dart average as a compact performance indicator, then interpret it in the context of the sample. A five-visit practice burst can swing sharply after one exceptional or poor turn, while an average across many legs is generally more stable. When tracking progress, record the date, format, opponent or drill, total points, and darts thrown so later comparisons use like-for-like conditions. The points-per-dart result is mathematically equivalent information and can be convenient when estimating the effect of one additional throw. Remember that a scoring average does not fully describe match play. Checkout success, setup choices, doubles accuracy, pressure, and leg outcomes can distinguish performances with similar averages. Some scorekeeping systems also apply particular rules to bust visits or to which darts count in a match statistic. Use the totals reported by your chosen system consistently instead of mixing conventions. This calculator does not predict future form or certify an official result; it transparently converts the figures you provide. For automated logs, the API offers the same deterministic calculation for $0.002 per request.
What you can do with it
Review a match
Convert the match total and recorded dart count into a standard average that can be compared across fixtures.
Track practice progress
Calculate the same metric after repeated scoring drills and monitor changes over comparable sessions.
Check scoreboard statistics
Recalculate a published three-dart average from its underlying points and darts to confirm the displayed figure.
FAQ
What formula does the calculator use?
It divides total points by darts thrown, then multiplies that result by three.
Must the number of darts be divisible by three?
No. The formula works for any positive whole number of darts, including an incomplete final visit.
How are results rounded?
Points per dart and the three-dart average are displayed to two decimal places.
Can total points be zero?
Yes. Zero is valid when the recorded darts scored no points, and the resulting averages are zero.
Does the calculator handle bust visits?
It uses the credited total and dart count you enter. Follow one scorekeeping convention consistently when preparing those figures.
What does an API calculation cost?
Each API request costs $0.002; the calculation is also available free in the browser.
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/hobby/sport-darts-three-dart-average \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_points":501,"darts_thrown":15}'const res = await fetch("https://api.kit.forhosting.com/hobby/sport-darts-three-dart-average", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_points": 501,
"darts_thrown": 15
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/sport-darts-three-dart-average",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_points": 501,
"darts_thrown": 15
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/sport-darts-three-dart-average", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_points":501,"darts_thrown":15}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_points":501,"darts_thrown":15}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/sport-darts-three-dart-average", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total_points": 501,
"darts_thrown": 15
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.sport_darts_three_dart_average",
"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. |