Generation by birth year
Type a birth year and get its generation with the years that define it: 1990 is a Millennial, part of the 1981 to 1996 cohort, also called Gen Y. Ranges follow common Pew-style cutoffs from 1883 to 2039. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Year
- 1,990
- Cohort
- Millennial
- Key
- millennial
- Start year
- 1,981
- End year
- 1,996
Marketers, product teams, educators, and researchers often need a fast answer to one simple question: which generation does a birth year belong to? This capability takes a single integer year of birth and returns the matching cohort label along with the inclusive start and end years used for that label, plus common alternate names. The boundaries follow widely cited demography conventions—Pew-style ranges for Baby Boomers through Generation Z, with standard extensions for older cohorts and Generation Alpha and Beta.
How generational year boundaries are applied
Generational labels are social constructs, not legal categories, but product and research teams still need a consistent mapping. This tool uses fixed inclusive ranges: Lost Generation 1883–1900, Greatest Generation 1901–1927, Silent Generation 1928–1945, Baby Boomer 1946–1964, Generation X 1965–1980, Millennial 1981–1996, Generation Z 1997–2012, Generation Alpha 2013–2024, and Generation Beta 2025–2039. Those cutoffs mirror common public references (especially Pew for Boomer–Gen Z) so dashboards, surveys, and CRM segments stay comparable across tools.
A birth year is matched with a simple closed-interval check: if the year falls between start and end inclusive, that cohort wins. There is no partial membership, fuzzy scoring, or age-at-today calculation—only the calendar year of birth.
What to enter and what you get back
Send a single field named year as a whole integer, for example 1990 or 2005. Years outside the defined table (before 1883 or after 2039) also fail with a clear range message instead of inventing a label. Use the key for storage and the name for display.
The capability does not estimate current age, life stage, or cultural traits—only the generation label implied by the birth year under these fixed boundaries.
Where to use it and how pricing works
Typical uses include tagging CRM contacts, splitting A/B test audiences, labeling survey respondents, building content calendars by generation, and validating demographic filters before a campaign ships. Call it once per person or once per distinct birth year when you batch-deduplicate upstream. Pair the output with your own analytics stack—SQL CASE expressions, warehouse dimensions, or marketing automation tags—by treating key and cohort as stable vocabulary rather than free-text labels that drift over time.
What you can do with it
CRM and audience tagging
Attach a stable generation key to each contact from their birth year so segments, offers, and lifecycle emails stay consistent across tools.
Survey and research coding
Code open demographic fields into Millennial, Gen Z, Boomer, and related cohorts for crosstabs without hand-maintained spreadsheet formulas.
Product and content planning
Validate filters and personas when planning features or campaigns aimed at a specific generation defined by birth-year ranges.
FAQ
Which year ranges do you use?
Inclusive ranges: Lost 1883–1900, Greatest 1901–1927, Silent 1928–1945, Baby Boomer 1946–1964, Gen X 1965–1980, Millennial 1981–1996, Gen Z 1997–2012, Alpha 2013–2024, Beta 2025–2039. Boomer–Gen Z follow common Pew-style cutoffs.
What happens if I send 1990.5 or "nineteen ninety"?
Only whole integer birth years (or integer strings like "1990") are accepted.
Does this calculate age from today's date?
No. It maps the birth year alone to a cohort table. Current age, zodiac, or life-stage estimates are out of scope and would require a date that this pure lookup deliberately ignores.
Why is 1997 Gen Z and not Millennial?
Under the fixed table used here, Millennials end in 1996 and Generation Z begins in 1997, matching widely cited public demography cutoffs so your labels align with external reports.
What generation is someone born in 1990?
A Millennial. The Millennial range here runs from 1981 to 1996 inclusive, and the result also lists common alternate names for the group, such as Gen Y and Generation Y.
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/date/generation-cohort \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"year":1990}'const res = await fetch("https://api.kit.forhosting.com/date/generation-cohort", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"year": 1990
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/date/generation-cohort",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"year": 1990
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/date/generation-cohort", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"year":1990}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"year":1990}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/date/generation-cohort", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"year": 1990
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "date.generation_cohort",
"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
Everything runs as pure local table lookup with no clocks, models, or network calls, so the same year always maps to the same cohort and your data never leaves the request path.
Input rules and what the response contains
Integer-looking strings such as "1988" are accepted and normalized to a number; fractional values like 1990.5, booleans, empty strings, and free text are rejected with invalid_input so a bad type cannot pollute a segment. On success the response echoes the normalized year, the primary cohort name (for example Millennial or Generation Z), a stable machine-friendly key (millennial, gen_z), the inclusive start_year and end_year of that cohort, and an also_known_as list of common aliases such as Gen Y or Zoomers.
Where to use it and how pricing works
On the free web page the lookup runs locally on desktop and mobile; the same function via the KIT API is billed at $0.002 per request from prepaid balance, with unit set to item so one successful mapping is one billable unit.
Technical questions
How much does the API cost?
The browser page runs locally for free. The same mapping via the API is billed at $0.002 per request from prepaid KIT balance.