How to Find Developmental Stage Expression Data in UniProt: A Guide

By Dr. Zubair Khalid, DVM, MS, PhD ·

How to Find Developmental Stage Expression Data in UniProt: A Guide

By the end of this guide you will be able to locate every curated developmental stage expression statement that UniProt holds for a protein, retrieve those annotations in bulk for hundreds or thousands of proteins at once, judge whether a given annotation is experimentally supported or predicted, and route yourself to richer developmental datasets such as Expression Atlas when UniProt itself only has a sentence or two.

Here is what you need before starting:

  • A web browser for the UniProt website at https://www.uniprot.org/
  • A terminal with curl installed if you want programmatic retrieval (macOS and most Linux distributions ship with it, Windows 10 and later include it by default)
  • Python 3 with the pandas library if you want the annotations in a spreadsheet-like format
  • The gene name, UniProt accession, or organism you care about

No account or API key is required. UniProt releases its data under a CC-BY 4.0 license, so anything you download can be redistributed and published [1].

What UniProt Actually Contains for Developmental Stage Expression

Before touching the search bar, you need a realistic picture of what developmental stage expression data looks like inside UniProt. This saves the single most common frustration new users hit, which is searching for a whole-transcriptome-style developmental time course and finding nothing.

UniProt maintains the UniProt Knowledgebase, usually called UniProtKB, which is a collection of sequences and annotations for over 120 million proteins across all branches of life [1]. Within that collection, a smaller set of entries carries detailed annotations extracted from the literature by expert curators, and UniProt reports this curated set at over half a million proteins [1].

Developmental stage expression lives in three distinct places inside a UniProt entry:

  1. The Developmental stage comment. This is a free-text, curator-written statement that appears under the "Expression" section of an entry page. A typical entry might read "Detected in embryonic day 10.5 limb bud but not in adult tissue" with linked publications. This is the closest thing UniProt has to a dedicated developmental expression field.
  2. The Tissue specificity comment. Many entries describe where a protein is expressed without tying it to a developmental time point. This is often the section that actually contains the developmental information you want, embedded in prose rather than in a separate field.
  3. Curated keywords. Terms such as "Developmental protein" and "Differentiation" are applied to entries whose function implicates them in developmental processes. These keywords do not tell you when or where the protein is expressed, but they are an excellent filter for narrowing a large proteome down to a development-relevant subset.

A critical caveat shapes everything else in this guide. Developmental stage comments are written by curators who read primary literature, so they exist only for proteins someone has studied. Classic developmental biology genes in human, mouse, rat, and Drosophila tend to have rich annotations. A barely characterized protein in a poorly studied organism may have nothing beyond a predicted function. If your protein of interest has no Developmental stage section, that absence is real information about the state of the literature, not a failure of your search.

For context on what these annotations are built from, consider a study like the ontogeny analysis of Phex protein expression in the mouse embryo, which mapped when and where the protein appears across developmental stages and in osteoblasts [2]. Curators read papers of that kind and compress their findings into the structured comments you retrieve through UniProt. Conversely, experimentalists studying expression patterns, such as the Drosophila gene tagging workflows that report protein expression and subcellular dynamics at the endogenous locus [3], or semi-quantitative immunohistochemistry protocols for measuring expression within tissues [4], generate the primary observations that eventually flow into these databases. UniProt is a distillation layer on top of the primary literature, not a replacement for it.

How to Use UniProt: A Thirty-Second Orientation

If this is your first time working through a UniProt database tutorial, two distinctions matter before you search.

Reviewed versus unreviewed. UniProtKB is split into two sections. Reviewed entries, historically called Swiss-Prot, are manually annotated by curators with literature-based evidence. Unreviewed entries, historically TrEMBL, are computationally annotated and are far less reliable. In searches you control this with the reviewed:true or reviewed:false filter. For developmental stage expression work you almost always want reviewed:true, because developmental stage comments are essentially a curated-only feature.

Accessions versus gene names. Every entry has a stable accession, such as P04637 for human TP53. Gene names can be ambiguous or change over time, so when you find an entry you plan to cite or track, record its accession and the entry version number shown on the page.

The main components of the UniProt website that matter for this task are the search bar at the top, which accepts structured field queries, the entry page itself with its tabbed sections, and the Download and Results tabs that appear after any search, which let you export result sets.

Finding Developmental Stage Expression Step by Step

