How our DNA matching works
Every match on this site is found by comparing the raw DNA files you uploaded, position by position, and reporting the exact pieces of chromosome two people share. This page explains the method in one screen — and why the same two relatives can show different numbers at AncestryDNA, MyHeritage or GEDmatch.
1. What a match actually is
A raw DNA file is a long list of positions in your genome and the two alleles (A/C/G/T) you carry at each one. Matching two kits means:
- Walk both files together over the positions they both typed. Positions one file does not cover are ignored — they never break a segment.
- A shared position is one where the two people have at least one allele in common (you both carry an A, for example). A mismatch is an opposite call (AA vs GG).
- A segment is an unbroken run of shared positions. Its length is measured in centimorgans (cM), a unit of genetic distance from a recombination map — not in DNA base pairs.
- IBD2 (fully identical) is a run where both alleles match. Full siblings typically share IBD2 blocks; parent/child never do.
2. Our method, step by step
- The algorithm is the classic segment model that GEDmatch-style matching grew out of. It is deterministic: the same two files always give the same segments.
- A run needs ~200 shared positions to count (the algorithm's base threshold). Very short shared runs are ignored as coincidence.
- Up to two consecutive mismatches are tolerated (bunching, 1% of the base threshold) — they are treated as read noise and do not break the segment. A longer cluster of mismatches does break it.
- A segment also breaks at a physical gap. If consecutive shared positions are more than 1 Mb apart, the segment ends there, so a centromere or a block of positions neither chip typed is never bridged.
- No-calls count as matches. If one file simply did not read a position, that is missing data, not disagreement — so it does not break the segment.
- Distance comes from the HapMap Phase II genetic map (GRCh37 / build 37). Its per-segment cM values line up closely with MyHeritage's, chromosome by chromosome.
- Only well-supported segments count toward your shared cM. A segment counts when at least 700 positions were typed and match in both kits (called-shared SNPs) — that is real evidence from the raw data. A segment always breaks on a mismatching position, so every counted segment is real shared DNA.
- SNP-sparse cross-chip segments are shown, but not counted. When two tests use different chips (say 23andMe vs MyHeritage), the positions they both typed can be far fewer, so a real shared segment may have only 200–699 called-shared SNPs. We still find it and show it in the match list and chromosome browser, marked cross-chip, but it never adds to the shared cM, the segment count or the largest segment. This keeps your totals based on solid evidence while you can still see the extra segment. Exception: when either side is a Superkit — a merged kit built from several tests of one person — every detected segment counts and the pair is never marked cross-chip.
- A pair is listed when its largest detected segment reaches 8 cM (the MyHeritage rule), where "detected" includes cross-chip segments. A pair linked only by cross-chip segments stays in the list, shows 0 cM and is marked cross-chip only.
- SNP counts shown are raw shared counts — the number of positions both kits typed. This is the same figure GEDmatch prints.
- X is compared separately (men carry one X). X matches are shown on the X filter, not added to the autosomal total.
3. How the big platforms differ
| AncestryDNA | MyHeritage | GEDmatch | RomanyDNA | |
|---|---|---|---|---|
| Chromosome browser | No — only total %/cM | Yes | Yes | Yes |
| Listed when | Not published (total cM based) | Largest segment ≥ 8 cM | Largest segment ≥ 7 cM and ≥ 700 SNPs | Largest detected segment ≥ 8 cM |
| Segments shown from | — | 6 cM | 7 cM (6 in one-to-one) | 6 cM |
| SNP-sparse (cross-chip) segments | Not reported | Internal figures (much higher than raw) | Dropped below 700 SNPs | Shown and marked, not counted in cM (Superkit pairs always count) |
| Counted cM evidence bar | Proprietary (Timber smoothing) | Proprietary | ≥ 700 SNPs to list | ≥ 700 called-shared SNPs |
| Algorithm | Proprietary (+ Timber smoothing) | Proprietary (phasing/imputation) | Dynamic SNP threshold ~200, bunching, 500 kb gap breaks | Classic segment model, 1 Mb gap stop |
| Genetic map | Proprietary | Very close to HapMap Phase II | Their own map | HapMap Phase II |
| Database | Millions of testers | Millions of testers | Millions of uploads | Kits uploaded here only |
Thresholds above are the published/observable ones as of 2026. GEDmatch's one-to-one tool lets you change its settings; the one-to-many list uses the 7 cM / 700 SNP rule.
4. Why the same relatives show different numbers
If you compare the same two people at Ancestry, MyHeritage and GEDmatch you will get three different cM totals, segment counts and sometimes different segment boundaries. That is expected, not a mistake:
- Different genetic maps. Each company converts positions to cM with its own recombination map. The same segment can be 10% longer or shorter on one map than another.
- Different thresholds and gap rules. Companies differ in how many mismatches they tolerate, when they merge two nearby segments, and the minimum size they report. A lower SNP bar (or none) and a bridge over a coverage hole both inflate a total.
- Phasing and imputation. Some platforms statistically fill in positions you were not tested for, or split DNA into maternal/paternal copies first. That changes where segments start and stop — and inflates their SNP counts.
- Different chips. An Ancestry kit and a MyHeritage kit type different positions, so only the overlap can be compared. Cross-company matches are therefore "thinner" in SNP counts — which is exactly why our totals count only the well-supported segments, and show the rest as cross-chip.
Practical consequence: compare the largest segment, the number of segments and your tree against each other, not the absolute cM total from one site. A first cousin at ~850 cM on one site may read ~800–900 on another and still be the same relationship.
5. How to read our numbers
- Shared cM — the main closeness signal, counted from the well-supported segments only. Ranges: parent/child ≈ 3,400–3,600, full siblings ≈ 2,300–2,900, first cousins ≈ 550–1,300. These assume an outbred family.
- Largest segment — the strongest single piece of evidence; one long segment beats a pile of small ones.
- Segments — how many separate counted blocks. More, smaller blocks usually means a more distant relationship.
- Cross-chip segments — real, SNP-sparse segments from a chip mismatch. Shown so you can inspect them; treat them as supporting evidence, never as a cM total.
- IBD2 — fully identical blocks (double-shared) indicate close family or endogamy.
- Endogamy warning. In Roma and other endogamous families, cousins share more DNA than the standard ranges assume, so estimates read too close. Use the tree and triangulation to interpret them.
6. What we do not do
- We do not phase or impute your data for matching — only the DNA you actually have is compared.
- We do not report segments below 6 cM; below that level most shared runs are coincidence, not inheritance.
- We do not let SNP-sparse cross-chip segments inflate your totals: they are listed and drawn, marked cross-chip, but excluded from the cM, the segment count and the largest segment.
- We do not decide relationships from trees alone — cM totals, segment structure and your documented tree are all evidence.
Method attribution: segment detection uses the classic FF23utils segment model; genetic distances use the HapMap Phase II GRCh37 recombination map. Relationship ranges follow the widely used Shared cM Project reference tables.