All studies
DNA·September 6, 2026·7 min read

Why Your Nebula or Dante Labs VCF Gets Rejected by Every DNA Tool

Your whole-genome VCF has a dot in the ID column, which means no rsIDs. Here is how to check in one command and what still works.

You uploaded a VCF from Nebula Genomics or Dante Labs, and every DNA tool you tried either rejected it, hung, or gave you nothing. The file is not corrupted and you did not do anything wrong. The problem is one column, and once you see it you will understand every failure you have had.

We hit this ourselves. Two people came to our DNA reader with exactly this kind of file. One was turned away 16 times, the other 9 times, before we worked out what was happening and fixed it on 2026-09-06 — by letting the file through for ancestry, which never needed rsIDs, instead of refusing it outright. So this is not a hypothetical. It is a specific, common failure mode of whole-genome VCFs, and the fix on your end is mostly about knowing what the file can and cannot do.

What the HealthOS read looks like
Your findings, grouped

Your findings, grouped

How you handle food

How you handle food

Traits, in plain language

Traits, in plain language

The free reader at healthosx.com/dna. Findings first, the science behind each one a tap away, and nothing uploaded.

The ID column is the problem

A VCF has eight core columns per variant. The third one is called ID. In a properly annotated file, that column holds the rsID, the reference SNP identifier that looks like rs1815739 or rs53576. That number is how nearly every DNA tool on earth knows which position in your genome it is looking at.

Open a raw Nebula or Dante Labs VCF and look at that column. On most of them, every single row says ., a single dot. The dot means "no ID". The variant caller wrote down the chromosome, the position, and what your base is, but it never looked up the rsID.

That is not a bug. It is what a variant caller outputs before annotation. The caller's job is to read your sequencing data and say "at chromosome 11, position 66,560,624, this person has a T where the reference has a C". Matching that position to rs1815739 is a separate step called annotation, run against a database like dbSNP. Nebula and Dante Labs often hand you the file from before that step. Raw caller output.

This is a bad default for a consumer product. If you are selling whole-genome sequencing to people who are not bioinformaticians, shipping a file that no downstream tool can read without extra work is the wrong choice. But it is the choice a lot of them made.

Why the dot breaks everything downstream

Most DNA analysis tools, including ours until we fixed it, were built first for 23andMe and AncestryDNA files. Those are not VCFs. They are simple tab-separated tables, one line per SNP, and the first field on every line is the rsID.

So the tools learned to work rsID-first. To check whether you carry a variant linked to lactose tolerance or caffeine metabolism or a medication response, the tool has a list of rsIDs it cares about, and it searches your file for each one. If your file has rs4988235, the tool finds it and reports it. If your file has a dot where every rsID should be, the search returns nothing every time.

That is why the tool either says "no matching variants", or shows an empty health report, or looks like it is broken. It is doing exactly what it was built to do. It is asking your file for rsIDs and your file has none to give.

What each VCF column carries
CHROM + POS
chr11, 66560624
REF + ALT
C to T
ID column
a single dot
Ancestry works
needs only position + genotype
Health findings fail
need the rsID that isn't there

Check it yourself in one command

Before you do anything else, confirm this is actually your problem. If you are on a Mac or Linux machine, open a terminal, go to the folder with your file, and run this against it. Replace the filename with yours.

grep -v "^#" your_file.vcf | head -5 | cut -f3

The grep -v "^#" skips the header lines at the top of the file. head -5 takes the first five actual variants. cut -f3 pulls out just the third column, the ID. If your file is gzipped, ending in .vcf.gz, run this instead:

zcat your_file.vcf.gz | grep -v "^#" | head -5 | cut -f3

If what prints back is five dots, one per line, that is your answer. No rsIDs. If instead you see rs numbers, your file is already annotated and something else is wrong, which is a different article.

You can also just open the file in a plain text editor and scroll past the header lines to the first data rows. The third tab-separated field is the ID. Same information, no terminal.

What still works, and what does not

Here is the part that matters, because a file with no rsIDs is not useless. It is missing one kind of label, not the data underneath.

Ancestry works. Ancestry inference does not need rsIDs at all. It works from the raw genomic positions and the base you carry at each one, comparing the pattern across many positions to reference populations. The dot in the ID column changes nothing for that. Your chromosome, position, and genotype are all still there, and that is everything ancestry needs.

Health and trait findings do not work, not until the file is annotated. Every variant-specific finding, whether it is about how you clear caffeine or a variant your doctor might want to know about, is keyed to a specific rsID. Without rsIDs, the tool cannot match. It is not that the information is absent from your genome. It is that the file has not been labelled in the language the health lookups speak.

The genotype data itself is arguably richer than a 23andMe file. Whole-genome sequencing reads far more of your genome than a genotyping chip samples. The raw material is better. It is just wearing no name tags.

The fix is annotation, and where it happens

To get health findings, the file has to be run against dbSNP so each position gets its rsID filled in. There are two honest ways this happens.

One, you do it yourself. Tools like bcftools annotate with a dbSNP reference will rewrite the ID column, matching each of your positions to its known rsID. This is real bioinformatics work. You need the right reference build to match your file, GRCh37 or GRCh38, and getting that wrong quietly maps everything to the wrong place. If you are comfortable at the command line it is a solved problem. If you are not, it is a wall.

Two, the tool stops treating "no rsIDs" as "no file". This is what we changed on 2026-09-06. Before that, a VCF carrying too few of the report's named positions was refused outright — which also took away ancestry, the half that never needed rsIDs in the first place. Now the two verdicts are separate: the health story is withdrawn and explained, and the file is accepted so ancestry can run on the whole genome.

To be precise about what that does and does not give you:

  • Ancestry: yes. It matches on chromosome and position, so a missing ID column changes nothing.
  • Health and trait findings: no, not until the file is annotated. Those are keyed to rsIDs, and we would rather say so than guess.
16
times one visitor uploaded the same file before we fixed this
9
times the second visitor did, the same day
.
what every ID column row said
0
rsIDs ancestry needs

Which build your file uses matters here, because a position on GRCh37 is a different physical spot from the same coordinate on GRCh38. Our reference panel is GRCh37, so an rsID-less GRCh38 file is refused rather than lined up against the wrong variants. If you do not know which build you have, look in the header lines of the VCF, the ones starting with ##. The reference is often named there.

If a tool just rejected your file

Before you assume the file is broken, run the one-line check. A dot in the ID column tells you exactly what you have: correct genomic data with no rsID labels. Ancestry will work on it as it is, as long as the file is on GRCh37. Health findings need the file annotated against dbSNP first.

And if a tool turned you away without telling you why, that is the tool's failure, not yours. We turned people away 25 times between us before we understood our own error. A file full of dots is one of the most common things a whole-genome customer will ever hand a DNA tool, and refusing it silently is not acceptable behaviour from software.

If you want to see what your file actually contains, dots and all, you can read your own file in the browser. It stays on your machine, it runs ancestry from positions alone, and it will tell you plainly which parts of your genome it could and could not use.

New to raw DNA files? Start with the full guide: How to Download & Analyze Your 23andMe Raw Data Free

Written by

HealthOS Research

Keep reading