This is the core walkthrough for how to find developmental stage expression data in UniProt. Work through the steps in order with your own gene of interest.

Step 1. Locate the entry for your protein

Go to https://www.uniprot.org/ and type your gene name plus the organism into the search bar. To make the result reproducible, use a field query rather than free text. For human POU5F1 (OCT4), the classic pluripotency factor with well-documented developmental expression:

gene:POU5F1 AND organism_id:9606 AND reviewed:true

The organism_id field takes a NCBI taxonomy identifier. The identifiers you will use most often are 9606 for human, 10090 for mouse, 10116 for rat, 7227 for fruit fly, 6239 for roundworm, 3702 for Arabidopsis, and 559292 for budding yeast. You can look up any other organism identifier at the NCBI Taxonomy Browser.

Expected output: a single results card for POU5F1_HUMAN with the accession shown prominently. Click the entry name to open the full entry page.

Step 2. Read the Expression section on the entry page

On the entry page, scroll or use the section navigation to reach Expression. Depending on the protein, this section contains some combination of three subsections:

  • Tissue specificity
  • Induction
  • Developmental stage

Each statement carries an evidence tag on its right side. Hover over the tag to see whether the assertion is manual and experimentally supported, manual but inferred by a curator, or automatically generated. This distinction matters enormously for developmental claims, and it is covered in detail in the validation section below.

If the Developmental stage subsection is present, it will typically name embryonic time points, adult expression patterns, or stage-specific isoforms, often with linked PubMed references. Follow at least one of those references before building an experiment around the claim, because the comment is a summary and the paper is the evidence.

Step 3. Run a bulk query for many entries at once

Looking up one protein at a time does not scale. The UniProt search bar accepts Boolean queries across all annotation fields. To pull every reviewed human entry that carries a developmental stage comment:

reviewed:true AND organism_id:9606 AND cc_developmental_stage:*

The cc_developmental_stage field corresponds to the Developmental stage comment, and the asterisk wildcard asks for any value at all. To intersect that with curated developmental function:

reviewed:true AND organism_id:10090 AND keyword:"Developmental protein"

The keyword filter catches entries flagged as involved in development even when no stage-specific expression statement exists. The full list of searchable fields, including all comment-type fields, is published on the UniProt query fields help page, so verify field names there if a query returns zero hits unexpectedly.

Expected output: a results page whose header shows the number of matching entries. A query of this shape against reviewed mouse entries typically returns thousands of hits, which is why the download step matters.

Step 4. Export the results as a table

After running the query, click Download in the results toolbar. Choose TSV format and select the columns you want. A sensible column set for developmental expression work is:

  • Entry (accession)
  • Entry Name
  • Gene Names (primary)
  • Protein Names
  • Developmental stage (the full comment text)
  • Tissue specificity
  • Keywords
  • Existence (the evidence level of the protein itself)

If you prefer the command line, the same download through the REST API looks like this:

curl -G "https://rest.uniprot.org/uniprotkb/search" \
  --data-urlencode 'query=reviewed:true AND organism_id:9606 AND cc_developmental_stage:*' \
  --data-urlencode 'fields=accession,id,gene_primary,cc_developmental_stage' \
  --data-urlencode 'format=tsv'

Expected output looks like this (illustrative structure, real rows will differ):

Entry       Entry Name        Gene Names   Developmental stage
P04637      P53_HUMAN         TP53         Expressed at very low levels in ...
Q9xxxx      Yyyy_MOUSE        Gene1        Detected in embryonic ...

If the query returns more than a few hundred rows, the search endpoint paginates. For complete result sets use the streaming endpoint, which returns everything in one request:

curl -G "https://rest.uniprot.org/uniprotkb/stream" \
  --data-urlencode 'query=reviewed:true AND organism_id:10090 AND keyword:"Developmental protein"' \
  --data-urlencode 'fields=accession,id,gene_primary,cc_tissue_specificity,cc_developmental_stage' \
  --data-urlencode 'format=tsv' \
  --output mouse_developmental.tsv

Step 5. Load the results into Python

For analysis or filtering, bring the TSV into pandas:

import pandas as pd

df = pd.read_csv("mouse_developmental.tsv", sep="\t")

# Entries that mention any embryonic time point
embryonic = df[df["Developmental stage"].str.contains(
    "embryonic|E\\d+\\.\\d+", case=False, na=False
)]

