Tree age calculator
A northern red oak 24 inches across at breast height with a growth factor of 4 is about 96 years old: the calculator multiplies trunk diameter by the species growth factor, no core sample needed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Diameter
- 24
- Growth factor
- 4
- Diameter in
- 24 in
- Age (years)
- 96
- Age rounded
- 96
A standing tree does not wear a planted year on its bark, yet people still need a defensible age when they write a heritage nomination, plan a removal, or teach how foresters estimate years without cutting a core. This tree age calculator applies the published diameter-at-breast-height method: measure the trunk at 4.5 feet (1.37 m) above the ground, convert centimetres to inches when needed, and multiply by the species growth factor from an arboricultural table.
How trunk diameter and the species growth factor become an age
A living tree does not display a birth year, so arborists, urban foresters, and landowners who cannot take an increment core still need a repeatable way to turn a tape measurement into years.
The method this calculator implements is the diameter-at-breast-height growth-factor identity used by cooperative-extension leaflets and International Society of Arboriculture teaching notes: measure the trunk diameter at 4.5 feet, or 1.37 metres, above the ground — breast height on level ground — convert that diameter into inches if you measured in centimetres, and multiply by the published species growth factor.
Fast-growing shade trees such as silver maple or pin oak often carry a factor near three; medium species such as northern red oak sit near four; slower trees such as white oak, sugar maple, or flowering dogwood sit near five to seven. The product is an estimated age in years, not a ring count from a bored core.
Breast height matters because the flare at the root collar inflates diameter and would overstate age if you measured at the soil line; on a slope, convention is to measure from the uphill side. This page does not pick a species for you and does not ship a hidden catalogue: you supply the growth factor from the table you trust, and the engine performs the multiplication after a deterministic unit conversion.
Treat the figure as a planning estimate for heritage nominations, classroom worksheets, and removal discussions, not as a substitute for a core, a planted date, or a consulting arborist who can see decay, suppression, and multi-stem form. The response also reports the diameter converted to inches and a nearest-year rounding so a quote sheet can show both the exact product and the whole number people actually say out loud.
Where a tree-age estimate earns its keep
Municipal urban-forestry desks need a repeatable year figure when a resident asks how old the street tree is and no planting card exists, so staff who think in decades can place the stem on a maintenance ladder without sending a crew with an increment borer. Landscape software, classroom worksheets, and contractor takeoffs can call the same parse module from a form or from a batch job without standing up a forestry suite.
Re-check the growth factor if the species is only a guess; swapping a factor of three for a factor of five moves a twenty-four-inch trunk from seventy-two years to one hundred twenty. Pair the number with condition, crown class, and site history rather than using years alone to decide removal.
What you can do with it
Estimate a yard tree's age from a tape measurement
Measure diameter at 4.5 feet, look up the species growth factor, and read the estimated age in years for a homeowner or classroom worksheet.
Support heritage-tree and removal paperwork
Municipal and consulting desks map a recorded DBH and a published factor to a repeatable year figure when no planting card exists.
FAQ
How do I estimate a tree's age from its trunk diameter?
Measure diameter at breast height (4.5 ft / 1.37 m), convert to inches if you measured in centimetres, and multiply by the species growth factor.
What formula does the tree age calculator use?
Diameter in centimetres is divided by 2.54 first because published growth factors assume inches.
What happens if the diameter is zero, negative, or not a number?
Diameter must be a finite positive number greater than zero. Missing, NaN, infinite, or non-numeric values are rejected and are not billed.
Where do I get the species growth factor?
Use a published arboricultural or cooperative-extension table for the species. Typical values run from about 2 for very fast growers to about 7 for slow trees such as dogwood. This tool does not pick a species for you.
Why measure the trunk at breast height and not at the ground?
Because the flare at the root collar makes the trunk wider near the soil and would overstate the age. Measure at 4.5 feet, or 1.37 metres, above the ground, and from the uphill side on a slope.
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/bio/tree-age \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"diameter":24,"growth_factor":4}'const res = await fetch("https://api.kit.forhosting.com/bio/tree-age", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"diameter": 24,
"growth_factor": 4
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/bio/tree-age",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"diameter": 24,
"growth_factor": 4
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/bio/tree-age", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"diameter":24,"growth_factor":4}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"diameter":24,"growth_factor":4}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/bio/tree-age", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"diameter": 24,
"growth_factor": 4
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "bio.tree_age",
"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
Diameter must be a finite positive number; zero, a negative value, a missing field, or a non-numeric token fails with invalid_input and is not billed. Successful API calls use prepaid KIT balance at $0.002 per item.
Input contract, units, and validation errors
Both must be finite numbers strictly greater than zero. Optional unit is in or cm and defaults to inches, which is the unit published growth-factor tables assume. A twenty-four-inch northern red oak with growth factor four returns ninety-six years; twenty centimetres with growth factor five is first converted to inches and then multiplied. Fractional diameters and factors are allowed so a 18.5-inch trunk is not forced to an integer first. POST a JSON body with two required fields: diameter, the trunk diameter at breast height, and growth_factor, the species multiplier from your chosen table. Diameter may arrive under the aliases dbh, trunk_diameter, d, or dia; growth_factor may arrive as factor, gf, growth, or species_factor. Zero, a negative value, a missing field, an empty string, NaN, plus or minus infinity, or a non-numeric token fails with invalid_input naming the field and stating that a positive number is required. Those failures are not billed. When unit is cm the engine divides by 2.54, the exact international centimetre-per-inch definition, before forming the product, and the response still echoes the diameter you typed plus the normalised diameter_in used in the formula. Pair the response with your own sentence if you want copy such as this oak is about ninety-six years old; this endpoint returns the numbers and the formula string, not a paragraph of marketing prose. Successful API calls use prepaid KIT balance at the published $0.002 base price per item.
Where a tree-age estimate earns its keep
Do not use the figure as a legal proof of planting date, and do not treat a multi-stem clump as one diameter: measure the largest stem or apply your agency's multi-stem rule before you multiply. This endpoint does not read a planting record, does not use the system clock, and does not diagnose disease or structural defect.
Integration use cases
Power a tree-age widget or batch job
Call the same parse module from a page or a spreadsheet so every trunk of a given diameter and factor receives the same age.
Technical questions
What does the tree age calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.