How to Find the Mature Protein Sequence in UniProt
By Dr. Zubair Khalid, DVM, MS, PhD ·

By the end of this guide you will be able to take any UniProt accession, such as P02768 for human serum albumin, and produce the exact mature protein sequence: the residues that remain after the signal peptide, transit peptide, and propeptide have been removed. You will learn to read the processing annotations on the UniProt website, then to automate the same extraction against the UniProt REST API in Python or R, and finally how to verify that the slice you cut is the right one.
This is a focused UniProt database tutorial for one job. If you are learning how to use UniProt for the first time, the same three skills cover most of what you need: search, filter to reviewed entries, and read the Sequence section. You need a browser for the website route. For the scripted route you need Python 3 (standard library only) or R 4.x with the UniprotR package from CRAN, which was built to retrieve and visualize protein sequence and functional information from UniProtKB as data frames, CSV files, and graphs [1]. No local database copies are required, because UniProt serves everything over the web under a CC BY 4.0 license [2].
What a Mature Protein Sequence Is in UniProt
UniProtKB stores one canonical sequence per entry. For most secreted and organellar proteins, that canonical sequence is the precursor, the full translation product as it comes off the ribosome, before any processing. The mature protein sequence is the processed product: what remains after N-terminal targeting sequences and propeptides are cut away, plus any chains or peptides that are released.
UniProt annotates processing with a fixed set of feature types in the Processing group of the Sequence section. The scale of the resource matters for how you read it. As of the 2021 Nucleic Acids Research report, UniProtKB held approximately 190 million sequences, split into reviewed entries (Swiss-Prot, curated by staff who extract annotations from the literature) and unreviewed entries (TrEMBL, annotated by automated systems such as the Association-Rule-Based Annotator) [2]. Reviewed status matters here, because processing sites in reviewed entries are usually backed by literature or experimental evidence, while in TrEMBL entries they may be pure predictions.
The feature types that define the mature product are the following.
| UniProt feature | Flat-file tag | What it marks | Part of the mature product? |
|---|---|---|---|
| , - | , - | , - | , - |
| Signal peptide | SIGNAL | N-terminal secretion signal, cleaved by signal peptidase during export | No |
| Transit peptide | TRANSIT | N-terminal tag that targets a protein into an organelle such as a mitochondrion or chloroplast, removed after import | No |
| Propeptide | PROPEP | Segment removed to activate the protein or assist folding, can sit at either end | No |
| Chain | CHAIN | A mature, constitutive chain released by processing | Yes |
| Peptide | PEPTIDE | A released active peptide, such as the insulin C-peptide | Yes |
| Initiator methionine | INIT_MET | The first methionine, which may be removed after translation | Usually no |
A worked example makes the vocabulary concrete. Human serum albumin (P02768) is a 609-residue precursor. The Processing features read: signal peptide 1..18, propeptide 19..24, chain 25..609 named Serum albumin. The mature protein is therefore residues 25 through 609, 585 amino acids, beginning DAHKSEVAHR. Both cleavages count. If you remove only the signal peptide, you still carry six propeptide residues that are absent from the albumin circulating in blood.
An accession is the stable identifier of an entry (P02768 in this example). The canonical sequence is the default representative sequence of that entry, as opposed to isoforms produced by alternative splicing, which have their own sequences and coordinates.
Why the Precursor-to-Mature Boundary Matters
Three lines of classic experimental work explain why the exact boundary matters and why you should not trim residues by eye.
Export depends on the mature sequence, not only the signal peptide. Studies of maltose-binding protein secretion across the E. coli cytoplasmic membrane showed that the mature protein sequence itself influences export [3]. N-terminal sequencing of the leucine-specific binding protein established its precursor processing and revealed conformational differences between the precursor and the mature form [4]. Genes for the alkaline and neutral proteases of Bacillus amyloliquefaciens encode signal, pro, and mature regions as separate segments, with a large open reading frame between the signal and mature coding regions [5].
The mature N-terminus carries functional information of its own. The net charge of the first 18 residues of the mature sequence affects translocation across the cytoplasmic membrane of Gram-negative bacteria [6]. Altering the amino terminus of the mature sequence of a periplasmic protein can severely impair export [7]. Substitutions in the mature portion of maltose-binding protein can suppress signal sequence mutations [8]. Three independent systems point at the same conclusion: the first residues after the cleavage site are load-bearing, so an off-by-one error in your extraction is not cosmetic.
Practical work downstream assumes the mature product. Recombinant expression constructs, structural models, and epitope maps are all built on the mature sequence. Reverse vaccinology pipelines, for example, pull target proteins in FASTA format from UniProt and map predicted B-cell and T-cell epitopes onto them [9]. If the input carries 24 extra N-terminal residues, every downstream coordinate shifts.
How to Find the Mature Protein Sequence in UniProt on the Website (Step by Step)
Step 1. Search for the protein. Open https://www.uniprot.org and type the accession (P02768) or the protein name (human serum albumin) into the search box. The accession is the most reliable query because it resolves to exactly one entry.
Step 2. Filter to reviewed entries. On the results page, restrict to Reviewed (Swiss-Prot). Reviewed entries carry curator-checked annotations extracted from the literature, while unreviewed TrEMBL entries rely on automated annotation [2]. For mature-sequence work this distinction matters, because a predicted signal peptide in an unreviewed entry may not match the experimentally verified cleavage site.
Step 3. Open the entry and scroll to the Sequence section. The feature viewer at the top of that section draws the Processing track. Each block is a feature, and hovering over it shows its type, position, description, and evidence.
Step 4. Read the Processing features. For P02768 the track shows signal peptide 1..18, propeptide 19..24, and chain 25..609 (Serum albumin). Click the Chain block to highlight residues 25 to 609 in the sequence display, which lets you confirm the boundaries visually before you download anything.
Step 5. Download the FASTA. Use the Download control in the Sequence section and choose FASTA. The file starts with a header line like this, followed by the 609-residue precursor in 60-character lines:
>sp|P02768|ALBU_HUMAN Serum albumin OS=Homo sapiens OX=9606 GN=ALB PE=1 SV=2
The header grammar is worth learning once. sp marks a reviewed Swiss-Prot entry (unreviewed entries show tr instead), P02768 is the accession, ALBU_HUMAN is the entry name, OS is the organism, OX is the NCBI taxonomy identifier, GN is the gene, PE is the protein evidence level (PE=1 means evidence at the protein level, the highest of five), and SV is the sequence version.
Step 6. Cut out the mature range. Take residues 25 through 609 of the downloaded sequence. The result is the mature chain, 585 residues:
>ALBU_HUMAN mature chain 25-609 (585 aa)
DAHKSEVAHRFKDLGEENFKALVLIAFAQYLQQCPFEDHVKLVNEVTEFAKTCVADESAE...
That is the complete website workflow. The next section replaces steps 5 and 6 with a script, which is the better route when you have more than a handful of proteins.
Extract the Mature Sequence with the UniProt REST API
The website route works for one protein. For a panel of proteins, or for a reproducible pipeline, use the REST API at rest.uniprot.org. Three URLs cover the whole job.
| What you want | URL | What you get |
|---|---|---|
| , - | , - | , - |
| Canonical sequence | https://rest.uniprot.org/uniprotkb/P02768.fasta | FASTA with one header line and the precursor sequence |
| Feature coordinates | https://rest.uniprot.org/uniprotkb/P02768.json | Full entry as JSON, with a features array holding every Chain, Peptide, Signal, Propeptide, and Transit peptide position |
| Human-readable flat file | https://rest.uniprot.org/uniprotkb/P02768.txt | Flat file with FT feature lines you can read at a glance |
The flat file is the fastest way to see the annotation by eye. The relevant lines for P02768 look like this:
FT SIGNAL 1..18
FT PROPEP 19..24
FT /note="Propeptide"
FT CHAIN 25..609
FT /note="Serum albumin"
A complete Python walkthrough

