FTDNA_Tree Table
The FTDNA_Tree table stores family-tree individuals drawn from the linked family trees of your FTDNA matches. When a match has a public family tree, FTDNA exposes that tree as a list of people, and DNAGedcom records one row per person. A single tree therefore produces many rows, all sharing the same treeId and tree-owner kit number.
Because the data comes directly from each match’s own tree, a person can carry a wide range of detail — name, gender, birth and death information, location, biography, profile picture, ancestral surnames, relationship links to parents and spouse, haplogroups, and test flags. Most fields are stored as strings exactly as FTDNA returns them.
One row per person: A match’s tree is flattened into individual people. The same person can appear under multiple trees if several matches include that person in their own trees. Rows are de-duplicated on the combination of treeId and personKitNum, so the same tree is not stored twice.
Column Reference
Identifiers
| Column | Type | Description |
| Id | int (PK) | Auto-incrementing primary key |
| treeId | string | FTDNA’s identifier for the person within the tree. Combined with personKitNum, identifies the tree this row belongs to. |
| personKitNum | string | The tree owner’s kit number (the match whose tree this person came from) |
| personKitNumDirty | string | Raw/unprocessed form of the kit number as returned by FTDNA |
| contactId | string | FTDNA contact identifier associated with the person |
Person
| Column | Type | Description |
| person_prefix | string | Name prefix (e.g., “Dr.”, “Rev.”) |
| person_firstName | string | First (given) name |
| person_middleName | string | Middle name |
| person_lastName | string | Last (family) name |
| person_suffix | string | Name suffix (e.g., “Jr.”, “III”) |
| person_gender | string | Gender as recorded in the tree |
Birth & Death
| Column | Type | Description |
| person_birthDay | string | Day of birth |
| person_birthMonth | string | Month of birth |
| person_birthYear | string | Year of birth |
| person_birthPlace | string | Place of birth |
| person_living | string | Whether the person is marked as living |
| person_deathDay | string | Day of death |
| person_deathMonth | string | Month of death |
| person_deathYear | string | Year of death |
| person_deathPlace | string | Place of death |
Profile & Contact
| Column | Type | Description |
| person_email | string | Email address recorded for the person |
| person_location | string | Location/residence |
| person_story | string | Biographical story or notes from the tree |
| person_pictureUrl | string | URL of the person’s profile picture |
| person_newPictureId | string | FTDNA identifier for the profile picture |
| person_pictureCropX | string | Picture crop — X offset |
| person_pictureCropY | string | Picture crop — Y offset |
| person_pictureCropW | string | Picture crop — width |
| person_pictureCropH | string | Picture crop — height |
| person_hasSurnamesChanged | string | Flag indicating the person’s surname list was changed |
| person_surnames | string | Ancestral surnames associated with the person |
Ancestry
| Column | Type | Description |
| paternalAncestor | string | Paternal ancestor name (from FTDNA’s paternalAncestorName) |
| maternalAncestor | string | Maternal ancestor name (from FTDNA’s maternalAncestorName) |
Relationships
| Column | Type | Description |
| motherId | string | Tree identifier of the person’s mother |
| fatherId | string | Tree identifier of the person’s father |
| spouseId | string | Tree identifier of the person’s spouse |
| generation | string | Generation level within the tree |
| dependsOnId | string | Identifier of the person this entry depends on within the tree structure |
| duplicateOfId | string | Identifier of another person this entry is a duplicate of, when FTDNA flags one |
Haplogroups & Tests
| Column | Type | Description |
| yHaploGroup | string | Y-DNA haplogroup |
| mtHaploGroup | string | Mitochondrial (mtDNA) haplogroup |
| hasFamilyFinder | string | Whether the person has a Family Finder (autosomal) test |
| isFamilyFinderMatch | string | Whether the person is a Family Finder match |
| hasYTest | string | Whether the person has a Y-DNA test |
| isyTestMatch | string | Whether the person is a Y-DNA match |
| yTestName | string | Name of the Y-DNA test |
| hasMtTest | string | Whether the person has an mtDNA test |
| isMtTestMatch | string | Whether the person is an mtDNA match |
| mtMatchTest | string | Name/identifier of the mtDNA match test |
| isMatch | string | Whether the person corresponds to one of your DNA matches |
Flags & Other
| Column | Type | Description |
| imageFile | string | Image file reference for the person |
| notes | string | Notes recorded on the person |
| isTreeOwner | string | Whether this person is the owner of the tree |
| isFamilyPedigree | string | Whether the person is part of the family pedigree view |
| isLinked | string | Whether the person is linked to a DNA test |
| privacyLevel | string | Privacy level set on the person in the tree |
| isInspectable | string | Whether the person’s details may be inspected |
| sendLinkNotification | string | Whether a link notification should be sent |
| created_date | string | Date the row was gathered (yyyy-MM-dd) |
How It’s Populated
For each match that has a linked family tree, DNAGedcom requests that tree from FTDNA’s tree endpoint (the “get tree people” service). FTDNA returns the tree as a list of people, and the gatherer walks the list, mapping each person’s fields — name parts, gender, birth/death details, location, story, picture data, surnames, parent/spouse links, haplogroups, and test flags — into a new FTDNA_Tree row. The tree owner’s kit number is stored in personKitNum, and created_date is stamped with the gather date.
Before inserting, the application checks whether a row already exists with the same treeId and personKitNum; if so, the person is skipped, so re-gathering a tree does not create duplicates.
Related Tables
- FTDNA_Matches2 — the match list. A match’s linked-tree URL is what drives tree gathering; tree rows join back to matches by kit number.
- FTDNA_ICW2 — In Common With (shared matches) for FTDNA kits.
- FTDNA_Chromo2 — shared chromosome-browser segments between two FTDNA kits.