Randomly

Names

Sampling baby names without pretending the SSA list is the world

Bipul Kumar 7 min
Sampling baby names without pretending the SSA list is the world
On this page 0%

SSA publishes baby-name files every year. They are popularity tables for Social Security card applications, not a census of every child on Earth. I still love them. They are one of the cleanest public datasets we have. The baby names tool samples that world. It does not rank your future kid. It does not know São Paulo.

This post is what the files contain, how gender is split in that data, why sampling is not the same as “most popular,” and how that fits the rest of Randomly’s catalogs in Randomly datasets.

SSA national baby-name table with columns for name, sex, and count
Name, sex code, count. National files. A popularity list, not a global registry.

What SSA actually publishes

Each year SSA dumps national totals and state totals for given names that appear at least five times in a sex category. The five-count rule is privacy. Rare names are omitted. If you are hunting for a unique spelling, the file will lie by absence. That is the point of the threshold.

Columns are simple: name, sex, count. Sex is M or F in the national files. There is no nonbinary column. There is no ethnicity column. There is no “this spelling is a variant of that name.” Olivia and Oliviya are different rows if both clear the threshold. People argue about merging. I do not merge. The upstream file did not.

State files are a different grain. A name can be common nationally and rare in Wyoming. Our sampler is honest about which slice we published. If the page says national, do not read it as your county.

Gender split

SSA’s M/F split follows the sex recorded on the Social Security application, historically a binary form. It is not a statement about how a person lives. It is not a good gender-studies dataset. It is a good “how did the form get filled” dataset. When the tool lets you pick a side, it filters that column. When you pick any, it samples the mixed table. Mixed is not “unisex names.” Mixed is both piles in one draw, so you will get more of whatever pile is larger that year.

Unisex is a research project (names with substantial counts on both sides). I have not shipped a proper unisex filter because defining “substantial” is a fight. If I used a 40/60 band, someone would want 30/70. If you need that, take the SSA files and do it. Our browser draw is a sample, not a paper.

Do not use these tables to guess a stranger’s gender from a first name. Error rates are ugly in the tails, and the ethics are worse than the error rates. The tool is for prompts, characters, and test users. See PII-safe test data if those test users sit next to fake SSNs.

Two stacks of name tokens labeled F and M with different heights
Filtering on M or F is a column filter. It is not a personality filter.

Sampling versus ranking

A rank list says Liam was #1. A uniform sample over distinct names treats Liam like Kestrel (if Kestrel cleared the threshold). A sample weighted by count treats Liam like a magnet. Those are different buttons. I want the UI to say which one you are in. Weighted feels like “a random American baby that year.” Uniform-over-names feels like “a random name from the list of names that appeared.” Writers often want the second. Demographers want the first. Mixing them is how a blog post claims we said the most common US name is something obscure.

Our dataset API caps how many rows you get. You never download the full year in the page. That is the same Worker pattern as cities: shards in R2, current version in D1, a handful of records out. Details in the datasets post. If you need the real rank table, SSA’s site still hosts the ZIP.

Seeds make a draw repeatable for a given version. Change the published year, and the seed points at a different array. QA should pin the version string in the bug, not just the seed.

Not global

These are US Social Security card names. Immigration, transliteration, and who applies for a number all bias the table. A popular name in another country may be absent. A US-popular name may be rare elsewhere. The American names tools sit in the same family: US-flavored, labeled as such. If I ever add another country’s official file, it will be a different slug, not a silent mix-in.

Unicode in names is limited in SSA files. You will not get a full global grapheme party. If you need international given names, this is the wrong catalog. Do not scrape us to pretend otherwise.

Baby name generator showing a short sampled list and a US-only note
A sample for a story prompt. The ZIP still lives at SSA if you need ranks.

How I use it

Character names for fiction. Fake users in a demo. Icebreakers. I do not use it to name a real child unless I already liked the name; a sampler is not an oracle. I also do not pair a sampled rare name with a real last name from a coworker. Mix synthetic with synthetic.

If you need first plus last, use the American names flow rather than gluing two independent “random words.” Joint distributions are a luxury we may not have. Independent draws will invent combinations that sound like a witness protection program. Sometimes that is the joke. Sometimes it is a bad demo.

Spelling traps

McCormick versus Mccormick, hyphenated given names, spaces. SSA formatting is their formatting. We do not “fix” it. If a name is all caps in an old extract, that is a pipeline bug we should normalize at import, not in the browser. Normalization belongs in the adapter, with tests, so every shard agrees.

Profanity and unfortunate strings sometimes clear the five-count rule. I am not building a moral filter that pretends the file is a kindergarten wall. If a generator is used in a classroom, a teacher should preview. That is a product context, not a reason to silently drop rows and then disagree with SSA totals.

A 2024 file is not a 1994 file. Names move. If you sample “current” and then write a story set in 1960, you will sprinkle names that feel wrong. I would rather we label the version as a year than pretend the table is timeless. When we publish a new SSA extract, the Worker points at a new prefix. Old draws do not update. Your saved seed from last spring may now resolve to a different row. That is versioning, not a ghost.

Popularity is not quality. A high count means many applications, not a better name. A low count means fewer applications, not a worse one. The sampler has no taste. If you want taste, ask a human who will have to hear the name at a playground.

Surnames are a different SSA/Census family. Gluing a sampled given name to a sampled surname is independent draws. Fine for a fake user. Odd for a specific ethnicity you did not model. Do not build a “realistic neighborhood” from two independent lists and then present it as demography. For test users, see American names and keep the label US-ish.

Frequently asked questions

Why is my kid’s name missing?

Under five applications in that sex/year, or a different spelling, or not a US SSA file. Absence is not a judgment.

Is the sample the most popular names?

Only if we weighted by count and you got lucky. Uniform sampling over names is almost the opposite of a top-10 list.

Can I use this as a world name generator?

No. It is US SSA popularity data. Label it.

Do you store the names I generate?

The draw is an API sample, not a baby registry. See privacy. For how catalogs are stored on our side, read datasets.