The script below downloads the canonical FASTA and the entry JSON, finds every Chain feature, and slices the mature sequence. It uses only the Python standard library.
import json
import urllib.request
BASE = "https://rest.uniprot.org/uniprotkb/"
def fetch(url):
request = urllib.request.Request(
url, headers={"User-Agent": "mature-seq-example/1.0"}
)
with urllib.request.urlopen(request) as response:
return response.read().decode()
def get_mature_chains(accession):
fasta_text = fetch(BASE + accession + ".fasta")
header = fasta_text.splitlines()
sequence = "".join(fasta_text.splitlines()[1:])
entry = json.loads(fetch(BASE + accession + ".json"))
chains = []
for feature in entry["features"]:
if feature["type"] == "Chain":
start = feature["location"]["start"]["value"]
end = feature["location"]["end"]["value"]
chains.append(
(feature["description"], start, end, sequence[start - 1:end])
)
return header, sequence, chains
header, sequence, chains = get_mature_chains("P02768")
print(header)
if not chains:
print("No Chain feature. The canonical sequence is already the mature product.")
for description, start, end, mature in chains:
print(f"{description}: {start}..{end} ({len(mature)} aa)")
print(mature[:60] + "...")
Expected output:
>sp|P02768|ALBU_HUMAN Serum albumin OS=Homo sapiens OX=9606 GN=ALB PE=1 SV=2
Serum albumin: 25..609 (585 aa)
DAHKSEVAHRFKDLGEENFKALVLIAFAQYLQQCPFEDHVKLVNEVTEFAKTCVADESAE...
The parameters that matter are the accession and the feature type filter. Change the accession to retarget the script. Change the filter from Chain to Peptide when you want released peptides instead of mature chains.
The one calculation you must get right is the indexing offset. UniProt coordinates are 1-based and inclusive. Python string indices are 0-based with an exclusive end. Residues 25..609 therefore correspond to sequence[24:609], which is what the expression sequence[start - 1:end] computes. You can confirm the arithmetic directly:
mature = sequence[24:609]
assert len(mature) == 609 - 25 + 1 == 585
Common API errors and their fixes
Wrong or retired accession. The call fails with:
urllib.error.HTTPError: HTTP Error 404: Not Found
Check the accession on the website first. If an entry was merged into another one, the old accession may stop resolving, and the website search will show you the current accession to use.
Response is not JSON. If the URL is malformed or a network error page comes back, json.loads fails with:
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Print the raw response text, confirm the URL ends in .json, and retry. The fetch helper above makes this easy because every response passes through a single function.
No Chain feature. If you write chains on an entry without processing, you get:
IndexError: list index out of range
Iterate over the list instead of indexing it, and fall back to the canonical sequence, as the script already does.
Large batches. UniProt is a public shared service. For hundreds of accessions, add a pause between requests:
import time
for accession in ["P02768", "P01308", "P61626"]:
header, sequence, chains = get_mature_chains(accession)
print(header)
for description, start, end, mature in chains:
print(f"{description}: {start}..{end} ({len(mature)} aa)")
time.sleep(1)
Expected output for the three accessions includes:
Insulin B chain: 25..54 (30 aa)
Insulin A chain: 90..110 (21 aa)
Lysozyme C: 19..148 (130 aa)
Batch search for many proteins
To find accessions in bulk, use the search endpoint. Its parameters mirror the website search box.
import urllib.parse
query = "reviewed:true AND organism_id:9606 AND gene:ALB"
url = (
"https://rest.uniprot.org/uniprotkb/search?query="
+ urllib.parse.quote(query)
+ "&format=tsv&fields=accession,id,protein_name,length"
)
print(fetch(url))
The query terms are the parameters that matter here. reviewed:true restricts results to Swiss-Prot, organism_id:9606 is the NCBI taxonomy identifier for human, and gene:ALB matches the gene name. format=tsv returns a spreadsheet-friendly table, and fields selects the columns. The output is a header row followed by one row per match:
accession id protein_name length
P02768 ALBU_HUMAN Serum albumin 609
Feed the resulting accessions into the per-entry loop above to slice mature chains at scale.
R option with UniprotR
If you work in R, UniprotR retrieves sequence and functional information from UniProtKB and returns it as data frames, CSV files, and publishable graphs, which is the package's stated purpose [1].
install.packages("UniprotR")
library(UniprotR)
acc <- c("P02768", "P01308")
seqs <- GetSequence(acc)
Once a sequence string is in R, the coordinates line up naturally. R positions are 1-based, matching UniProt numbering, so substr() needs no offset:
mature_albumin <- substr(albumin_seq, 25, 609)
nchar(mature_albumin) # returns 585
That 1-based match is a small but real advantage over Python for this particular task.
Tips for Checking That Your Mature Sequence Is Correct
Do the arithmetic first. Mature length equals end minus start plus one. For albumin, 609 - 25 + 1 = 585. If your slice is 584 or 586 residues, you have an off-by-one error.
Check the mature N-terminus against the literature. For classic bacterial periplasmic proteins, protein sequencing established the mature N-termini and showed that precursor and mature forms can differ in conformation [4]. If the mature N-terminus of your protein is known from sequencing, your slice must reproduce it exactly, residue for residue.
Run an exact-match peptide search. Paste the first 20 to 30 residues of your slice at https://peptidesearch.uniprot.org. The search should return your accession. A miss usually means an off-by-one error, the wrong isoform, or the wrong entry.
Read the evidence, not just the position. In the entry, each feature carries evidence badges. Experimental evidence outranks predictions. In unreviewed entries, processing sites can be automated predictions with no experimental backing [2], so treat their mature boundaries as provisional.
Reconcile numbering with structures before comparing. PDB author numbering may include the signal peptide or the N-terminal methionine, so residue numbers in a structure file often do not match UniProt positions [10]. Tools such as PDBrenum renumber PDB files to match UniProt sequences using the SIFTS mapping [10], which removes the guesswork when you map a mutation or a domain boundary onto a structure.
For unreviewed entries with predicted signal peptides, confirm the cleavage site with a dedicated signal peptide predictor before committing to an expression construct.
With the mature sequence verified, sensible next steps are cloning the mature coding region into an expression vector, mapping variants and domains onto mature numbering, and building homology alignments. UniProt is the standard search space for homolog collection, and metagenome sequence databases extend alignment depth for poorly populated protein families [11].
Special Cases: Multi-Chain Products, Transit Peptides, and Propeptides
Insulin: two mature chains from one precursor
Human insulin (P01308) is a 110-residue precursor. The Processing track reads: signal peptide 1..24, chain 25..54 (Insulin B chain), peptide 57..87 (C-peptide), and chain 90..110 (Insulin A chain). Mature insulin is two chains, 30 and 21 residues, held together by disulfide bonds that UniProt annotates as DISULFID features. There is no single contiguous mature sequence to slice. The C-peptide carries a Peptide feature because it is released during processing, not because it is part of the secreted hormone.
Transit peptides and organellar proteins
Mitochondrial and chloroplast proteins carry N-terminal transit peptides that are removed after import. UniProt annotates them as Transit peptide features, and the mature chain starts where the transit peptide ends. Processing in this compartment is context dependent: the mature portion of a precursor can determine whether a mitochondrial signal sequence functions at all, as fusion experiments with rhodanese and mitochondrial aldehyde dehydrogenase showed [12]. Take the annotated transit peptide boundary as the start of the mature chain, and check its evidence.
Propeptides that help the mature protein fold
A propeptide is not always disposable. The pro-sequence of potato carboxypeptidase inhibitor influences folding of the mature protein [13]. When you express only the mature region, you are producing the final product without its folding helper, which can change yield and conformation.
Mature proteins that keep their signal peptide
Not every N-terminal hydrophobic segment is cleaved. Rabbit and human serum paraoxonase are documented cases in which the mature protein retains its signal sequence [14]. The practical rule is to read the entry rather than assume: if UniProt annotates the signal peptide as retained, or annotates no cleavage at all, the canonical sequence is already the mature product.
Precursor and mature sequences from different experimental sources
When you trace an entry back to its source publications, check which form was sequenced. The bovine ATP synthase gamma-subunit work reported the cDNA of the import precursor and the genomic sequence of the mature protein [15]. The cytochrome c553 study paired the gene sequence with characterization of the mature protein [16]. A cDNA gives you the precursor, a mature-protein study gives you the product, and UniProt reconciles both into one entry with explicit processing features.
Common Mistakes and Limitations

- Off-by-one errors between UniProt and Python. UniProt coordinates are 1-based and inclusive, Python slices are 0-based with an exclusive end. Residues 25..609 are sequence[24:609]. Writing sequence[25:609] silently drops the first mature residue, which is precisely the residue that export machinery and antibodies see.
- Slicing an isoform instead of the canonical sequence. Feature coordinates refer to the canonical sequence displayed in the entry. If you download an isoform FASTA, its extra or missing exons shift every coordinate. Either slice the canonical sequence or recompute the coordinates from the isoform's own annotation.
- Stopping at the signal peptide. Albumin needs both cleavages. The Chain start already accounts for signal peptide plus propeptide, which is why the mature chain begins at 25 and not at 19.
- Assuming every N-terminal extension is cleaved. Some mature proteins retain their signal sequence [14], and others are processed at the C-terminus or internally. Scan all Processing features before you cut.
- Trusting unreviewed annotations blindly. TrEMBL entries are annotated by automated systems [2]. A predicted signal peptide cleavage site can be off by several residues. Check the evidence badge, and for important constructs verify the boundary experimentally.
- Mixing numbering systems between UniProt and PDB. Structure files often use author numbering that includes the signal peptide or the initiator methionine [10]. Map to UniProt numbering before comparing a mutation, a ligand contact, or a domain boundary.
- Editing the mature N-terminus casually. Adding a purification tag, a start codon, or an extra residue at the mature N-terminus changes the sequence that the export machinery encounters. The first residues of the mature product are functionally load-bearing, so treat tag placement as an experimental variable, not a formatting choice.
- Expecting one mature sequence per entry. Multi-chain products such as insulin have several mature chains. Proteins without processing have no Chain feature, and their canonical sequence is already the mature product.
- Limitations of the annotation itself. UniProt reflects current knowledge and curation priorities [2]. Processing can be predicted rather than measured, and rare processing events may be absent. For critical applications, confirm the mature N-terminus by N-terminal sequencing or mass spectrometry. Individual proteins and experiments also need expert judgment about expression context, folding helpers such as propeptides, and tag placement.
Frequently Asked Questions
What is the difference between the precursor and the mature protein sequence in UniProt?
The precursor is the full canonical translation product, including the signal peptide, transit peptide, and any propeptide. The mature sequence is the processed product, marked by Chain or Peptide features, and you extract it by slicing the canonical sequence at those feature coordinates.
Where in a UniProt entry is the mature sequence annotated?
In the Sequence section, in the Processing track of the feature viewer. The Chain feature gives the mature range directly, for example 25..609 in human serum albumin, and the flat file shows the same ranges as FT lines.
How do I extract residues 25 to 609 from a UniProt FASTA file without an off-by-one error?
In Python, subtract one from the start and keep the exclusive end: sequence[24:609]. In R, substr(sequence, 25, 609) works as written, because R is 1-based like UniProt.
Does every UniProt entry have a Chain feature?
No. Entries without processing have no Chain feature, and the canonical sequence is already the mature product. Some entries have several Chain features, one per mature chain, as insulin does.
Can I download mature sequences for many proteins at once?
Yes. Query the REST API search endpoint to collect accessions, then loop over each entry, read its Chain features from the JSON, and slice the FASTA. Add a short pause between requests to use the shared service politely.
Why does my mature sequence not match the numbering in a PDB structure?
Structure files use author numbering, which often includes the signal peptide or the initiator methionine. Renumber the structure against UniProt with a tool such as PDBrenum before comparing positions.
What is the difference between a Chain feature and a Peptide feature?
A Chain feature marks a mature constitutive chain, the standing product of processing. A Peptide feature marks a released peptide, such as the insulin C-peptide, which is cut out of the precursor and discarded from the active hormone.
How do I cite UniProt?
Cite the accession you used together with the current UniProt Knowledgebase report in Nucleic Acids Research [2]. UniProt data are free to use and redistribute under a CC BY 4.0 license [2].
Sources
- UniprotR: Retrieving and visualizing protein sequence and functional information from Universal Protein Resource (UniProt knowledgebase).
- UniProt: the universal protein knowledgebase in 2021
- Role of the mature protein sequence of maltose-binding protein in its secretion across the E. coli cytoplasmic membrane.
- Amino-terminal sequence and processing of the precursor of the leucine-specific binding protein, and evidence for conformational differences between the precursor and the mature form.
- Genes for alkaline protease and neutral protease from Bacillus amyloliquefaciens contain a large open reading frame between the regions coding for signal sequence and mature protein
- The Net Charge of the First 18 Residues of the Mature Sequence Affects Protein Translocation across the Cytoplasmic Membrane of Gram-Negative Bacteria
- Alteration of the amino terminus of the mature sequence of a periplasmic protein can severely affect protein export in Escherichia coli.
- Suppression of a signal sequence mutation by an amino acid substitution in the mature portion of the maltose-binding protein
- Design and Validation of a Multi-Epitope mRNA Vaccine Construct Against Human Monkeypox Virus (hMPXV) by Annotating Protein of Intracellular Mature Virus (IMV) Form of hMPXV
- PDBrenum: A webserver and program providing Protein Data Bank files renumbered according to their UniProt sequences
- Protein contact prediction using metagenome sequence data and residual neural networks
- Influence of the Mature Portion of a Precursor Protein on the Mitochondrial Signal Sequence*
- Analysis of the effect of potato carboxypeptidase inhibitor pro-sequence on the folding of the mature protein.
- Characterization of cDNA clones encoding rabbit and human serum paraoxonase: the mature protein retains its signal sequence.
- ATP synthase from bovine mitochondria: complementary DNA sequence of the mitochondrial import precursor of the gamma-subunit and the genomic sequence of the mature protein.
- The 18 kDa cytochrome c553 from Heliobacterium gestii: gene sequence and characterization of the mature protein.