print(f"Total entries: {len(df)}")
print(f"Entries with embryonic-stage mention: {len(embryonic)}")
embryonic[["Entry", "Gene Names"]].to_csv(
    "mouse_embryonic_stage_hits.csv", index=False
)

Expected output is two numbers printed to the console and a CSV containing the filtered accessions. The regex matches the word "embryonic" or the standard mouse staging notation such as E10.5. Adjust the pattern for your organism, since zebrafish uses hours or days post-fertilization and Drosophila uses embryonic, larval, and pupal stages.

Step 6. Follow the cross-references to deeper data

UniProt entries will rarely satisfy a question like "give me expression values across 20 developmental time points." That kind of quantitative data lives in specialist resources, and UniProt deliberately links to them. On the entry page, open the Cross-references or Links section and look for:

  • Expression Atlas, EMBL-EBI's knowledgebase of gene and protein expression across tissues, cell types, conditions, and species, which now aggregates more than 4500 studies from 67 species including hundreds of single-cell RNA-seq experiments across 21 species [5]. Expression Atlas data are integrated directly into UniProt and other EMBL-EBI resources [5], so a well-studied developmental gene usually has a one-click expression profile link.
  • Bgee, which specializes in expression across anatomical structures and developmental stages.
  • Human Protein Atlas, for tissue and cellular expression in human.
  • MOPED, the Model Organism Protein Expression Database, which provides protein-level expression from mass spectrometry studies browsable by organism, tissue, localization, and condition, and links outward to UniProt among other resources [6].

The relationship between these resources is one-way in an important sense. UniProt tells you that a protein is developmentally regulated and hands you the literature trail. Expression Atlas and similar databases give you the numbers. Use both.

Key Search Fields at a Glance

The following table summarizes the fields and filters that do the real work in developmental stage expression searches.

Field or filterWhat it controlsExample
reviewed:trueRestricts to manually curated entriesreviewed:true AND organism_id:9606
organism_id:Filters by NCBI taxonomy identifierorganism_id:10090 for mouse
keyword:"Developmental protein"Curated functional keyword for developmentCombined with any organism filter
cc_developmental_stage:*Requires a developmental stage commentCatches stage-specific expression text
cc_tissue_specificity:*Requires a tissue specificity commentBroader than developmental stage
gene:Gene name search within entriesgene:POU5F1
go:Gene Ontology term constraintUse the GO term name or ID from the GO site
fields= (REST)Selects output columnsfields=accession,gene_primary,cc_developmental_stage
format=tsv (REST)Sets output formatTSV for spreadsheets, JSON for scripts

Practical Tips for Developmental Stage Expression Searches

These are the tips that separate a frustrating session from a productive one.

Search the concept, not just the field. If cc_developmental_stage: returns too few entries, widen the net with cc_tissue_specificity: and then filter the text column for stage-related words in Python. Curators sometimes fold developmental information into the tissue specificity comment, so a field-exclusive search silently discards relevant entries.

Use free-text search inside comments sparingly but deliberately. A query such as reviewed:true AND organism_id:9606 AND cc_tissue_specificity:embryonic pulls every reviewed human entry whose tissue specificity text mentions embryonic expression. It over-captures and under-captures at the edges, but as a discovery pass it works well.

Pair the expression comment with the function keyword. The combination of keyword:"Developmental protein" and cc_developmental_stage:* gives you two different kinds of evidence, functional involvement and observed stage-specific expression. Entries in their intersection are your highest-confidence targets.

Record the accession and version when you cite. UniProt entries are living documents and annotations change between releases. Cite the accession, the organism, and the entry version, and note the release date shown on the site. This is standard practice when publishing results derived from UniProt.

For model organisms, remember that endogenous tagging data often exists outside sequence databases. In Drosophila, standardized genomic tagging resources allow protein expression, localization, and dynamics to be followed at the endogenous locus with fluorescent tags, which supports live imaging that antibodies cannot [3]. If your downstream question is about protein dynamics during development rather than transcript-level expression, these organism-specific resources complement what any sequence database can tell you.

Automate the full pipeline once your query is stable. Wrap the curl call in a shell script or use Python requests, write the accession and version to a manifest file alongside the TSV, and rerun the whole thing before each analysis cycle. Because UniProt updates continuously, a pipeline you can rerun in one command keeps your developmental annotation set synchronized with the current release rather than frozen at the date you first downloaded it.

Common Mistakes and Limitations

These are the mistakes that account for most failed or misleading searches.

