HelpDatabase Reference › FTDNA_Matches2

FTDNA_Matches2 Table

The FTDNA_Matches2 table is the primary table for FTDNA Family Finder match data. Each row represents one match for one test kit — the pairing of your kit and one matched kit. It is populated when you gather your Family Finder match list, with a few columns filled in later by per-match passes (chromosome, ICW, and tree gathering).

Kit identifiers: Every row is keyed by two kit numbers. eKit1 is your kit (the kit being gathered), and eKit2 is the matched person’s kit. The pair (eKit1, eKit2) uniquely identifies a match row and is used everywhere the client joins match data to chromosome, ICW, and tree tables.

Column Reference

Identifiers & Names

ColumnTypeDescription
Idint (PK)Auto-incrementing primary key
eKit1stringYour kit number (the kit being gathered). Indexed.
eKit2stringThe matched person’s kit number. Indexed.
contactIdstringFTDNA contact identifier for the match. Stored empty during match gathering; populated later by tree gathering where available.
NamestringMatch’s full display name
MatchPersonNamestringMatch person name as reported by FTDNA (alternate name field)
PrefixstringName prefix (e.g., “Mr”, “Dr”)
FirstNamestringMatch’s first name
MiddleNamestringMatch’s middle name
LastNamestringMatch’s last name
SuffixstringName suffix (e.g., “Jr”)

DNA Data

ColumnTypeDescription
totalCMstringTotal shared centimorgans, the raw string exactly as FTDNA reports it (sharedDna). Kept as text to preserve FTDNA’s original formatting.
totalCMfdecimalThe parsed numeric version of totalCM. Produced with a numeric parse of the raw string so the value can be sorted and filtered (e.g., min/max cM thresholds). Stored alongside the string for this reason.
longestCentimorgansstringLongest shared block in centimorgans, the raw string from FTDNA (longestBlock).
longestCentimorgansfdecimalThe parsed numeric version of longestCentimorgans, stored for numeric sorting and filtering.
isxMatchstring“true”/“false” — whether this is an X-chromosome match
bucketTypestringFTDNA match bucket classification for the match
Why two columns for one value? FTDNA returns cM figures as strings. The client preserves that raw text in totalCM / longestCentimorgans, and also runs a numeric parse into the totalCMf / longestCentimorgansf decimal columns so matches can be sorted and filtered by shared cM without re-parsing strings on every query.

Y-DNA & mtDNA

ColumnTypeDescription
ydnaMarkersstringY-DNA marker count / test info for the match
mtDNAMarkersstringmtDNA marker / test info for the match
yHaplostringMatch’s Y-DNA haplogroup
mtHaplostringMatch’s mtDNA haplogroup

Relationship

ColumnTypeDescription
RelationshipstringKnown/assigned relationship. Empty by default at gather time.
strRelationshipRangestringFTDNA’s predicted relationship range for the match (relationshipRange)
strSuggestedRelationshipstringSuggested relationship. Empty by default at gather time.
strRelationshipNamestringRelationship name. Empty by default at gather time.

Trees & Links

ColumnTypeDescription
HasFamilyTreestring“true”/“false” — whether the match has a family tree
familyTreeUrlstringURL to the match’s FTDNA shared family tree (falls back to the MyHeritage tree URL when no FTDNA shared tree is present)
wikiTreeUrlstringURL to the match’s linked WikiTree profile, when present
mhTreeUrlstringURL to the match’s MyHeritage tree, when present
familySearchUrlstringFamilySearch tree URL. Placeholder for future use; not currently provided by FTDNA, stored empty.

Metadata & Other

ColumnTypeDescription
NotestringNote on the match
AboutMestringMatch’s “About Me” text from their FTDNA profile
userSurnamesstringMatch’s ancestral surnames, joined into a single “ / ”-separated string
PaternalAncestorNamestringMatch’s most-distant paternal ancestor name
MaternalAncestorNamestringMatch’s most-distant maternal ancestor name
Femalestring“true”/“false” — whether the match is female
ThirdPartystring“true”/“false” — third-party flag
ffBackstring“true”/“false” — Family Finder “back” flag. Defaults to “false”.
nRownumstringRow number / ordinal of the match within FTDNA’s result list
strRbdatestringMatch date as reported by FTDNA (matchDate)
EmailstringMatch’s email address, when available

Gather Tracking

ColumnTypeDescription
created_datestringDate the match row was created (set to the gather date, yyyy-MM-dd). Preserved from the existing row when a match is re-gathered.
icw_dateDateTimeTimestamp set when shared-match (ICW) gathering completes for this match. Used to decide which matches still need ICW gathering. Preserved across re-gathers.
icw_treeDateTimeTree-gather tracking timestamp. Reserved; not currently written by the gather code.
GF_SyncstringSync tracking flag, set to a date when the row is synced.

How It’s Populated

When you run an FTDNA Family Finder gather, the client requests your match list page by page. For each match returned, it builds an FTDNA_Matches2 row:

  1. IdentifierseKit1 is set to your kit (the kit being gathered) and eKit2 to the match’s kit.
  2. cM parsing — the raw totalCM and longestCentimorgans strings from FTDNA are kept as-is, and a numeric parse fills totalCMf and longestCentimorgansf. Matches above the configured maximum cM are skipped, and once the list drops below the configured minimum cM the gather stops (the list is returned largest-first).
  3. Boolean fields — flags such as HasFamilyTree, ThirdParty, Female, isxMatch, and ffBack are stored as the strings “true” or “false”.
  4. created_date — set to the current date (yyyy-MM-dd).

Per-match data added by later passes — chromosome segments (FTDNA_Chromo2), shared matches (FTDNA_ICW2), and tree data (FTDNA_Tree) — is stored in separate tables, joined back to this table on (eKit1, eKit2). The ICW pass also stamps icw_date on the match row.

Data Preservation Rules

Matches are written through an upsert keyed on (eKit1, eKit2). If a row for that kit pair already exists, the client deletes it and re-inserts the fresh row — but first copies forward selected fields from the old row so prior progress is not lost:

  • created_date — carried over from the existing row, so the original creation date is retained on re-gather.
  • icw_date — carried over from the existing row, so a match already processed for shared matches is not re-queued unnecessarily.

Related Tables

  • FTDNA_ICW2 — In Common With (shared matches) between two of your matches.
  • FTDNA_Chromo2 — per-match shared chromosome segments, joined on (eKit1, eKit2).
  • FTDNA_Tree — family tree individuals linked to matches.
  • FTDNA_Kit — the test kits you have added and gather for.