The Ancestry_matchGroups table is the primary table for A* DNA match data. Each row represents one match for one test kit. It is populated at different stages of the gather process.
Fields are populated at four different levels during gathering:
| Level | When It Happens | Fields Populated |
|---|---|---|
| Match List Batch — every page of matches |
Every page load during match gathering (50 matches per page) | testGuid, matchGuid, matchTestDisplayName, matchTestAdminDisplayName, sharedCentimorgans, sharedSegment, meiosisValue, starred, viewed, note, userPhoto, parentCluster, paternal, maternal, subjectGender, created_date, groupName (from kinship codes) |
| Match List — Relationship Batch — every page of matches |
Every page load (covers ~60% of matches; close relatives excluded since they already have kinship codes) | groupName, paternal, maternal, percentDna, plus detailed predictions stored in Ancestry_RelationshipPredictions table |
| Match Compare Per-match — individual match pages |
When visiting individual match comparison pages (requires tree or ICW gathering to be enabled) | totalSharedCentimorgans, longestSegmentCentimorgans, fetchedSegmentInfo, matchTreeNodeCount, matchTreeIsPrivate, matchTreeId, treeId |
| Match Compare — Origins Per-match — individual match pages |
When visiting individual match comparison pages | Ethnicity comparison data (shared ethnicity regions between you and the match) and shared genetic communities/journeys. Stored in separate ethnicity tables. |
| Shared Matches Per-match — ICW pages |
When ICW gathering is enabled, visits each match’s shared matches page | Data stored in the Ancestry_ICW table (not in matchGroups) |
sharedCentimorgans and totalSharedCentimorgans are different values. The “total” includes small DNA segments below A*’s reporting threshold and is typically higher. About 77% of matches show a difference between these two values.| Column | Type | Source | Description |
|---|---|---|---|
| Id | int (PK) | Auto | Auto-incrementing primary key |
| testGuid | string | Match List | The test kit GUID (your kit) |
| matchGuid | string | Match List | The matched person’s GUID |
| matchTestDisplayName | string | Match List | Match’s display name |
| matchTestAdminDisplayName | string | Match List | Match’s admin display name |
| matchTestAdminUcdmId | string | Match List | Match admin’s user ID |
| loginUsername | string | App | DNAGedcom username who gathered this data |
| Column | Type | Source | Description |
|---|---|---|---|
| sharedCentimorgans | decimal | Match List | Shared cM (A*’s reported value, excludes small segments) |
| totalSharedCentimorgans | decimal | Match Compare | Total shared cM including small segments. Always ≥ sharedCentimorgans. Only populated when compare pages are visited. |
| longestSegmentCentimorgans | decimal | Match Compare | Longest shared DNA segment in cM. Only populated when compare pages are visited. |
| sharedSegment | int | Match List | Number of shared DNA segments |
| meiosisValue | int | Match List | Number of meiotic events (genetic distance) |
| confidence | float | Legacy | Match confidence (0–1 scale). No longer populated for new data; preserved for existing records. |
| percentDna | int | Match List — Relationship | Percentage of DNA shared (integer) |
| fetchedSegmentInfo | bool | Match Compare | True if per-match segment data has been fetched via compare page visit. Indicates totalSharedCentimorgans and longestSegmentCentimorgans are populated. |
| Column | Type | Source | Description |
|---|---|---|---|
| groupName | string | Match List + Relationship | Predicted relationship label (e.g., “2nd cousin 1x removed”, “niece”). Close relatives get this from kinship code translation at the Match List level; distant relatives from the Relationship data. |
| paternal | bool | Match List + Relationship | True if match is on the paternal side |
| maternal | bool | Match List + Relationship | True if match is on the maternal side |
| parentCluster | string | Match List | Parent cluster assignment code (e.g., “both”, “p1”, “p2”) |
| subjectGender | string | Match List | Match’s gender (“M” or “F”) |
| Column | Type | Source | Description |
|---|---|---|---|
| starred | string | Match List | “True” if match is starred on A* |
| viewed | string | Match List | “True” if match has been viewed on A* |
| note | string | Match List | User-entered note on A* |
| userPhoto | string | Match List | URL to match’s profile photo |
| hasHint | string | Match List | Whether match has an A* hint |
| lastLoggedInDate | string | Match List | Match’s last login date |
| Column | Type | Source | Description |
|---|---|---|---|
| matchTreeNodeCount | int | Match Compare | Number of people in match’s tree |
| matchTreeIsPrivate | string | Match Compare | Whether match’s tree is private |
| matchTreeId | string | Match Compare | Match’s tree ID |
| treeId | string | Match Compare | User’s tree ID |
| Column | Type | Source | Description |
|---|---|---|---|
| created_date | string | Match List | When the match record was created (A*’s timestamp) |
| matchRunDate | string | App | When match detail data was last gathered |
| icwRunDate | string | App | When ICW data was last gathered for this match |
| treeRunDate | string | App | When tree data was last gathered for this match |
| sync | string | App | Sync status flag |
When you start an A* gather, the browser navigates to the match list. For each page of 50 matches, the following data is captured:
groupName. Close relatives (~60% of matches) have kinship codes.groupName with human-readable labels like “2nd cousin 1x removed”, plus parentSide and percentDna. Detailed prediction probabilities are stored in the Ancestry_RelationshipPredictions table.This process repeats for each page of matches.
If tree gathering or ICW gathering is enabled, the browser visits individual match comparison pages. Each visit captures:
totalSharedCentimorgans (includes small segments), longestSegmentCentimorgans, and sets fetchedSegmentInfo = true.Ancestry_matchTrees and Ancestry_TreeData tables).AncestryAncestorCouple table).totalSharedCentimorgans, longestSegmentCentimorgans, and fetchedSegmentInfo will remain at their default values (0 / false) until a tree or ICW gather visits each match’s compare page. Origins data will also not be captured.If ICW gathering is enabled, the browser visits each match’s shared matches page. This captures which other matches you share in common with this match, stored in the Ancestry_ICW table.
When re-gathering, the application never overwrites good data with blank or zero values: