'Hi {first}' went to the wrong person

The mail merge looked perfect in preview. Then it went out: Dear Watson, for Amelia Rose Watson; Dear Jr., for Dr. Watson's son who shares the suffix column; Dear Liu, for a person whose family name is Liu but whose given name is Wei — and in a Chinese-order list, that is the exact inverse of what you meant. One column of full names, split carelessly, personalized 4,000 emails wrong.

Splitting names is the task everyone assumes is trivial until the first suffix, the first two-word surname, the first comma. A space-separated split puts Jr. in the last-name column, rips van der Berg into three pieces, and files Dr. as a first name. The failures are quiet — the output still looks like a table — which is what makes them dangerous.

This splitter does the operation with the structure names actually have: honorifics and suffixes recognized and given their own columns, middle names and initials kept as middles, particles like van and de kept with the surname, Spanish two-surname and Chinese family-first presets applied per column, and comma-order (Last, First) detected per value. Everything it cannot confidently classify, it flags instead of guessing.

One honest caveat before the details, because it shapes expectations: perfect name splitting is not a solved problem in any language, and anyone claiming otherwise has not met enough names. The tool is a structured parser with a flagging instinct, not a mind reader — the design goal is that every split is either right or visibly questionable, never silently wrong.

Splitting names in five steps

The splitter is above this text. The standard run on a contact export:

  1. Load the CSV

    Paste or pick the file; the parser handles RFC 4180 quoting, which matters here because full names containing commas — Smith, John — are exactly the values that need quotes to survive CSV at all.

  2. Choose the name column

    Pick the column holding full names. The preview shows a sample of parsed results so you can confirm the interpretation before committing to the whole file.

  3. Set the surname preset

    Default (English convention) suits most lists. Spanish moves the boundary for two surnames; Chinese assumes family-name-first; the presets apply to the column as a whole.

  4. Choose the output shape

    Add prefix and suffix columns (recommended) or fold them into first/last; keep middles as their own column or drop them; export the whole original CSV with the new columns appended, or just the split columns alone.

  5. Review flags, then export

    Rows the parser could not classify confidently — single-token names, four-plus tokens with no structure, values with no spaces but mixed scripts — are flagged for review. Export as CSV, with flags included or resolved first.

The preview-then-export rhythm exists because name columns are opinionated: a glance at twenty parsed rows tells you whether the preset matches your data's origin before 4,000 rows bake in the wrong assumption.

The parsing model: honorifics, middles, suffixes, presets

The parser treats a full name as an ordered sequence of tokens and classifies each one before deciding boundaries. The classification vocabulary, in processing order: a leading honorific (Mr., Mrs., Ms., Mx., Dr., Prof., Rev., Sir, Dame, Hon., Fr., Capt., and more) becomes the prefix. A trailing suffix (Jr., Sr., II, III, IV, V, MD, PhD, Esq., DDS, DVM, RN, CPA, JD) becomes the suffix. Recognized surname particles (van, van der, de, den, ter, della, del, von, bin, al-) glue to the surname that follows them. Whatever remains is first, middle(s), last — with the middle holding everything between.

The default boundary rule, stated precisely: with the prefix and suffix stripped, the first remaining token is the first name, the last remaining token is the last name, and everything between is the middle. Dr. Amelia Rose Watson Jr. strips Dr. and Jr., leaving Amelia Rose Watson — first Amelia, middle Rose, last Watson. Robert E. Lee is first Robert, middle E., last Lee. The rule's virtue is transparency: you can predict every output by reading the name aloud.

Presets move the boundary for naming systems that structure differently. Spanish names carry two surnames, paternal first, so the preset assigns the final two tokens to the surname: María Fernández Gil → first María, last Fernández Gil. The convention is real and consequential — Spaniards are formally addressed by the first surname (Señora Fernández), and indexing systems sort on it. Chinese preset flips the order outright: family name first, given name second, so Liu Wei → first Wei, last Liu, and 王力 parses the same way token by token. Both presets are column-level decisions, because name order is a property of the list's origin, not of individual rows.

Comma-order detection is per value: a cell containing a comma is parsed as Last, Rest — Smith, John A. yields last Smith, first John, middle A. Per-cell rather than per-column matters here more than anywhere else, because merged contact lists mix conventions row by row, and a column-level assumption would misparse whichever half is the minority.

Worked example: ten names, split cleanly

Ten names chosen to exercise every rule the parser has. Read them against the mechanisms above — each row demonstrates one behavior.

Full namePrefixFirstMiddleLastSuffix
Dr. Amelia Rose Watson Jr.Dr.AmeliaRoseWatsonJr.
Robert E. LeeRobertE.Lee
Anna van der BergAnnavan der Berg
Prof. Charles Xavier PhDProf.CharlesXavierPhD
Mary-Jane Louise Watson-ParkerMary-JaneLouiseWatson-Parker
Smith, John A.JohnA.Smith
CherCher
José María MorelosJoséMaríaMorelos
Rev. Martin Luther King Jr.Rev.MartinLutherKingJr.
Mx. Alex QuinnMx.AlexQuinn
Ten names, every rule: honorifics, suffixes, particles, hyphenation, comma order, mononyms.

