How to Check Your Own MTHFR Genotype from Raw DNA Data
By the end of this piece you will have your own genotype at the two common MTHFR variants. The first is rs1801133, the c.665C>T change usually called C677T. The second is rs1801131, c.1286A>C, usually called A1298C. You will have it reported on the correct strand. You will also have an explicit record of whether the call came from a genotyping array, from short-read sequencing, or from imputation.
To follow along you need one of three things: a raw data export from 23andMe or AncestryDNA, which arrives as a tab-separated text file; a VCF (variant call format, the standard text file listing where a genome differs from the reference) from whole-genome or exome sequencing; or a BAM/CRAM alignment file together with the matching reference FASTA. You also need bcftools (version 1.18 or later), samtools, and either grep/awk or a Python REPL. The hands-on work takes about ten minutes.
You will notice that the interpretation section runs longer than the extraction section. That is deliberate. Extraction is trivial, and interpretation is where almost everyone goes wrong.
1. Find out what kind of file you have
Before pulling out any genotypes, it helps to know which of three file types you are holding, because each one fails in its own characteristic way.
The first is a consumer array export, such as 23andMe’s genome_<name>.txt or AncestryDNA’s AncestryDNA.txt. These files are lists of roughly 600,000 to 700,000 probe calls reported on GRCh37 coordinates. Header lines start with #. The 23andMe columns are rsid, chromosome, position, genotype, where the genotype is two concatenated letters such as GG, or -- when the probe failed to produce a call. AncestryDNA splits the genotype across two separate allele columns. A quick look at the top of the file confirms which you have:
head -25 genome_you.txt
grep -c "^rs" genome_you.txt
The second is a VCF from sequencing, which carries real coordinates. It also holds a reference (REF) and alternate (ALT) allele and a GT field with the genotype. Most such files add DP for read depth and GQ for genotype quality. Here the first thing to establish is the genome build, since the build determines which coordinates you search:
bcftools view -h you.vcf.gz | grep -E "^##(reference|contig=<ID=chr1,)"
If the contigs are named chr1 and chr1 has length 248956422, you are working on GRCh38. If the contig is named 1 with length 249250621, you are on GRCh37.
The third is a BAM or CRAM alignment file, which holds the individual sequencing reads. This is the ground truth for these two positions, and it is worth returning to whenever anything looks odd downstream.
2. Know the coordinates and the strand
This step generates most of the confusion in online MTHFR reports, so it is worth slowing down for. The coordinates and the allele changes are as follows.
| Variant | rsID | GRCh37 (chr1) | GRCh38 (chr1) | Genomic change (plus strand) | Coding change |
|---|---|---|---|---|---|
| C677T | rs1801133 | 11856378 | 11796321 | G>A | c.665C>T, p.Ala222Val |
| A1298C | rs1801131 | 11854476 | 11794419 | T>G | c.1286A>C, p.Glu429Ala |
MTHFR sits on the minus strand of chromosome 1. The familiar names “C677T” and “A1298C” are oriented to the cDNA, so they are the reverse complement of what your VCF or array file reports on the genomic plus strand. In concrete terms, the risk-associated 677T allele appears as A in plus-strand notation, and the 1298C allele appears as G.
The mapping you need therefore looks like this:
- rs1801133:
GG= 677CC (no variant copies),AG/GA= 677CT,AA= 677TT. - rs1801131:
TT= 1298AA,GT/TG= 1298AC,GG= 1298CC.
23andMe reports on the plus strand of GRCh37, so a 23andMe file showing AA at rs1801133 means 677TT. AncestryDNA also reports plus strand. Some older forum posts and a few third-party tools flip one variant and leave the other alone, which is how contradictory reports arise. If a report tells you that you are “677TT” while your raw file says GG, either the report is wrong or it silently reverse-complemented the call for you and you are now double-counting. Check the raw line every time.
3. Pull the genotypes out of an array file
With the coordinates and strand settled, extraction from an array export is a single line:
grep -E "^(rs1801133|rs1801131)\b" genome_you.txt
In 23andMe format, the output looks like this:
rs1801131 1 11854476 TT
rs1801133 1 11856378 AG
Applying the mapping from step 2, that example is 677CT / 1298AA.
AncestryDNA stores the two alleles in separate columns, so the equivalent command joins them:
awk -F'\t' '$1=="rs1801133" || $1=="rs1801131" {print $1, $2, $3, $4 $5}' AncestryDNA.txt
Two results deserve comment. If you get -- or 00, that is a no-call: the probe failed for you, and no downstream tool can rescue it. If you get nothing at all, the marker is simply not on your chip version. Both rs1801133 and rs1801131 have been present on most 23andMe and AncestryDNA array versions, but chip content changes between versions, so verify rather than assume. To answer the question people ask most often: yes, the 23andMe array has historically genotyped rs1801133, and it appears in the raw data download even though the consumer-facing reports stopped presenting MTHFR as a health result.
If you want the array data in a form other tools can read, convert it to VCF against a reference so that the alleles are checked rather than taken on trust:
bcftools convert --tsv2vcf genome_you.txt \
-c ID,CHROM,POS,AA \
-f GRCh37.fa -s YOU -Oz -o you.array.vcf.gz
bcftools index you.array.vcf.gz
The value of --tsv2vcf here is that it rejects rows whose alleles are inconsistent with the reference base, which catches strand and build mix-ups on your behalf.
4. Pull the genotypes out of a sequencing VCF
Sequencing data gives you more to work with, including depth and quality metrics that let you judge how much to trust each call. The query itself is straightforward:
bcftools query -r chr1:11796321,chr1:11794419 \
-f '%CHROM\t%POS\t%ID\t%REF\t%ALT\t[%GT\t%DP\t%GQ]\n' you.vcf.gz
If you are on GRCh37, drop the chr prefix and use 11856378 and 11854476 instead.
As a rule of thumb, you want a DP of at least 15 and a GQ of at least 30 before you believe a heterozygous call. There is also a trap here that catches people regularly: most VCFs are filtered down to variant sites, so a position where you match the reference on both copies is simply absent from the file. The absence of rs1801133 from your VCF usually means 677CC, but it can equally mean the position was never covered by any reads. You can distinguish the two possibilities with a gVCF, which records non-variant positions as well, or by going straight to the reads:
samtools mpileup -f GRCh38.fa -r chr1:11796321-11796321 you.cram
The pileup string can be read directly. The . and , characters are bases matching the reference, while an A on the forward strand or an a on the reverse strand represents the 677T allele. A clean heterozygous call should sit near 50/50 with balanced representation from both strands. If you see something like 15/85, suspect an alignment artifact and inspect the region in IGV.
Sequencing also offers something arrays cannot: read-backed phasing, which tells you whether two variants sit on the same copy of the chromosome. The two MTHFR sites are 1,902 bp apart, too far for a standard 150 bp paired-end insert to span, but well within reach of PacBio HiFi or Oxford Nanopore reads. If you are a compound heterozygote carrying 677CT and 1298AC, the two variants are almost always in trans, on opposite chromosomes. Phased long reads let you confirm that configuration instead of assuming it.
5. Sanity-check the call before you build anything on it
Single-site array calls carry a nonzero error rate, and a one-off call on a variant you care about deserves confirmation. Three checks are cheap and worth doing.
- Compare across sources. If you have both a 23andMe file and a whole-genome VCF, they should agree. Disagreement tells you the array probe is unreliable for you.
- Check that the allele frequency is plausible. The 677T allele is common, running roughly 30–40% in European-ancestry populations. It is higher in populations of Mexican and southern Italian ancestry and substantially lower in most African-ancestry populations. Around 10% of Europeans are 677TT. If a report frames a variant this common as a rare finding, that tells you something about the report rather than about you.
- Ask whether the call was measured or imputed. Many free upload sites and several research pipelines fill in untyped markers statistically from a reference panel. Imputation of folate-pathway genotypes from low-coverage data can be accurate at the population level, and workflows exist specifically to do this, for example imputing maternal folate metabolism genotypes from non-invasive prenatal testing data 1. Population-level accuracy is a weaker claim than a confident individual call, and an imputed genotype should carry a posterior probability alongside it. If a report does not tell you whether a call was imputed, assume it was.
6. Interpret the genotype, which mostly means revising downward
Having a reliable call in hand, the question becomes what it supports. The answer is less dramatic than the free-report industry suggests.
The C677T substitution makes the MTHFR enzyme thermolabile. In vitro, 677TT homozygotes show roughly 30% of reference enzyme activity and heterozygotes roughly 65%, with the effect most pronounced under low folate status. The measurable downstream consequence in the general population is a modest shift in plasma total homocysteine, strongly modified by folate and B12 intake. Homocysteine biology genuinely matters, and the genetics of hyperhomocysteinemia are well characterized 2. The large gap between “modest shift in a biomarker distribution” and “explains your fatigue” is where most consumer MTHFR content lives.
A1298C (rs1801131) has a smaller effect on enzyme activity than C677T, and on its own it shows little consistent effect on homocysteine.
Association studies for specific outcomes have been mixed, and a few examples give a fair sense of the field. A haplotype analysis across MTHFR, MTRR, and MTR in migraine with aura is instructive. It examined exactly the gene set that consumer methylation panels emphasize and did not produce the clean signal the popular narrative implies 3. In oncology pharmacogenetics, MTHFR polymorphisms have been studied as part of multi-gene predictors of outcome in metastatic colorectal cancer treated with FOLFOX, again as one modest contributor among several markers rather than a standalone determinant 4. In reproductive medicine, MTHFR variants have been assayed on multiplex platforms alongside other thrombophilia and folate-pathway markers for pregnancy complication research 5. Taken together, these describe a real gene in real research, studied as a small-effect common variant acting in combination with others.
There is a separate and important distinction to make. A rare, severe MTHFR deficiency exists, caused by biallelic loss-of-function variants. It typically presents in infancy or childhood with homocystinuria and neurological findings, and it is a different genetic entity from the common polymorphisms discussed above. Diagnosing it requires full-gene sequencing and often RNA evidence, since splicing variants are easy to miss on DNA alone: one family with MTHFR deficiency was resolved only by combining exome sequencing with RNA sequencing to characterize complex splicing events 6. Your rs1801133 genotype says nothing about this condition. If a personal or family history raises the question, the appropriate next step is a clinical genetics evaluation rather than a raw-data exercise.
Take a history of unexplained thrombosis, recurrent pregnancy loss, or a child with an abnormal newborn screening result to a clinician rather than to a genotype file. Newborn screening for homocystinuria and related disorders is an established clinical pathway with its own protocols 2.
7. Measure the phenotype instead of inferring it
The genotype functions as a fixed, weak prior, and the thing it is a weak prior for can be measured directly. If you want to know your folate-cycle status, the sensible move is to order the biomarkers and read them:
- Plasma total homocysteine, drawn fasting and processed quickly, since red cells keep exporting homocysteine into plasma if the sample sits uncentrifuged
- Serum folate and RBC folate
- Serum B12, along with methylmalonic acid, which is a more sensitive functional marker of B12 status than B12 itself
These numbers reflect genotype, diet, supplements, kidney function, thyroid status, and several other inputs simultaneously. That combined sensitivity is precisely why they are more informative than the genotype alone. Interpreting them, and deciding what if anything to do about them, is a conversation with a clinician. We will not tell you what to take.
8. Decide what to do about the upload sites
The free-analysis sites all perform the same core operation you just performed with grep: they read two rsIDs out of your file and render them with a color-coded label. Some add literature lookup on top, which is a genuinely useful service when the retrieval is transparent about study quality. Where these sites differ from one another is in the confidence of the narrative wrapped around the call and in what happens to your file afterwards, since the genotype call itself is the same across all of them.
Two practical points follow. The first concerns accuracy relative to a testing company: an upload site cannot be more accurate than the file you gave it, because reading that file is all it does. If your array no-called rs1801133, every site you upload to will no-call it too. The second concerns data handling. Read the terms to find out whether your file is retained, whether de-identified data is shared with research partners, and whether deletion is supported. Once you have voluntarily published genetic data, its legal status changes in ways that are still being worked out, including whether it counts as “manifestly made public” under GDPR Article 9(2)(e) and therefore loses some protections 7. The ethics literature on consumer health informatics has been making a similar point about informed consent in direct-to-consumer tools for years 8, and regulators are separately paying attention to how direct-to-consumer genetic risk estimates are presented and validated 9. None of this makes uploading unreasonable. It does make uploading a decision worth taking once, deliberately, instead of five times to five different sites.
Our recommendation is to do the extraction locally, keep the raw file on hardware you control, and treat any third-party report as an index into the literature rather than as a verdict.
Common problems
A handful of failure modes account for nearly all the trouble people run into. Here they are with their fixes.
The report says TT and my file says GG. This is a strand issue; see step 2. Plus-strand AA is 677TT, and plus-strand GG is 677CC.
The variant is missing from my VCF. VCFs filtered to variant sites omit homozygous-reference positions. Confirm coverage with samtools mpileup or a gVCF before concluding 677CC.
Coordinates return nothing. This is usually a build mismatch. GRCh37 is 11856378/11854476, and GRCh38 is 11796321/11794419. Also check contig naming (1 vs chr1).
Genotype is -- or 00. The probe failed, and the result is not recoverable from that file. Sequencing or a targeted clinical assay is the fix.
The array and the WGS disagree. Trust the sequencing if DP ≥ 20 and the pileup is strand-balanced, and look at the reads before trusting either.
I am 677CT and 1298AC and a site told me that is “compound heterozygous, worst case”. In this configuration the two variants are nearly always in trans, which is a common arrangement. Its measurable consequence is a modest homocysteine effect modified by folate status. Phased long reads can confirm the configuration if you would rather have the answer than the assumption.
I want to know if I have true MTHFR deficiency. Two SNPs cannot answer that question. It requires full-gene sequencing, often with RNA evidence for splicing variants 6, together with clinical biochemistry. Go to a clinician.
Woolf Software builds longitudinal molecular profiles of individuals: whole-genome sequencing, RNA sequencing, proteomics, blood biomarkers, and continuous glucose data, integrated into one model of you. Build your profile.
Footnotes
-
Kaixin Wu, Mei Zheng, Peng He, et al. Omitting post-alignment processing and merging batch-based imputation: an efficient workflow for NIPT data imputation and its application in maternal folate metabolism genotyping. Journal of Human Genetics, 2026. https://doi.org/10.1038/s10038-026-01502-w ↩
-
Vito Iacobazzi, Vittoria Infantino, Alessandra Castegna, et al. Hyperhomocysteinemia: Related genetic diseases and congenital defects, abnormal DNA methylation and newborn screening issues. Molecular Genetics and Metabolism, 2014. https://doi.org/10.1016/j.ymgme.2014.07.016 ↩ ↩2
-
Kathryn A Roecklein, Ann I Scher, Albert Smith, et al. Haplotype analysis of the folate-related genes MTHFR , MTRR , and MTR and migraine with aura. Cephalalgia, 2013. https://doi.org/10.1177/0333102413477738 ↩
-
Ming-Yii Huang, Meng-Lin Huang, Ming-Jenn Chen, et al. Multiple genetic polymorphisms in the prediction of clinical outcome of metastatic colorectal cancer patients treated with first-line FOLFOX-4 chemotherapy. Pharmacogenetics and Genomics, 2011. https://doi.org/10.1097/fpc.0b013e3283415124 ↩
-
A.S. Glotov, E.S. Sinitsyna, M.M. Danilova, et al. Detection of human genome mutations associated with pregnancy complications using 3-D microarray based on macroporous polymer monoliths. Talanta, 2016. https://doi.org/10.1016/j.talanta.2015.09.066 ↩
-
Weiran Li, Ximeng Ma, Yuanyuan Sun, et al. RNA sequencing combined with whole-exome sequencing revealed familial homocystinemia due to MTHFR deficiency and its complex splicing events. Gene, 2025. https://doi.org/10.1016/j.gene.2024.149101 ↩ ↩2
-
Edward Dove, Jiahong Chen. What Does it Mean for a Data Subject to Make their Personal Data “Manifestly Public”? An Analysis of GDPR Article 9(2)(e). SSRN Electronic Journal, 2020. https://doi.org/10.2139/ssrn.3699572 ↩
-
Catherine Arnott Smith, Alla Keselman. The Ethics of Consumer Health Informatics. Consumer Health Informatics, 2020. https://doi.org/10.1201/9780429442377-13 ↩
-
Jacob S. Sherkow, Jin K. Park, Christine Y. Lu. Regulating Direct-to-Consumer Polygenic Risk Scores. JAMA, 2023. https://doi.org/10.1001/jama.2023.12262 ↩