UPC Barcode Decoder

Read UPC-A and UPC-E barcodes to extract product numbers and check digits

UPC
Example: 036000291452

Our free UPC barcode decoder reads UPC-A and UPC-E retail product codes from an image or entered value. UPC-A contains a 12-digit GTIN, including its check digit, while UPC-E is a shortened symbol that represents a UPC-A number. The digits identify a trade item; they do not directly contain its name or price.

Need to decode UPC barcodes in your app?

Copy the example below to get started using our free Barcode Parser API. No API key needed.

cURL Node.js Python C# Go PHP Java HTML
barcode=$'036000291452'
curl -sS -G https://parser.orcascan.com/ \
    --data-urlencode "barcode=$barcode" \
    --data-urlencode 'type=upc'
// Node.js 18+
var barcode = "036000291452";
var url = "https://parser.orcascan.com/?barcode=" + encodeURIComponent(barcode) + "&type=upc";

fetch(url)
    .then(function(res) { return res.json(); })
    .then(console.log);
import json
from urllib.parse import quote
from urllib.request import urlopen

barcode = "036000291452"
url = "https://parser.orcascan.com/?barcode=" + quote(barcode, safe="") + "&type=upc"

with urlopen(url) as response:
    print(json.load(response))
using System;
using System.Net.Http;

var barcode = "036000291452";
var url = "https://parser.orcascan.com/?barcode=" + Uri.EscapeDataString(barcode) + "&type=upc";

using var client = new HttpClient();
Console.WriteLine(await client.GetStringAsync(url));
package main

import (
    "io"
    "net/http"
    "net/url"
    "os"
)

func main() {
    barcode := "036000291452"
    endpoint := "https://parser.orcascan.com/?barcode=" + url.QueryEscape(barcode) + "&type=upc"
    res, err := http.Get(endpoint)
    if err != nil { panic(err) }
    defer res.Body.Close()
    io.Copy(os.Stdout, res.Body)
}
<?php
$barcode = "036000291452";
$url = "https://parser.orcascan.com/?barcode=" . rawurlencode($barcode) . "&type=upc";

echo file_get_contents($url);
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;

class BarcodeParser {
    public static void main(String[] args) throws Exception {
        String barcode = "036000291452";
        String url = "https://parser.orcascan.com/?barcode=" +
            URLEncoder.encode(barcode, StandardCharsets.UTF_8) + "&type=upc";
        var request = HttpRequest.newBuilder(URI.create(url)).build();
        var response = HttpClient.newHttpClient().send(
            request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
<!doctype html>
<html>
<body>
<pre id="result">Loading...</pre>
<script>
var barcode = "036000291452";
var url = "https://parser.orcascan.com/?barcode=" + encodeURIComponent(barcode) + "&type=upc";
fetch(url)
    .then(function(res) { return res.json(); })
    .then(function(json) {
        document.getElementById("result").textContent = JSON.stringify(json, null, 2);
    });
</script>
</body>
</html>

Need to decode lots of UPC barcodes?

Import a spreadsheet of barcodes and automatically extract their data into separate columns.

Decode barcodes in bulk →

Need to extract UPC data as you scan?

Scan barcodes with your phone and automatically capture their data in a shared spreadsheet.

Scan with your phone →

Frequently asked questions

How are UPC-A and UPC-E encoded differently?

UPC-A represents a 12-digit GTIN. UPC-E uses a compressed eight-digit representation of qualifying UPC-A numbers; decoding UPC-E can expand it back to UPC-A.

What does the last digit of a UPC-A mean?

The twelfth digit is a modulo-10 check digit calculated from the preceding eleven digits. It helps detect reading or entry errors.

Why does a UPC-A sometimes appear with a leading zero?

Some systems normalise GTINs to 13 or 14 digits by adding leading zeroes. These are padding for representation, not extra digits in the UPC-A symbol.

Need help tracking UPC barcodes?

We've helped organizations of all sizes tackle barcode challenges, chat with our team live for help to find a solution.