EAN & UPC GTIN Product Lookup Database avatar

EAN & UPC GTIN Product Lookup Database

Pricing

$0.25 / 1,000 ean/gtins

Go to Apify Store
EAN & UPC GTIN Product Lookup Database

EAN & UPC GTIN Product Lookup Database

Instantly retrieve detailed info about manufacturer, title, descriptions and country using EAN, UPC, or GTIN codes. The ultimate database solution for e-commerce data enrichment.

Pricing

$0.25 / 1,000 ean/gtins

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

2

Bookmarked

121

Total users

5

Monthly active users

12 days ago

Last modified

Share

GTIN Database Scraper

Apify Actor and CLI tool for GTIN/EAN/UPC product information. Uses the ShoppingScraper API — a single API call per GTIN returns all product data.

Apify Actor

Actor Features

  • Batch processing: Up to 100 GTINs per run
  • Free tier: 100 GTINs maximum for free users
  • Paid tier: Unlimited GTINs for paid users
  • Async processing: 25 concurrent requests
  • Global or country-specific: Optional country filter
  • Single API source: product fields (title, description, brand, product name, net content, image, website, ASIN) and the full GS1 registry block (manufacturer, company prefix, GLN, licence type, member organisation, licensee address, country of origin) from one endpoint
  • You pay for rows that carry data: a GTIN that comes back empty is not put in the dataset and is not charged

Actor Input

{
"gtins": [
"8714612112816",
"8719327348963",
"5702016913262",
"7421957579501",
"4009839372766"
],
"country": "nl"
}

Input Fields:

  • gtins (required): Array of GTIN/EAN/UPC codes (max 100 per batch)
  • country (optional): Two-letter country code (e.g., "nl", "de", "us") — defaults to "uk"

Actor Output

One dataset row per GTIN that returned data:

{
"gtin": "8714612112816",
"barcode_format": "EAN-13",
"title": "",
"description": "",
"brand_name": "",
"product_name": "",
"manufacturer": "XD Connects B.V.",
"country_origin": "Netherlands",
"address": "2288 GK Lange Kleiweg 6-28 RIJSWIJK ZH Netherlands",
"gs1_company_prefix": "8714612",
"gln_number": "",
"license_type": "GS1 Company Prefix",
"gs1_member_org": "GS1 Netherlands",
"net_content": "",
"image_url": "",
"website": "",
"asin": "",
"code_category": "",
"status": "found",
"charged": true,
"data_fields": ["manufacturer", "gs1_company_prefix", "license_type", "gs1_member_org", "country_origin", "address"]
}

Most barcodes carry no marketing title. The GS1 registry block is what comes back, and data_fields names exactly which fields this row has a value for.

What you are charged for

You are charged per dataset row, so a row only reaches the dataset when it carries at least one real fact about the product or its licensee — any of title, description, brand_name, product_name, net_content, image_url, website, asin, code_category, manufacturer, gln_number, gs1_company_prefix, license_type, gs1_member_org, country_origin, address.

gtin and barcode_format do not count. The first echoes what you sent and the second is derived from its length, so a row holding only those two tells you nothing you did not already know.

GTINs that produce nothing are not in the dataset and are not billed. They are still reported, in the UNCHARGED key-value record, which the run's Output tab links:

{
"count": 2,
"gtins": [
{"gtin": "9999999999994", "status": "not_found", "reason": "not_found"},
{"gtin": "8719327348963", "status": "lookup_failed", "reason": "http_502"}
]
}
  • not_found — the lookup completed and this barcode has no record. A real answer.
  • lookup_failed — the lookup itself did not get through, so the barcode may well exist. Worth retrying.

The run's OUTPUT record carries the counts: charged, notCharged, found, notFound, lookupFailed.


Local/CLI Usage

Setup

$source .venv/bin/activate && uv pip install -r requirements.txt

Run

python3 interactive_scraper.py
python3 interactive_scraper.py --country nl

Features

  • Accepts all formats: UPC (12), EAN-8 (8), EAN-13/GTIN-13 (13), GTIN-14 (14)
  • Auto-normalization: Pads shorter GTINs to 13 digits with leading zeros
  • 25 concurrent requests with connection pooling
  • Retry with exponential backoff (3 attempts with jitter)
  • Timing metrics: Total time, time per EAN, match rate
  • Double enter as input termination