← Back to Blog

TPM vs FPKM vs Counts: What’s the Difference in RNA-seq?

By Pipette.bio Team

If you have worked with RNA-seq data, you have probably encountered several different measures of gene expression: raw counts, FPKM, and TPM. They can all look like answers to the same question—how much is this gene expressed?—but they are not interchangeable.

MeasureSequencing depth adjusted?Gene length adjusted?Common use
Raw countsNo, not by themselvesNoInput to count-based differential-expression methods
FPKMYesYesLegacy expression-abundance reporting
TPMYes, as relative scalingYesRelative transcript abundance and expression reporting

For most modern bulk RNA-seq workflows, counts are the statistical starting point for differential expression, while TPM is useful for describing relative abundance. The distinction becomes clearer once we separate three issues: how many fragments were observed, how deeply the sample was sequenced, and how long each transcript is.

What are raw RNA-seq counts?

After sequencing, reads or fragments are assigned to genes or transcripts. A small count matrix might look like this:

GeneSample A
Gene A8,200
Gene B1,900
Gene C430

These values represent the number of sequencing fragments associated with each feature. They remain close to what the experiment observed, which is exactly why count-based statistical methods use them. But raw counts are not directly comparable expression measurements.

1. Sequencing depth differs between samples

Imagine that Sample A has 20 million mapped fragments and Sample B has 60 million. A gene may receive roughly three times as many fragments in Sample B simply because that library was sequenced more deeply.

3,000 counts in one sample and 6,000 in another does not, by itself, mean the gene is expressed twice as strongly.

2. Longer genes tend to receive more reads

Consider two genes present at about the same number of RNA molecules. If Gene A is 1,000 bases long and Gene B is 5,000 bases long, Gene B offers more positions from which fragments can originate. It will generally accumulate more reads.

This is why raw counts should not be used to rank expression across genes of very different lengths. Yet length correction is not required simply to test whether the same gene changes across conditions: its length does not change between samples. Count-based methods instead focus on library scaling, dispersion, experimental design, and the mean–variance relationship.

Why use counts at all?

Tools such as DESeq2 and edgeR model count data and estimate their own sample-level normalization factors. DESeq2’s standard matrix input is unnormalized counts, not a TPM or FPKM matrix.

If the question is, “Which genes changed significantly between treatment and control?”, counts—or estimates imported through an appropriate count-based workflow—are usually the right starting point.

What is FPKM?

FPKM stands for Fragments Per Kilobase of transcript per Million mapped fragments. It adjusts the fragment count by both the feature length and the library’s mapped-fragment total.

FPKM = fragments for a feature ÷ (feature length in kb × mapped fragments in millions)

Suppose Gene A has 1,000 fragments, an annotated length of 2 kilobases, and comes from a sample with 20 million mapped fragments. Its abundance is:

FPKM = 1,000 ÷ (2 × 20) = 25

Because length is included, FPKM is more meaningful than raw counts for comparing the abundance of differently sized genes within a sample. The remaining limitation is its denominator: the total mapped fragments do not guarantee that the sum of FPKM values has a fixed scale across samples.

FPKM vs RPKM

RPKM means Reads Per Kilobase of transcript per Million mapped reads. It was introduced when single-end sequencing was common. For paired-end sequencing, two reads can represent one original fragment, so FPKM counts fragments instead of treating the mates as two independent observations. The normalization concepts are otherwise closely related.

What is TPM?

TPM stands for Transcripts Per Million. Like FPKM, it adjusts for feature length and sequencing depth, but it uses the sum of length-normalized rates as its scaling denominator.

Step 1: Normalize each feature for length

Divide its fragment count by its length in kilobases. This produces a reads- or fragments-per-kilobase rate.

Step 2: Add the length-normalized rates

The sum represents the sample’s total length-normalized transcript signal.

Step 3: Scale the rates to one million

Divide each feature’s rate by the sum of all rates, then multiply by one million.

rateᵢ = countᵢ ÷ lengthᵢ in kb TPMᵢ = rateᵢ ÷ Σ(rate for all features) × 1,000,000

The TPM values for all quantified features within a sample sum to approximately 1,000,000.

Modern transcript quantifiers such as Salmon report TPM alongside estimated fragment counts and effective transcript lengths.

TPM vs FPKM: what is the important difference?

Both measures adjust an individual feature for length. The important difference is how the sample-level scaling factor is defined.

FPKM uses total mapped fragments

The library size is applied directly, so the total FPKM is not fixed across samples.

TPM uses the sum of length-normalized rates

The final abundance values are rescaled to the same one-million total in every sample.

The fixed sum gives TPM a more intuitive relative scale. In every sample, a transcript’s TPM describes its share of the sample’s length-normalized abundance pool. This property is why TPM is generally preferred over FPKM when generating new abundance measurements.

GeneSample A TPMSample B TPM
Gene A5052
Gene B500480
Gene C10,0009,800

Should I use TPM or counts for differential expression?

For count-based differential-expression tools, use counts—not a TPM or FPKM matrix. DESeq2 and edgeR use statistical models designed around count observations, sample-level normalization, dispersion, and the biological replication represented by the experimental design.

A typical gene-level workflow is:

FASTQ alignment or quantification count matrix DESeq2 / edgeR differential-expression results

Those results can then be ranked or filtered for GSEA or GO enrichment analysis, depending on the biological question.

It is not:

FASTQ TPM matrix DESeq2

Supplying TPM directly to DESeq2 is inappropriate because the values are continuous, length-normalized proportions rather than the unnormalized count observations expected by its standard model. Transcript-level quantifier outputs are a special case: use the supported tximport or tximeta route so counts, abundance, and effective-length information remain connected.

When should you use TPM?

TPM is useful when the question concerns relative transcript abundance rather than formal differential-expression testing:

TPM is also commonly used in exploratory displays and as input to some downstream models. The transformation, filtering, and train/test handling still need to match the specific method; “TPM” alone does not make a dataset analysis-ready.

Can TPM be compared between samples?

Yes, cautiously, as a comparison of relative abundance. TPM places each sample on the same one-million scale, so following Gene X across comparable tissues or conditions can be informative. It is usually easier to interpret for this purpose than raw counts or FPKM.

But RNA-seq abundance is compositional. If a small group of transcripts becomes extremely abundant, the TPM share available to other transcripts must shrink—even if their absolute molecules per cell did not change. RNA output per cell, cell-type composition, and technical differences can also complicate the comparison.

A difference in TPM is a change in relative share. It is not automatically evidence of statistically significant differential expression.

This is why reviews of RNA-seq best practices distinguish within-sample abundance measures from the normalization and statistical modeling required for between-group differential-expression tests.

Can you compare different genes using raw counts?

Usually not directly. If Gene A has 10,000 counts and Gene B has 5,000, Gene A is not necessarily present at twice the molecular abundance. It may simply be longer.

Different genes within one sample

TPM is more interpretable because it adjusts for feature length before expressing each feature as a share of the sample.

The same gene across experimental groups

Use a count-based differential-expression method. DESeq2 or edgeR can estimate change while modeling normalization and uncertainty.

What are normalized counts?

The phrase normalized counts creates additional confusion because it does not refer to one universal unit. DESeq2, for example, can return counts adjusted by its estimated sample size factors. Those values are useful for descriptive plots and some exploratory interpretation, but the model still connects the original counts to normalization factors internally.

Other transformations include the variance-stabilizing transformation (VST) and regularized logarithm (rlog). They can be useful for PCA, clustering, sample-distance plots, and heatmaps. They are not TPM, and transformed values should not be substituted back into a count-based differential-expression model.

What about Salmon and transcript-level quantification?

Salmon estimates transcript abundance without requiring every fragment to have one unambiguous transcript assignment. Its quant.sf output includes transcript length, effective length, TPM, and NumReads.

Here, NumReads is an estimated fragment count, which may be fractional. Reads compatible with multiple transcripts are assigned probabilistically rather than treated as unambiguous integer observations.

tximport can summarize transcript-level estimates to genes while retaining the abundance and effective-length information needed by downstream packages. The supported workflow matters: do not manually extract Salmon TPM and present it to DESeq2 as though it were a raw gene-count matrix.

TPM vs FPKM vs Counts: which should you use?

Use raw or appropriately imported estimated counts when:

Use TPM when:

Use FPKM when:

The simplest way to remember the difference

Counts: what was assigned?

How many fragments were assigned to this gene or transcript?

FPKM: what was observed after two adjustments?

How many fragments remain after accounting for feature length and mapped-library size?

TPM: what share of the pool is this?

What fraction of the sample’s length-normalized transcript abundance belongs to this feature?

No measure is universally best. The statistical and biological objective determines the representation.

Use counts for statistical inference, TPM for relative abundance, and FPKM mainly when a legacy analysis requires it. Even when TPM is the value you plan to report, preserve the original counts and the quantification metadata. Those are what allow the analysis to be checked or repeated with a different method later.

Sources and further reading

  1. Wagner GP, Kin K, Lynch VJ. Measurement of mRNA abundance using RNA-seq data: RPKM measure is inconsistent among samples. Theory in Biosciences (2012).
  2. Love MI, Huber W, Anders S. Moderated estimation of fold change and dispersion for RNA-seq data with DESeq2. Genome Biology (2014).
  3. Robinson MD, McCarthy DJ, Smyth GK. edgeR: a Bioconductor package for differential expression analysis of digital gene expression data. Bioinformatics (2010).
  4. Patro R, Duggal G, Love MI, Irizarry RA, Kingsford C. Salmon provides fast and bias-aware quantification of transcript expression. Nature Methods (2017).
  5. Soneson C, Love MI, Robinson MD. Differential analyses for RNA-seq: transcript-level estimates improve gene-level inferences. F1000Research (2016).
  6. Conesa A et al. A survey of best practices for RNA-seq data analysis. Genome Biology (2016).

Analyze RNA-seq data with Pipette

Choosing the expression measure should follow from the scientific question, not from whichever column is easiest to export. Pipette keeps the input data, quantification method, normalization choices, statistical model, and resulting figures together throughout an RNA-seq analysis.

That connection makes it possible to trace an expression claim back to the values and decisions that produced it—the part that matters more than the label on the matrix.