Searching unreviewed entries and trusting the result. Unreviewed TrEMBL entries are annotated by automated similarity-based systems. A developmental statement copied by similarity from a distant ortholog is not the same as curated evidence. Filter to reviewed:true unless you have a specific reason not to.

Assuming absence of a Developmental stage section means absence of developmental expression. The comment exists only where curators have written it. A protein can have extensive developmental expression data in Expression Atlas, which contains over 4500 studies across 67 species [5], while its UniProt entry still lacks the comment because curation lags or the underlying study has not been prioritized. Always check the cross-references before concluding the data does not exist.

Confusing developmental stage with disease stage. Several well-known proteins have expression described in relation to disease progression rather than organismal development. A review of S100A6, for example, summarizes its expression across pathological states and its correlation with cancer stage and progression [7]. If you search comment text for "stage" without specifying developmental context, you will pull in tumor staging language that has nothing to do with embryology. Filter explicitly for embryonic, larval, pupal, juvenile, or gestational terms.

Reading the annotation without checking the evidence tag. Every statement on a UniProt entry carries evidence. A developmental stage claim backed by an experimental manual assertion deserves different treatment than one inferred electronically. Hover or click the evidence tag and note which it is before you plan an experiment around the statement.

Ignoring entry version when quoting results. A statement true in release 2024_01 may be revised later. If you publish or share numbers derived from UniProt, pin the version, otherwise your colleagues cannot reproduce your counts.

Expecting quantitative values in the comment text. Developmental stage comments are qualitative prose with literature links. They will not contain normalized abundance values. For quantities, move to Expression Atlas, which includes bulk baseline studies, GTEx tissue profiles, and single-cell atlases [5], or to proteomics-specific resources such as MOPED [6].

Overlooking the annotation feedback loop. UniProt annotations, including its subcellular localization and other comment data, are themselves used as training and benchmark datasets for prediction tools [8]. This is a strength for coverage but means predicted or inferred statements in one database can propagate into tools whose outputs you then compare back against UniProt. Trace high-stakes claims to the primary literature rather than to chains of prediction.

One structural limitation to accept. Coverage is organism-biased. Humans and classic model organisms carry the densest curation, mirroring where the literature investment sits. For a neglected organism, your realistic path is orthology: find the reviewed entry for the closest well-studied ortholog, read its developmental annotation, and treat it as a hypothesis about your organism rather than an observation of it.

How to Verify Your Results Are Correct

Three checks catch nearly every error in this workflow.

First, spot-check entries against the website. Pull three to five accessions from your bulk TSV, open each on the UniProt site, and confirm the Developmental stage or Tissue specificity text matches what your script extracted. If your regex or column mapping is wrong, this catches it in minutes.

Second, verify organism and review status in the output itself. Include the organism_name and reviewed fields in your REST query so the exported table is self-documenting. A row labeled reviewed that does not say true indicates your query string was malformed.

Third, confirm counts are internally consistent. Run the same query twice, once with the search endpoint and once with the streaming endpoint, and compare the row counts. They should match. A mismatch usually means a truncation, an unescaped character in the query, or a pagination issue.

Finally, sanity-check biology. A protein annotated as restricted to oocytes should not appear in your set of entries described as ubiquitous in adult skeletal muscle. When an extracted statement contradicts basic expectations for that gene, open the entry page and read the full comment in context, because partial text extraction out of a TSV column is the most common way context gets lost.

Where to Go Next Beyond UniProt

UniProt is the annotation backbone, but a complete developmental expression analysis usually draws on a stack of resources.

Expression Atlas is the natural first extension. It is EMBL-EBI's knowledgebase for gene and protein expression across tissues, cell types, conditions, and species, with bulk and single-cell RNA-seq studies, expanded proteomics coverage, updated GTEx tissue profiles, community datasets such as Tabula Sapiens, and integration into Ensembl, UniProt, Europe PMC, and model organism resources including FlyBase and Gramene [5]. If UniProt gives you the sentence, Expression Atlas gives you the curve.

MOPED covers the proteomics side. It enables rapid browsing of protein expression information from publicly available mass spectrometry studies on humans and model organisms, with quantitative data from standardized analysis, sorting by false discovery rate and expression, and links to UniProt, KEGG, Reactome, and other databases [6]. When you want observed protein-level abundance rather than transcript-level inference, this is where to look.

