DART rate calculator
Scale serious injury cases to 100 full-time workers so sites of any size compare fairly: 5 DART cases over 400000 hours worked is a DART rate of 2.5, beside a recordable rate of 4. Ready for the 300A summary. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Recordable incidents
- 8
- Days away cases
- 5
- Hours worked
- 400,000
- Dart rate
- 2.5
- Incident rate
- 4
- Equivalent workers
- 200
- Dart share percent
- 62.5
The OSHA DART rate is the workplace-injury statistic that counts Days Away, Restricted, or Transferred cases per one hundred full-time equivalent workers. Safety managers, insurers, and bid desks put it beside the total recordable incident rate when they compare sites, fill an OSHA 300A summary, or decide whether a contractor's history is acceptable. This calculator accepts three finite numbers: recordable incidents, days-away (DART) cases, and total hours worked. It returns the DART rate and the companion recordable incident rate using the official 200,000-hour baseline that represents one hundred employees working forty hours a week for fifty weeks. Arithmetic is deterministic, with no network and no clock.
What the DART rate measures
DART stands for Days Away, Restricted, or Transferred. On the OSHA 300 log these are the recordable cases in columns H and I: someone missed work, was put on restricted duty, or was moved to another job because of a work-related injury or illness. Counting those cases alone would always make a big site look worse than a small one, so the rate scales them to 100 full-time equivalent workers. You multiply the DART cases by 200000 and divide by the hours actually worked by everyone in the same window. The equivalent workforce behind the figure is the hours divided by 2000, the usual hours of one full-time employee in a year, so a reviewer can see how many people the rate stands for.
Using it for year-end reports and contractor checks
At year end, take last year's recordable count, the DART cases from columns H and I, and the total hours worked, and copy the DART rate and the recordable incident rate onto the 300A summary and into the board pack. When you prequalify contractors, ask each bidder for the same three numbers and compare their DART rates per 100 workers rather than raw case counts, which punish larger crews. A high share of recordables turning into DART cases means the injuries that did happen were serious enough to take people off ordinary duty.
What you can do with it
OSHA 300A year-end summary
Take last year's recordable count, DART cases from columns H and I, and total hours worked, then paste the DART rate and recordable incident rate onto the 300A and into the board pack.
Contractor prequalification
Ask each bidder for recordable incidents, days-away cases, and hours, then compare DART rates per 100 workers instead of raw case counts that punish larger crews.
FAQ
Is DART rate the same as TRIR or a lost-time injury frequency?
No. DART uses days-away, restricted, and transfer cases. Lost-time frequencies that use 1,000,000 hours are a different industrial convention.
Can days-away cases be larger than recordable incidents?
No. DART cases are a subset of OSHA recordables.
How do I calculate the DART rate?
Multiply the number of DART cases by 200000 and divide by the total hours worked in the same period. Five cases over 400000 hours gives a DART rate of 2.5.
Why is the DART rate based on 200000 hours?
Because 200000 hours is what 100 full-time employees work in a year at forty hours a week for fifty weeks. It puts a small shop and a large plant on the same per-100-workers footing.
What else does the result show besides the DART rate?
It adds the recordable incident rate on the same baseline, the number of equivalent full-time workers, and the share of recordables that became DART cases. With 8 recordables and 5 DART cases, that share is 62.5%.
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/fin/dart-rate \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"recordable_incidents":8,"days_away_cases":5,"hours_worked":400000}'const res = await fetch("https://api.kit.forhosting.com/fin/dart-rate", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"recordable_incidents": 8,
"days_away_cases": 5,
"hours_worked": 400000
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/fin/dart-rate",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"recordable_incidents": 8,
"days_away_cases": 5,
"hours_worked": 400000
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/fin/dart-rate", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"recordable_incidents":8,"days_away_cases":5,"hours_worked":400000}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"recordable_incidents":8,"days_away_cases":5,"hours_worked":400000}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/fin/dart-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
{
"recordable_incidents": 8,
"days_away_cases": 5,
"hours_worked": 400000
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "fin.dart_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
Hours worked of zero make that ratio undefined, so the task fails with invalid_input instead of inventing a rate. Use it free in the browser, or call the API at $0.002 per successful item for dashboards, bid packages, and year-end OSHA summaries that must see the same figure every time.
What the DART rate measures and what the response contains
DART stands for Days Away, Restricted, or Transferred. On the OSHA 300 log those are the recordable cases in columns H and I: someone missed work, was put on restricted duty, or was transferred because of a work-related injury or illness. The DART rate scales that count to one hundred full-time equivalent workers so a fifty-person shop and a two-thousand-person plant can be compared without the larger site always looking worse. The identity is dart_rate equals days_away_cases times 200000 divided by hours_worked. The companion incident_rate, often called TRIR, uses the same baseline on recordable_incidents instead of DART cases. equivalent_workers is hours_worked divided by 2000, the conventional hours of one full-time employee over a year, so a reviewer can see the size of the exposed population behind the rate. When recordable_incidents is greater than zero, dart_share_percent is the share of recordables that became DART cases; a high share means the recordables that did occur were serious enough to take people off ordinary duty. Zero recordable incidents with zero DART cases is a legal year: both rates are zero and dart_share_percent is omitted rather than printed as null. This calculator does not classify a case as recordable, does not count calendar days lost, and does not apply a 1,000,000-hour lost-time convention used in some industrial standards. It either scales three finite numbers inside the supported range or rejects the input with invalid_input. Rejected cases include missing fields, non-finite values, magnitudes above the documented ceiling, a negative count, DART cases that exceed recordables, and any hours_worked value that is zero or negative, because division by zero is undefined and a non-positive hour total does not define incidents per 100 workers.
Input contract, aliases, and how the quotient stays reproducible
Fractional hours are accepted because payroll systems emit tenths; case counts may be whole logs or year-to-date estimates. POST a JSON body with three required finite numbers: recordable_incidents, days_away_cases, and hours_worked. recordable_incidents is the OSHA recordable count for the window, a number that is not negative, with aliases recordable, incidents, total_recordable, recordables, and n. days_away_cases is the DART numerator for that same window, a number that is not negative and must not exceed recordable_incidents, with aliases dart_cases, days_away, dart, dart_incidents, and dafw. hours_worked is total hours actually worked by all employees in that window, a number strictly greater than zero, with aliases hours, total_hours, eh, exposure_hours, and employee_hours. Each field may arrive as a JSON number or as a numeric string; optional leading plus signs and scientific notation are allowed when they parse as finite decimals. Empty strings, missing fields, and non-numeric tokens fail with invalid_input naming the field and are not billed. The error this landing exists to catch is hours_worked of zero: the message contains hours worked are zero so a form can highlight that control instead of a generic alert. Pair the free browser run on this page with the priced API when a bid desk, insurer portal, or nightly EHS script must see the identical OSHA identity without re-implementing the 200,000-hour baseline in a spreadsheet that silently changes the decimal separator.
Where a DART rate calculator earns its keep
People meet the DART rate when a safety manager closes the OSHA 300A, when a general contractor asks a subcontractor for last year's rate before issuing a gate pass, when an insurer prices workers compensation, or when a corporate EHS dashboard flags a site whose DART moved while headcount barely changed. Bid packages for construction and manufacturing often demand both the recordable incident rate and the DART rate so a buyer can see not only how many cases occurred but how many took people off ordinary duty. Homework and professional-certification drills need a fast, offline source of the 200,000-hour identity so solutions can be checked without opaque macros under time pressure. Growth and operations engineers call the same contract from scripts to seed deterministic test vectors for EHS dashboards, to normalize user-entered log counts before a demo, or to satisfy a product challenge that demands a dart_rate field rather than a hand-waved safety claim. This identity is not a substitute for incident investigation, root-cause analysis, or a medical-only versus restricted-duty classification on the log itself, but it is the number every OSHA 300A already implies next to hours worked. On this page the work runs entirely in your browser; through the API each successful lookup costs $0.002, failed validation is not charged, and nothing is stored after the response returns. That split — free interactive exploration and a priced, identical API — matches the rest of the tier-A catalog and lets you move from a classroom demo to an automated year-end summary without changing the mathematical result. Pair it with other finance and operations endpoints when you are building a small lab of free, deterministic rate helpers that stay honest about the baseline they scale.
Integration use cases
EHS dashboard fixtures
Seed tests with a deterministic dart_rate equals days_away_cases times 200000 divided by hours_worked so graders and CI never disagree on a hand-computed OSHA ratio.
Technical questions
How do I calculate the OSHA DART rate from incidents and hours?
Send finite numbers recordable_incidents and days_away_cases (both ≥ 0, DART not exceeding recordables) and hours_worked (strictly positive). The API returns dart_rate = (days_away_cases * 200000) / hours_worked, plus the companion incident_rate and the formula string.
What happens if hours worked are zero?
The task fails with invalid_input. The DART rate is days-away cases times 200000 divided by hours worked, which is undefined when hours worked are zero, so the request is not billed.
What does a DART rate calculator request cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.