MH_Match Table
The MH_Match table is the primary table for MyHeritage DNA match data. Each row represents one DNA match for one of your test kits — the matched person’s identifiers, shared-DNA totals, tree summary, biographical details, and per-stage gather timestamps.
Gathering status: MyHeritage gathering is currently unavailable in the Client and is expected to return in a future update. This page documents the schema as it exists so you can work with data already in your database. Columns that the current code does not assign are noted as such below.
Match GUID Structure
Every MyHeritage match has a long guid in the form dnamatch-D-[testid]-D-[matchid] — the “D-” prefixes are part of the IDs themselves. The Client splits this string into two halves: the testid (your kit’s portion) and the matchid (the matched person’s portion). These two derived columns are what the rest of the MyHeritage tables join against.
Column Reference
Identifiers
| Column | Type | Description |
| Id | int (PK) | Auto-incrementing primary key |
| kitId | int | The DNA_Kits row id of your kit that this match belongs to |
| guid | string | The full match GUID (dnamatch-D-[testid]-D-[matchid]). Unique index. |
| testid | string | Your kit’s portion of the GUID (begins with “D-”), parsed from guid. Indexed. |
| matchid | string | The matched person’s portion of the GUID (begins with “D-”), parsed from guid. Indexed. |
| name | string | Match’s full display name |
| first_name | string | Match’s first name (set to “<private>” when the name is private) |
| last_name | string | Match’s last name (derived from the full name with the first name removed) |
| creatorid | string | ID of the tree/site creator on MyHeritage |
| contact | string | Contact identifier. Not assigned by the current gather code; reserved. |
| manager | string | Name of the tree/site creator (kit manager) |
| contact_manager | string | Tree/site creator ID (same source as creatorid) |
Shared DNA
| Column | Type | Description |
| totalCM | decimal | Total length of shared segments in centimorgans |
| percent_shared | decimal | Percentage of shared DNA between you and the match |
| num_segments | int | Number of shared DNA segments |
| largestCM | decimal | Length of the largest shared segment in centimorgans |
Tree Summary
| Column | Type | Description |
| has_tree | bool | True if the match has a tree (tree size > 0 or a tree URL is present) |
| tree_size | int | Number of individuals in the match’s tree |
| tree_url | string | URL of the match’s tree. Indexed; joins to MH_Tree.treeurl. |
| person_url | string | Link to the match’s individual node within their pedigree tree |
| smart_matches | int | SmartMatches count. The current code always stores 0. |
| shared_surnames | string | Comma-joined list of common-ancestor surnames reported for the match |
| surnames | string | Match surnames. The current code stores an empty string. |
Biographical
| Column | Type | Description |
| age | string | Age or age group of the match (years if available, otherwise a group label) |
| birth_place | string | Birth place, from the match’s associated individual |
| gender | string | Match’s gender |
| country | string | Match’s country (falls back to the tree creator’s country when blank) |
| status | string | Match status. Not assigned by the current gather code; reserved. |
| estimated_relationship | string | Estimated/refined relationship to you (e.g. “2nd–3rd cousin”) |
| notes | string | Free-text notes. The current code stores an empty string. |
Gather Tracking
| Column | Type | Description |
| CreatedDate | string | Record creation date. Preserved across re-gathers; not assigned on insert by the current code. |
| icwRunDate | string | Date In-Common-With (shared matches) data was last gathered for this match |
| icwcMlow | decimal | Lowest shared-cM threshold used during the ICW run for this match |
| triagRunDate | string | Date triangulation data was last gathered for this match |
| treeRunDate | string | Date tree data was last gathered for this match |
| chromoRunDate | string | Date chromosome/segment data was last gathered for this match |
| gmUploadDate | string | Date the match was uploaded to GEDmatch. Not assigned by the current gather code; reserved. |
| match_detail_url | string | MyHeritage link to the match detail page |
| GF_Sync | string | GedcomFriends sync timestamp; set when the row has been synced. |
How It’s Populated
Rows are written by AddMH_Match, keyed on guid:
- Match list gather — iterates each match returned by MyHeritage, parses the
guid into testid and matchid, and fills the identifier, shared-DNA, tree-summary, and biographical columns. Name data is taken in priority order from the member, associated individual, then submitter records.
- Upsert behavior — if a row with the same
guid already exists, it is updated in place. The existing CreatedDate, icwRunDate, icwcMlow, treeRunDate, chromoRunDate, and triagRunDate values are carried forward so later gather stages are not lost.
- Run-date stamps — the per-stage timestamps (
icwRunDate, chromoRunDate, treeRunDate, triagRunDate, icwcMlow) are set by dedicated update routines as each follow-on gather stage completes for the match.
Related Tables
- MH_ICW — In-Common-With pairs, joined on
matchid via id1/id2.
- MH_Chromo — shared chromosome segments, joined on
testid/matchid via guid1/guid2.
- MH_Triangulate — triangulated segments for a kit and a pair of matches.
- MH_Tree — tree metadata, joined on
tree_url = treeurl.
- MH_Ancestors — tree individuals, joined through
MH_Tree.
- DNA_Kits — the kit referenced by
kitId.