Organism-specific resources handle developmental questions at resolutions a pan-protein database cannot. For Drosophila, the tagging-based approaches described above give live imaging of protein dynamics at endogenous loci [3]. For mouse, stage-by-stage protein expression studies such as the Phex ontogeny analysis show the granularity of what primary developmental literature offers [2].

Prediction tools fill gaps where no data exists, but use them with the caveat above. Several web-based subcellular localization predictors for human proteins were evaluated systematically, and the evaluation itself built a fresh benchmark dataset from the latest UniProt release [8]. The lesson generalizes to developmental annotations: prediction output is only as good as the curated substrate underneath it, and the substrate changes with every release.

A practical sequencing of the whole stack looks like this. Start in UniProt to establish what is curated, which keywords and comments apply, and which accessions matter. Move to Expression Atlas for quantitative profiles across the developmental stages your organism's data actually covers. Check MOPED or organism-specific resources for protein-level confirmation. Finish by reading two or three of the primary papers linked from the UniProt entry, because those papers, whether they report tagging-based localization in flies [3], semi-quantitative immunohistochemistry in tissue sections [4], or stage-by-stage embryonic expression in mouse [2], are where the annotation sentences originally came from.

Frequently Asked Questions

Does UniProt have developmental stage expression data for every protein?

No. Developmental stage comments are written by curators from the primary literature, so they exist mainly for well-studied proteins in human, mouse, and other heavily researched organisms. Most of the over 120 million proteins in UniProtKB lack any developmental annotation at all [1].

What is the difference between reviewed and unreviewed UniProt entries?

Reviewed entries are manually annotated by expert curators with literature-based evidence, while unreviewed entries receive automatic, computationally generated annotations. For developmental stage expression work, restrict your queries with reviewed:true because the developmental stage comment is a curated feature.

How do I download developmental stage annotations for many proteins at once?

Run a query such as reviewed:true AND organism_id:9606 AND cc_developmental_stage:* in the UniProt search bar and use the Download button for TSV output, or call the REST API with curl and the fields=accession,id,gene_primary,cc_developmental_stage parameter. For large result sets use the streaming endpoint, which returns all rows in a single request.

Why is the Developmental stage section missing from my protein of interest?

Decision path for a missing Developmental stage section, from review status to cross-references, wider searches and orthologs.

The section appears only where curators have written a developmental stage comment, which requires published stage-specific expression data and curation priority. Check the cross-references for Expression Atlas or Bgee before concluding that developmental expression data does not exist anywhere, since those resources may hold quantitative profiles the UniProt entry does not yet summarize [5].

Can I get developmental expression data for non-model organisms in UniProt?

Coverage for non-model organisms is thin because curation follows the literature. The practical approach is to find the reviewed entry for the closest well-studied ortholog, read its developmental annotation, and treat it as a hypothesis to verify in your organism rather than as a direct observation.

What do the evidence tags on UniProt annotations mean?

Each annotation carries a tag indicating whether it is manually asserted based on experiment, manually inferred by a curator, or automatically generated. Experimental manual assertions are the most reliable category, and you should check the tag before building an experiment on any developmental statement.

How should I cite a UniProt entry in a paper or thesis?

Cite the accession, the organism, and the entry version number with the release date shown on the site, for example "UniProtKB P04637 (human), version 200, release 2024_01." UniProt distributes its data under a CC-BY 4.0 license, so derived results can be published freely [1].

Where else should I look for developmental expression data besides UniProt?

Expression Atlas is the primary next stop, with over 4500 expression studies across 67 species including single-cell datasets [5]. MOPED provides protein-level mass spectrometry expression browsable by organism and condition with links back to UniProt [6], and organism-specific databases and primary literature supply the finest developmental resolution.

Sources

  1. UniProt: a worldwide hub of protein knowledge
  2. Ontogeny of Phex/PHEX Protein Expression in Mouse Embryo and Subcellular Localization in Osteoblasts
  3. Gene Tagging Strategies To Assess Protein Expression, Localization, and Function in Drosophila
  4. Semi-quantitative Determination of Protein Expression using Immunohistochemistry Staining and Analysis: An Integrated Protocol
  5. Expression Atlas in 2026: enabling FAIR and open expression data through community collaboration and integration
  6. MOPED: Model Organism Protein Expression Database
  7. S100A6 Protein-Expression and Function in Norm and Pathology
  8. Critical evaluation of web-based prediction tools for human protein subcellular localization