The rows worth a second look: hyphenated names (Mary-Jane, Watson-Parker) stay whole because hyphens join tokens into one unit — splitting on every punctuation mark would shred married and double-barreled surnames. José María Morelos keeps María as a middle, correct for the many Spanish given names that pair a male and female name religiously. And Cher is flagged, not forced — an empty last name plus a report entry, because mononyms exist and inventing structure would be worse than admitting its absence.

A CSV round trip with the Spanish preset

Input

full_name,department
María Fernández Gil,Sales
Juan García López,Ops
Carmen Ruiz Vega,Legal

Preset: Spanish (two surnames).

Output

first_name,middle_name,last_name,department
María,,Fernández Gil,Sales
Juan,,García López,Ops
Carmen,,Ruiz Vega,Legal

Report: 3 rows split with the Spanish preset; 0 flagged. In all three, the paternal surname (Fernández, García, Ruiz) starts the last-name field — the part mail merges sort on.

Run the same three rows without the preset and the last names would be Gil, López, Vega — the maternal surnames, which appear in neither Spanish alphabetization nor formal address. The preset is the difference between correctly sorted and confidently wrong, and it is why the tool asks about your data's origin rather than pretending one boundary fits every column.

Spanish, Chinese, and Dutch names: the presets explained

Naming systems differ in where the family name sits and how many words it occupies, and the two presets plus particle handling cover the systems that appear most in international contact lists. The Spanish preset exists because two surnames are the rule, not the exception, in Spain and much of Latin America: the first surname is paternal, the second maternal, and formal usage plus directory sorting key on the first one. Splitting at the final token — the no-preset behavior — hands your mail merge the maternal surname, which is precisely the one Spanish speakers use least when being addressed.

The Chinese preset exists because the order is inverted: family name first, given name second, one syllable each in the native script, romanized forms following the same order. Liu Wei means family Liu, given Wei. The catch the preset cannot solve: romanized names in Westernized lists are frequently already reordered — Wei Liu on an English-language business card is the same person with the parts flipped. So the preset is a statement about your column's origin, applied when the list came from a Chinese-language source. For a mixed column, split, review the flags, and hand-check a sample against your memory of the contacts — which is the same advice a professional data cleaner would give, because no tool can know which order a human chose while typing.

Particles need no preset because they announce themselves: van, der, de, den, ter, von, zu, della, del, bin, ibn, al-. Anna van der Berg keeps van der Berg whole, in line with how the Dutch treat the particle when it travels with the name (the famous alphabetization subtlety — van der Berg sorts under B in the Netherlands and under V in Belgium — lives downstream of your split and is your spreadsheet's problem, not the splitter's). Particles are recognized case-insensitively, though lowercase particles are the norm and capitalized mid-name words like Van in a Dutch-American name follow the same rule anyway.

Edge cases: mononyms, initials, commas, and chaos

The cases that make name splitting a craft rather than a split() call:

  • Mononyms: Cher, Madonna, Plato, and single-token names common in Brazilian and Indonesian usage. First name only, last name empty, row flagged. The alternative — repeating the token in both columns — poisons every downstream de-duplication and gender-guessing heuristic.
  • All-initials names: J. R. R. Tolkien parses with J. R. R. as the first-plus-middles (Tolkien last); the parser treats consecutive dotted tokens as initials rather than a strange four-word surname, and the flag count stays zero.
  • Four-token ambiguity: James Robert Anthony Cruz is first James, middles Robert Anthony, last Cruz by the default rule — defensible, but the report notes the count of multi-token middles so a human can spot lists where the second token is actually a compound surname.
  • The two-comma cell: Smith, John, Jr. — an address-book export artifact — parses as last Smith, first John, suffix Jr. after the second comma's contents are tested against the suffix list.
  • Titles that are not honorifics: President as a leading token is not in the honorific list, so President James Marshall splits with President as the first name — flagged, because leading unrecognized capitalized tokens before a plausible name pattern are worth a human glance.
  • Extra whitespace: double spaces, tabs smuggled in from spreadsheets, and trailing whitespace are normalized before tokenization; names split on runs of whitespace, not single spaces, so the parse is immune to copy-paste damage.
  • Quoted commas: the CSV layer must unquote "Smith, John" before the name layer sees one comma — which is why the RFC 4180 parse happens first and the name parse second. Tools that split the raw text on commas destroy these rows invisibly.

Mail-merge season: who splits names

The splitter's regulars, and what they are usually preparing:

  • Marketing teams preparing mail merges and email personalization, where one column of full names must become salutation-grade first names — the highest-volume use, and the one where a wrong split sends thousands of messages.
  • HR and payroll administrators importing into systems that require separate legal-name fields, where the target schema refuses to accept a single full-name column.
  • CRM migration projects consolidating contacts from multiple sources, where normalization is the price of deduplication — you cannot match records until first and last columns exist.
  • Teachers and school administrators preparing rosters, permission forms and parent communication from hand-typed lists.
  • Event organizers printing badges and place cards, where sorting by surname requires the surname to be its own field.
  • Genealogy hobbyists cleaning exported family trees — arguably the toughest audience, since historical records contain every naming convention simultaneously.

