Sars-cov-2 Spike Gene Sequence Nucleotide Coordinates

11 min read

You've stared at a genome browser until your eyes crossed. You've pasted coordinates into a notebook, then into a script, then into a Slack message — only to realize you're off by one. Again Took long enough..

Welcome to the club.

The SARS-CoV-2 spike gene isn't just "somewhere in the genome.And if you work with sequencing data, primer design, variant calling, or vaccine constructs, those numbers aren't trivia. Even so, " It has precise nucleotide coordinates. They're the difference between a working assay and a wasted week.

Here's the thing most references won't tell you upfront: the coordinates depend entirely on which reference you're using. And which coordinate system. And whether you're counting from the genomic RNA or the coding sequence.

Let's sort it out once and for all And that's really what it comes down to..

What Is the Spike Gene in SARS-CoV-2

The spike gene — S — encodes the surface glycoprotein that gives coronaviruses their crown. Consider this: it gets cleaved by furin and TMPRSS2. Now, it's the business end of viral entry. So naturally, it binds ACE2. It's the target of nearly every neutralizing antibody, every mRNA vaccine, every diagnostic assay worth its salt Turns out it matters..

In the Wuhan-Hu-1 reference genome (NC_045512.That's 3,822 nucleotides. 2), the spike gene spans 21,563 to 25,384 on the positive strand. 1,273 amino acids. One very large protein The details matter here..

But those numbers? Change the reference assembly, and they shift. They're 1-based, inclusive, on the genomic RNA. Switch to 0-based half-open coordinates (like BED format), and they shift again. Use a different isolate — say, an early Wuhan seafood market sample — and you might see a few SNPs inside the gene, but the coordinates hold if the annotation transfer was done right.

Most of the time, it wasn't Easy to understand, harder to ignore..

The reference genome matters more than you think

NCBI's NC_045512.But 3 — the original GenBank submission from January 2020. That's why 2 is the de facto standard. They're nearly identical. GISAID uses it. Nextstrain uses it. But Ensembl, UCSC, and some older preprints used MN908947.Nearly That's the part that actually makes a difference..

MN908947.3 has a few extra nucleotides at the 5' UTR. The spike gene coordinates there? 21,562–25,383. One base off at each end. That's enough to break a primer if you're not paying attention.

And then there's the RefSeq gene annotation (NCBI Gene ID: 43740568). Same coordinates on NC_045512.Practically speaking, 2. But if you pull the CDS feature from the GenBank file, you'll see join(21563..25384) — no introns, because coronaviruses don't splice their structural genes. The join is a formality.

The official docs gloss over this. That's a mistake.

Why These Coordinates Matter

You're not memorizing numbers for fun. You need them because:

  • Primer design: Amplicon sequencing schemes (ARTIC, Midnight, SNAP) tile primers across the genome. Spike primers must land in the right coordinates. One base off at the 3' end? Failed amplification.
  • Variant calling: When you see "S:D614G" in a lineage report, that's amino acid 614. But the nucleotide change is at position 23,403 (A→G on NC_045512.2). If your VCF uses different coordinates, your annotation pipeline will miss it — or worse, misannotate it.
  • Vaccine constructs: The Pfizer/BioNTech and Moderna vaccines use codon-optimized spike sequences. But the original Wuhan-Hu-1 coordinates are the anchor. Every variant update — Beta, Delta, Omicron BA.1, XBB.1.5 — is defined by mutations relative to that reference.
  • Diagnostic assays: RT-PCR targets (N gene, E gene, RdRp, S gene) all have defined coordinate ranges. S gene target failure (SGTF) — the hallmark of Alpha and Omicron BA.1 — happens because a 6-nucleotide deletion (Δ69–70) at genomic positions 21,765–21,770 knocks out a probe binding site. Know the coordinates, and you understand the mechanism.

Real talk: I've seen bioinformaticians spend days debugging a pipeline because they mixed up 1-based VCF coordinates with 0-based BED coordinates for the same gene. The spike gene is long enough that off-by-one errors don't just shift a codon — they shift the reading frame in your head.

How the Spike Gene Is Structured

It helps to see the gene not as a flat interval but as a series of functional domains. Here's the thing — each has its own coordinate range. Each matters for different reasons.

Signal peptide (1–13 aa / nt 21,563–21,601)

The N-terminus directs the nascent protein to the ER. That's why cleaved off in the mature spike. If you're expressing spike in vitro, you need this — or you need to replace it with a heterologous signal peptide (like IgG kappa or tPA). The coordinates are small but critical.

N-terminal domain (NTD) — ~14–305 aa / nt 21,602–22,478

The NTD is a galactose-binding lectin domain. Practically speaking, the "NTD supersite" (residues 14–20, 141–158, 246–260) maps to specific nucleotide ranges. Here's the thing — that's nt 22,031–22,038. Delta's Δ156–157? It's also a major target for neutralizing antibodies — and a hotspot for deletions in variants of concern. Gone.

Receptor-binding domain (RBD) — ~319–541 aa / nt 22,519–23,186

This is the ACE2 interface. So the most studied 223 amino acids in virology. Every variant of concern has RBD mutations. N501Y (nt 23,063 A→T), E484K (nt 23,012 G→A), K417N/T (nt 22,813 A→T/C), L452R (nt 22,917 T→G). You will look these up. Bookmark the coordinates.

Furin cleavage site (FCS) — 681–685 aa / nt 23,605–23,617

PRRARRRAR in some variants. Think about it: the insertion of a furin site (relative to SARS-CoV-1) is one of the defining features of SARS-CoV-2. Which means the coordinates span the S1/S2 boundary. If you're designing a spike construct without the FCS (for stability), you delete or mutate this exact stretch.

S2 subunit — ~686–1

S2 subunit — ~686–1273 aa / nt 23,618–25,388

The machinery of membrane fusion. Conserved across coronaviruses, but the details matter Practical, not theoretical..

  • Fusion peptide (FP) — ~686–709 aa / nt 23,618–23,689
    Hydrophobic loop that inserts into the host membrane. The FP is buried in the prefusion trimer; S1 shedding and S2 refolding expose it. Mutations here are rare but lethal to infectivity. If you’re designing a universal vaccine target, this is the holy grail — structurally constrained, poorly accessible to antibodies, but the conserved mechanism.

  • Heptad repeat 1 (HR1) — ~760–850 aa / nt 23,840–24,112
    Forms the central trimeric coiled-coil in the postfusion six-helix bundle. HR1 inhibitors (like EK1C4 peptide) bind here and block refolding. Coordinates are precise because helical register matters — a single insertion shifts the hydrophobic seam.

  • Connector domain (CD) / Central helix (CH) — ~850–950 aa / nt 24,112–24,412
    The long helix linking HR1 to HR2. Rigid spacer. Few known mutations, but deletions here (e.g., Δ850–855 in some cell-culture-adapted strains) alter fusion kinetics.

  • Heptad repeat 2 (HR2) — ~1150–1210 aa / nt 25,010–25,192
    Packs antiparallel into the grooves of the HR1 trimer. The target of enfuvirtide-like fusion inhibitors. HR2 peptides are potent pan-coronavirus entry blockers — if you can deliver them.

  • Transmembrane domain (TM) — ~1213–1237 aa / nt 25,199–25,273
    Single-pass anchor. Not just a lipid tail — the TM domain oligomerizes and influences spike clustering on the virion surface. Swapping it for a heterologous TM (e.g., VSV-G) changes particle incorporation efficiency in pseudotyping assays And that's really what it comes down to..

  • Cytoplasmic tail (CT) — ~1238–1273 aa / nt 25,274–25,388
    Contains an ER retrieval signal (KxHxx, ~1255–1259) and trafficking motifs. Truncating the last 19–28 amino acids (ΔCT) is a standard trick to boost surface expression and pseudovirus titers 10–100×. But it also alters spike conformation and antibody sensitivity. Know the trade-off Nothing fancy..


The Coordinate Systems Trap

You have the domains. Now you need to use them. This is where pipelines break.

1-based vs. 0-based: The Eternal War

Format Start End Example (RBD start)
VCF / GFF / SAM 1-based, inclusive 1-based, inclusive 22,519
BED / BEDPE / Python (pysam, pybedtools) 0-based, inclusive 0-based, exclusive 22,518 – 23,186
GenBank / NCBI Gene 1-based, inclusive 1-based, inclusive 22,519..23,186

The bug: You extract the RBD from a VCF (start=22,519). You feed it to bedtools getfasta using a BED file where you copied the VCF start. bedtools treats 22,519 as 0-based → it fetches genomic position 22,520 (1-based). Your translation starts at codon 320 (aa 320 = nt 22,522), not 319. Frame shift. Silent corruption.

The fix: Never manually convert. Use pysam or bcbio-gff to parse annotations natively. If you must write BED: start_bed = start_vcf - 1; end_bed = end_vcf. Test with a known variant: N501Y is at genomic 23,063 (VCF

The fix (continued): Never manually convert. Use pysam or bcbio-gff to parse annotations natively. If you must write BED: start_bed = start_vcf - 1; end_bed = end_vcf. Test with a known variant: N501Y is at genomic 23,063 (VCF 1-based) → BED start 23,062, end 23,063. Verify by translating the extracted sequence — does it yield asparagine (AAC/AAT) at the expected position? If not, your coordinates are off by one.

Strand Awareness: The Silent Killer

Coronaviral genome is positive-sense, but annotation files don't always make this explicit. Even so, when extracting ORF1a/1b overlapping regions or designing primers for subgenomic RNA, strand matters. Even so, for antisense ORFs (e. g.That said, a bedtools getfasta -s flag may be required. For spike, the coding strand is the same as the genomic RNA — no reverse complement needed. , ORF9b, ORF7a), failure to account for strand leads to nonsense sequences.

Relative vs. Absolute Numbering

Literature cites residue numbers like "K619" or "D614". These are relative to the mature spike protein, which begins after signal peptide cleavage (~aa 15–19). Genomic coordinates tell you nothing about this offset Surprisingly effective..

K619 → codon 619 → nt 1852–1854 (relative to spike start)  
Spike start (post-signal peptide) ≈ nt 21,563 (1-based)  
→ Genomic nt: 21,563 + 1852 – 1 = 23,414

Mismatch here causes failed mutagenesis, mislabeled constructs, and wasted weeks.


Practical Pipeline: From Reference to Residues

Here’s how to stop guessing and start computing correctly:

Step 1: Define the Reference Anchor

Use NC_045512.Which means 2 (original Wuhan-Hu-1) or NC_045512. 3 (corrected frame). Also, do not mix. Specify explicitly in every tool call.

Step 2: Extract Spike CDS Programmatically

# Using EMBOSS getorf or Biopython
getorf -sequence NC_045512.2.fasta -outseq spike_cds.fasta -minsize 3600
# Or with Biopython:
from Bio import SeqIO
record = SeqIO.read("NC_045512.2.gb", "genbank")
cds = [f for f in record.features if f.type == 'CDS' and f.qualifiers['product'][0] == 'spike glycoprotein'][0]
spike_seq = cds.extract(record.seq)

This ensures you get the exact nucleotide sequence corresponding to the annotated CDS — no manual slicing.

Step 3: Translate and Validate

protein = spike_seq.translate(to_stop=True)
assert len(protein) == 1273  # Expected full-length spike

Any discrepancy flags a coordinate error upstream Most people skip this — try not to..

Step 4: Map Domain Boundaries

Convert amino acid ranges to nucleotide ranges programmatically:

def aa_to_nt(start_aa, end_aa):
    return (start_aa - 1) * 3 + 1, end_aa * 3  # 1-based inclusive

hr1_start, hr1_end = aa_to_nt(1213, 1257)
print(f"HR1 nt range: {hr1_start}-{hr1_end}")

This eliminates transcription errors when cloning domains.

Step 5: Annotate Mutations

Given a VCF with mutations, map each to spike residue:

def vcf_to_aa(pos, ref, alt, spike_start_nt=21563):
    rel_pos = pos - spike_start_nt + 1
    codon_index = (rel_pos - 1) // 3
    codon_pos = (rel_pos - 1) % 3
    
    # Reconstruct wild-type codon
    wt_codon = spike_seq[codon_index*3 : codon_index*3 + 3]
    mut_codon = wt_codon[:codon_pos] + alt + wt_codon[codon_pos+1:]
    
    wt_aa = wt_codon.translate()
    mut_aa = mut_codon.translate()
    
    return f"{wt_aa}{codon_index+1}{mut_aa}"

# Example: N501Y
print(vcf_to_aa(23063, 'A', 'T'))  # Output: N501Y

This approach scales across thousands of variants without manual lookup tables.


Tools That Won’t Betray You

  • Nextstrain Augur: Handles coordinate conversion internally; ideal for phylogenetic workflows.
  • Pybedtools: Wraps BEDTools in Python; supports automatic format detection.
  • Clover/Biopython: For extracting features directly from GenBank files.
  • Ensembl VEP / SnpEff: Annotate variants with protein-level consequences automatically.

Avoid spreadsheets for anything beyond quick notes. Every copy-paste introduces potential

Before you trust a single variant annotation, verify the entire pipeline against a known reference. Run a BLAST against the NCBI RefSeq database to confirm that your extracted spike sequence matches the authoritative SARS-CoV-2 reference. If your coordinates are off by even a few nucleotides, downstream annotations will cascade into incorrect protein predictions.

Not obvious, but once you see it — you'll see it everywhere.

Visualize the mutations with a residue-level heatmap or a phylogenetic tree. Day to day, tools like ggplot2 or matplotlib can render a heatmap of amino acid conservation across the spike protein, making it immediately clear which residues are conserved versus which are mutated. Pair this with a phylogenetic tree generated by Nextstrain Augur to see how your variant clusters relative to known variants That alone is useful..

Finally, document every step in a reproducible workflow. Store your scripts in version control, log your reference sequence versions, and archive your output files. When you present results to a colleague or reviewer, the reproducibility of your pipeline is as important as the data itself Nothing fancy..

Quick note before moving on.

To keep it short, this pipeline transforms raw genomic data into a structured, validated analysis of the SARS-CoV-2 spike protein. Worth adding: by defining a fixed reference anchor, extracting the CDS programmatically, translating and validating the protein, mapping domain boundaries, and annotating mutations with a dedicated script, you eliminate the guesswork that has plagued early studies. The tools and methods described here are not just for SARS-CoV-2 — they form a generalizable framework for any viral protein analysis, and they will serve you well as the field evolves.

Freshly Written

Fresh Off the Press

Handpicked

On a Similar Note

Thank you for reading about Sars-cov-2 Spike Gene Sequence Nucleotide Coordinates. We hope the information has been useful. Feel free to contact us if you have any questions. See you next time — don't forget to bookmark!
⌂ Back to Home