The common thread is a downstream system with a first-name field and a last-name field, and a source that has neither. The split is the gate between them, and its quality ceiling is set by how well the column's naming conventions match a preset. That is why the tool asks the origin question up front.

Text-to-columns versus this tool

The spreadsheet-native answer is text-to-columns on spaces, and it is worth comparing honestly, because for clean English lists it works:

BehaviorText-to-columns on spaceThis splitter
Dr. Amelia Rose Watson Jr.Dr. / Amelia / Rose / Watson / Jr. across five columnsPrefix / first / middle / last / suffix in five labeled columns
Anna van der BergAnna / van / der / Berg across four columnsAnna / van der Berg in two
Smith, JohnSmith / John — wrong direction for a given-name-first mergeCorrect first/last orientation, detected per cell
CherOne column, rest empty, no commentFlagged as a mononym
Fixed column countYes — every row gets the same column count, overflowing into extra columnsNo — semantic columns only; rows without middles have empty middles
Undo/re-runMulti-step wizard per filePaste, preset, export
Text-to-columns splits characters; this splits names. The difference is every row containing structure.

The fixed-column-count row is the quiet killer for the spreadsheet route: three-token names and five-token names cannot share a fixed split, so the wizard's output is a matrix of misplaced fragments that needs manual reassembly — at which point the time savings were fictional. The semantic route costs one preset decision and produces columns that mean what their headers say.

Completing the contact-prep chain: extract or reorder name columns with the CSV Column Extractor, clean the email column beside the names with the Email List Cleaner, and normalize the phone column with the Phone Number Normalizer. Three passes, one importable file.

Names stay in your browser

A column of full names is a roster — employees, students, patients, donors — and rosters are personal data under GDPR and most modern privacy law. The splitter runs entirely client-side: parsing, presets, flagging and CSV export are all local JavaScript, with no upload endpoint involved anywhere. Your name list never becomes a file on somebody else's server, which is both the privacy position and the speed position — a 50,000-name column splits before you finish reaching for the mouse.

The same property makes it deployable in the locked-down environments where name lists actually live: HR machines with restricted browsing, hospital workstations, school admin systems. If the page loads, the tool works — offline included.

FAQ

The questions that arrive from people mid-mail-merge.

How does the splitter handle middle names and initials?

Everything between the first token and the last token is treated as the middle by default: Robert E. Lee gives first Robert, middle E., last Lee. A middle initial with or without a period parses identically, and multi-word middles (James Robert Anthony Cruz) come through whole. If you need finer behavior — initials normalized, middles dropped — the options cover it.

What does it do with Spanish names like María Fernández Gil?

Spanish names carry two surnames — paternal then maternal — so the family name is two words. With the Spanish preset enabled, María Fernández Gil splits as first María, last Fernández Gil. Without the preset, the tool would give last Gil, which is the surname Spaniards use least. The preset simply moves the boundary one token to the left.

How does it handle Chinese names where the family name comes first?

With the Chinese preset, family-name-first order is assumed: Liu Wei splits as first Wei, last Liu. The preset applies to the column, not to individual rows, so run it on the column that genuinely holds Chinese-order names — and note that romanized Chinese names in Western contexts are often already flipped, so the preset is a choice you make about your data's origin, not a detection the tool performs.

Can it split names written as Last, First?

Yes — comma format is detected per value. Smith, John A. parses as last Smith, first John, middle A., without affecting the rows around it that are written given-name-first. Comma detection is per-cell because spreadsheets routinely mix both orders after merges from different sources.

What happens with a single-token name like Cher or Madonna?

It becomes a first name with an empty last name, and the row is flagged in the report. Mononyms are real — single-token names appear in Brazilian, Indonesian, Icelandic and stage-name contexts — and inventing a surname would be worse than leaving one blank. The flag lets you decide what belongs in the last-name column downstream.

Why did van der Berg stay in one column instead of splitting?

Dutch and other European surnames include particles — van, van der, de, den, ter, della, del — that belong to the surname. The splitter keeps recognized particles attached to the surname: Anna van der Berg gives first Anna, last van der Berg. This is also how Dutch alphabetization treats the full particle form.

Does it work with accented and non-Latin scripts?

Yes. The parser operates on Unicode text, so José, Zoë, Володимир and 王力 all split on whitespace correctly. Honorific and suffix detection has English keyword lists; other scripts fall back to position-based splitting, which is the correct behavior for languages without those conventions.

Is my list of names uploaded anywhere?

No. Splitting runs entirely in your browser as JavaScript — parsing, preset logic and CSV export included. Names are personal data under most privacy regimes, and a name list is exactly the file that should not be shipped to a server for a transformation your own machine performs instantly.