The world's most complete food intelligence API

Every product.
Every attribute.
Sub-50ms.

Two intelligence layers — scraped + AI-analysed — returning real certifications, per-ingredient allergen trees, 30+ clean label fields, religious compliance, NovaScore, EcoScore, sustainability flags, and full macros/micros. Across 5 million UPC-indexed products. Full payload on the free tier.

Label-sourced data
AI-qualified
UPC + ASIN indexed
GET /api/lookup?barcode=039978009579
$ curl -i -H "X-API-Key: YOUR_API_KEY" \ 'https://barcode-api-140543331861.asia-south1.run.app/api/lookup?barcode=039978009579'
5M+
UPC-indexed products
<50ms
Median response time
2 layers
Scraped + AI-analysed
30+
Clean label fields
6 scores
Nova · Eco · Nutri + more

The data structure no competitor ships

Every response has two root objects: scraped_data — direct from manufacturer and Amazon — and analysed_data — our AI qualification layer. Click a domain to explore the real fields.

General Data 12 fields
Allergens & Intolerances 14 fields
Clean Label 30+ fields
Dietary & Religious 12 fields
Nutrition Macros + Micros
Quality Scores 6 scores
Sustainability 6 flags
Certifications & Claims 8+ fields

General Data — analysed_data.generalData

Core product identity. Every product carries UPC-12, GTIN-14, brand, full category tree, net weight in two units, and pack configuration — standardised across all 5M products.

upc12
string
UPC-12 barcode
"039978009579"
gtin14
string
GTIN-14 / EAN
"00039978009579"
brandName / brandOwner
string
Normalised brand identity
"Bob's Red Mill"
category / subCategory
string
Two-level taxonomy
"Oatmeal" / "Steel Cut Oats"
segment / superCategory
string
Full category tree
"Breakfast Cereal"
netWeight1Value + UOM
float + string
Net weight in oz/g
96.0 oz / 2721.56 g
unitsPerPack
integer
Pack count
4
numberOfIngredients
integer
Ingredient count
1
storage
string
Storage instructions
"Store in a cool, dry place"
variant
string
Product variant descriptor
"Organic, Steel Cut"

Allergens & Intolerances — analysed_data.npiFoodPackagesAllergensIntolerances

Dual stated + qualified model for every allergen. Per-ingredient allergen trees nested inside the ingredients array — not just product-level booleans. Know exactly which ingredient is the risk.

eggStated / eggQualified
string pair
Egg allergen declared + AI-verified
"No" / "No"
dairyStated / dairyQualified
string pair
Dairy/casein split tracking
"No" / "No"
glutenLevelStated
string
Gluten-free level as stated on pack
"Gluten-free"
glutenQualified
string
AI-qualified gluten status
"Yes (gluten-free certified on pack)"
fishStated / fishQualified
string pair
Fish allergen tracking
"None" / "No"
fdaRegulatedAllergens
string
FDA FALCPA summary
"None declared"
falcpaCommonAllergensStated/Qualified
string pair
Big-9 allergen declaration
"No" / "No"
additionalInfo.traces
string
May-contain / cross-contamination warning
"May be processed in facility that handles tree nuts"
ingredients[].allergens
object per ingredient
11 allergen booleans on every ingredient
{Peanuts:false, Milk:false, Gluten:false...}
caseinStated / caseinQualified
string pair
Casein split from dairy
"No" / "No"

Clean Label — analysed_data.cleanLabel

30+ boolean/enum fields covering every clean-label dimension. Both stated (on-pack claim) and qualified (AI-verified) for each. The most comprehensive clean-label dataset in any food API.

artificialColorsStated/Qualified
string pair
Artificial colour flags
"No" / "No"
artificialFlavorsStated/Qualified
string pair
Artificial flavour flags
"No" / "No"
artificialSweetenersStated/Qualified
string pair
Artificial sweetener flags
"No" / "No"
preservativesStated/Qualified
string pair
Preservative presence
"No" / "No"
gmoPresenceStated/Qualified
string pair
GMO / Non-GMO status
"Non-GMO Project Verified" / "Non-GMO"
highFructoseCornSyrupStated/Qualified
string pair
HFCS tracking
"No" / "No"
madeInUsaStated
string
Country-of-origin claim
"Yes"
naturalColorsStated/Qualified
string pair
Natural colour verification
"Yes (no artificial colors)" / "Yes"
countOfIngredientsQualified
string
Ingredient simplicity rating
"Low (1 main ingredient)"
recognizableIngredientsQualified
string
Whole-food ingredient check
"Yes"
hormonesStated / antibioticsStated
string pair
Animal welfare signals
"No" / "No"
sugarAlcoholsStated/Qualified
string pair
Sugar alcohol detection
"No" / "No"

Dietary & Religious — analysed_data.additionalInfo

Product-level and per-ingredient dietary and religious compliance. Four religious labels, six dietary protocols. Nested on every ingredient — so you know exactly which ingredient breaks compliance.

dietary_preference.Vegan
boolean
Vegan compliant
true
dietary_preference.Vegetarian
boolean
Vegetarian compliant
true
dietary_preference.KetoFriendly
boolean
Keto-friendly
false
dietary_preference.LowFodmap
boolean
Low-FODMAP compliant
false
dietary_preference.Pescatarian
boolean
Pescatarian compliant
true
dietary_preference.NoRedMeat
boolean
No red meat
true
religious_labels.Kosher
boolean
Kosher certified
true
religious_labels.Halal
boolean
Halal certified
false
religious_labels.Jain
boolean
Jain compliant
false
religious_labels.Hindu
boolean
Hindu vegetarian
false
ingredients[].dietary_preference
object
Same 6 flags per ingredient
Per-ingredient dietary tree
ingredients[].religious_labels
object
Same 4 labels per ingredient
Per-ingredient religious tree

Nutrition — analysed_data.nutritionalInformation

Two nutrition objects: stated (manufacturer/pack) and qualified (AI backfilled + verified). Both carry macros and micros per 100g with daily values. Backfill flag shows when AI enrichment was applied.

stated.macronutrients[]
array
Energy, Fat, SatFat, Carbs, Sugars, Fiber, Protein, Sodium
Protein: 13.33g (27% DV)
stated.micronutrients[]
array
Iron + declared micros
Iron: 3.27mg
qualified.macronutrients[]
array
AI-verified macros + kJ
Energy: 1581 kJ
qualified.micronutrients[]
array
Iron, Potassium, VitD, Calcium, VitA, VitC
Potassium: 429mg (9% DV)
each nutrient.dailyValue
float
% Daily Value
Fiber: 20% DV
each nutrient.source
string
Data provenance trail
"Manufacturer label" / "AI qualification layer"
servingSize.servingSize
float
Serving size in grams
55.0g
servingSize.servesPerPack
integer
Servings per container
49
qualified.backfillNutrientsProcessed
boolean
AI enrichment applied flag
true
additionalInfo.energy
float
Energy in kcal
378.0 kcal

Quality Scores — analysed_data.additionalInfo

Six independent scoring systems applied to every product. Industry-standard grades plus food safety signals. No other food API delivers all six in a single response.

nova_group
string "1"–"4"
NOVA processing level. 1=unprocessed, 4=ultra-processed
"1" (unprocessed whole food)
nutriscore_grade
string A–E
Nutri-Score nutritional quality
"B"
ecoscore
string A–E
Environmental impact grade
"B"
food_safety_labels.Organic
boolean
Organic certification flag
true
food_safety_labels.NoGMO
boolean
Non-GMO Project verified
true
food_safety_labels.Carcinogenic
boolean
Known carcinogenic ingredient flag
false
food_safety_labels.ProductRecalls
boolean
Active recall flag
false
average_customer_rating
float
Marketplace rating
4.6

Sustainability — analysed_data.additionalInfo.sustainability_labels

Six ESG-adjacent boolean flags per product and per ingredient. Essential for sustainability-led grocery platforms and CPG analytics teams.

PlantBased
boolean
100% plant-derived
true
Recycled
boolean
Recycled / recyclable packaging
true
SustainablePackaging
boolean
Sustainable packaging claim
true
OrganicPositioning
boolean
Organic market positioning
true
SocialResponsibility
boolean
CSR / social responsibility signal
true
AnimalWelfare
boolean
Animal welfare certification
false
claims.sustainability.packaging[]
string array
Stated packaging claims
["Resealable bag"]
claims.sustainability.environmentalClaims[]
string array
Environmental claims from pack
["Recyclable packaging","Plant-based product"]

Certifications & Claims — analysed_data.claims

Structured extraction of on-pack certifications, nutritional claims, ingredient claims, contact info, and preparation instructions. Everything a consumer app needs without additional scraping.

certifications[]
string array
All on-pack certifications
["USDA Organic","Non-GMO Project Verified","Kosher"]
nutritionalClaims[]
string array
Nutrition marketing claims
["Whole Grain","High in Fiber","No Added Sugar"]
ingredientClaims[]
string array
Ingredient purity claims
["100% Whole Grain Oats","Organic"]
contact.phone / website
string
Manufacturer contact
"1-800-349-2173"
preparation.storage
string
Storage instructions
"Keep in a cool, dry place. Reseal after opening."
country_of_origin
string
Country of manufacture
"United States"
data_source
string
Data provenance chain
"Manufacturer label / OpenFoodFacts"
additionalInfo.packaging
string
Full packaging description
"Resealable multi-pack bag (4 x 24oz)"

From zero to first response
in under 5 minutes

Pick your language. Copy the snippet. Your first call returns the complete payload — all 200+ attributes, per-ingredient allergen trees, every score. The free tier holds nothing back.

cURL
Node.js
Python
Swift
cURL — UPC Lookup Copy
# Live endpoint — Bob's Red Mill Steel Cut Oats curl -i \ -H "X-API-Key: YOUR_API_KEY" \ 'https://barcode-api-140543331861.asia-south1.run.app/api/lookup?barcode=039978009579' # Response includes both layers: # scraped_data — raw manufacturer data # analysed_data — AI-qualified intelligence
Node.js — fetch Copy
const API_KEY = "YOUR_API_KEY"; const barcode = "039978009579"; const response = await fetch( `https://barcode-api-140543331861.asia-south1.run.app/api/lookup?barcode=${barcode}`, { headers: { 'X-API-Key': API_KEY } } ); const { analysed_data } = await response.json(); // Access any attribute directly: const nova = analysed_data.additionalInfo.nova_group; const vegan = analysed_data.additionalInfo .dietary_preference.Vegan; const gluten = analysed_data .npiFoodPackagesAllergensIntolerances .glutenQualified;
Python — requests Copy
import requests API_KEY = "YOUR_API_KEY" barcode = "039978009579" resp = requests.get( "https://barcode-api-140543331861.asia-south1.run.app/api/lookup", params={"barcode": barcode}, headers={"X-API-Key": API_KEY} ) data = resp.json()["analysed_data"] # Two-layer structure: nova = data["additionalInfo"]["nova_group"] is_vegan = data["additionalInfo"]["dietary_preference"]["Vegan"] allergens = data["npiFoodPackagesAllergensIntolerances"] clean = data["cleanLabel"] # 30+ fields
Swift — URLSession Copy
let apiKey = "YOUR_API_KEY" let barcode = "039978009579" let url = URL(string: "https://barcode-api-140543331861.asia-south1.run.app/api/lookup?barcode=\(barcode)")! var request = URLRequest(url: url) request.setValue(apiKey, forHTTPHeaderField: "X-API-Key") let (data, _) = try await URLSession.shared.data(for: request) let product = try JSONDecoder().decode(NutriGraphProduct.self, from: data) // Type-safe access to both layers: let isVegan = product.analysed_data.additionalInfo .dietary_preference.Vegan let novaScore = product.analysed_data.additionalInfo.nova_group
Base URL
barcode-api-140543331861.asia-south1.run.app/api/lookup
Auth
X-API-Key header
Request your key →
Rate limit (free)
1,000 calls / month
Response format
JSON, always UTF-8

Bob's Red Mill Organic Steel Cut Oats

UPC 039978009579 — exactly as returned from our database. Every field shown is a real value from the JSON, not a mock.

Nova Score
1
nova_group — Unprocessed food
Nutri-Score
B
nutriscore_grade
Eco-Score
B
ecoscore
Customer Rating
4.6
average_customer_rating
Certifications 3 verified
USDA Organic Non-GMO Project Verified Kosher
Dietary Compliance 4 of 6 pass
Vegan ✓ Vegetarian ✓ Pescatarian ✓ No Red Meat ✓ Keto ✗ Low-FODMAP ✗
Sustainability 5 of 6 pass
Plant-Based ✓ Recycled Pkg ✓ Sustainable Pkg ✓ Organic Position ✓ Social Resp ✓ Animal Welfare ✗

Data is a commodity.
This is intelligence.

No competitor ships per-ingredient allergen trees, dual stated/qualified fields, or all six quality scores in a single response.

Feature
NutriGraphAPI
Spoonacular
Edamam
Nutritionix
Open Food Facts
Products indexed
5M+ verified
~380K
~700K
~1M
3M crowd
Two data layers (scraped + AI)
Per-ingredient allergen trees
✓ Full nested tree
Stated + qualified allergen pairs
✓ 14 field pairs
Clean label fields
30+ stated/qualified
All 6 quality scores
Nova+Nutri+Eco+3 more
Partial
Nutri-Score
Nova + Nutri
Religious compliance
Halal · Kosher · Jain · Hindu
Halal only
Sustainability flags
✓ 6 flags per product
Data sourcing model
Label-declared + AI-qualified
Crowd
Mixed
Mixed
Crowd
Median response time
<50ms
500ms+
~200ms
~150ms
Unguaranteed

Built for applications that
weren't possible before

🌿
Per-ingredient allergen trees

Every ingredient carries its own allergen object — 11 allergens per ingredient, not just a product-level boolean. Know exactly which ingredient breaks compliance for each user profile. No other API does this.

→ Ingredient-level precision
Stated + Qualified dual model

Every allergen and clean label field comes in two variants: stated (what the manufacturer declared on pack) and qualified (what our AI verification confirmed). Catch discrepancies before they become liability.

→ Claim verification engine
30+ clean label fields

Artificial colours, flavours, sweeteners, preservatives, HFCS, GMO status, hormone flags, ingredient count, recognisability — all stated and qualified. The most complete clean-label API dataset in existence.

→ Clean label intelligence
🌎
Six quality scores in one call

NovaScore, Nutri-Score, EcoScore, Organic, Non-GMO, and Carcinogenic flag — all in a single response. No stitching together multiple APIs or building your own scoring pipeline.

→ Unified scoring layer
🕋
Four religious compliance labels

Halal, Kosher, Jain, and Hindu — at product and ingredient level. Open 2.2B+ consumers in religious dietary markets that every other food API completely ignores.

→ Global market reach
Sustainability intelligence

PlantBased, Recycled, SustainablePackaging, OrganicPositioning, SocialResponsibility, AnimalWelfare — per product and per ingredient. Power the ESG-driven grocery platforms consumers are demanding.

→ ESG data layer

Applications only possible
with this data depth

01
Clinical allergy management

Per-ingredient allergen trees let you tell users not just "this product may contain peanuts" but exactly which ingredient is the risk — before they scan at the shelf. That's a clinical-grade difference.

02
Personalised grocery intelligence

Filter 5 million products in real time against a user's simultaneous constraints: Keto + Kosher + No artificial colours + EcoScore B or better. No other API has the data to do this in one call.

03
Religious dietary compliance

Four religious compliance labels — Halal, Kosher, Jain, Hindu — at product and ingredient level. Reach 2.2B consumers in dietary markets that no competitor addresses at any depth.

04
CPG clean label analytics

30+ clean label fields with stated vs. qualified pairs let CPG brands benchmark their entire portfolio, identify claim gaps, and compare against 5M competitor products — at API speed.

What developers need to know
before they build

Architecture decisions, edge cases, and gotchas — documented so you don’t hit them at 2am.

Data architecture
Two-layer response model
Every response root has scraped_data (raw manufacturer/Amazon data) and analysed_data (AI-qualified layer). Always read from analysed_data for application logic — it's verified and normalised. Use scraped_data for auditing or provenance trails only.
const { analysed_data } = await response.json();
// ✓ Do this
const nova = analysed_data.additionalInfo.nova_group;

// ✗ Not this (raw, unnormalised)
const nova = scraped_data.nova_group;
Allergen logic
Always use Qualified, not Stated
Every allergen has two fields: eggStated (manufacturer's claim) and eggQualified (our AI verification). For safety-critical filtering, always use the Qualified field. Stated can be missing or incorrect — Qualified is our verified conclusion.
const allergens = analysed_data
  .npiFoodPackagesAllergensIntolerances;

// ✓ Safety-critical: use Qualified
if (allergens.glutenQualified === "No") {
  // safe for gluten-free diet
}
Allergen docs →
Ingredient trees
Per-ingredient arrays, not product-level
Allergen, dietary, religious, and sustainability flags exist at both the product level and inside each item in the ingredients[] array. Use ingredient-level flags to tell users exactly which ingredient is the problem.
analysed_data.ingredients.forEach(ing => {
  if (ing.allergens.Peanuts) {
    alert(`Contains peanuts: ${ing.name}`);
  }
  if (!ing.dietary_preference.Vegan) {
    alert(`Not vegan: ${ing.name}`);
  }
});
Null handling
Backfill flag signals AI enrichment
When qualified.backfillNutrientsProcessed is true, the nutrition values were AI-enriched (not sourced directly from the manufacturer). The data is still reliable, but you may want to surface a confidence indicator in clinical contexts. All backfilled values include a source field.
Nutrition docs →
Performance
Sub-50ms — cache aggressively
Median response is under 50ms at the edge, but product data changes infrequently. We recommend a 24-hour client-side cache keyed on UPC-12. Product data versioning is exposed via the data_last_updated field — use it to invalidate cache selectively rather than polling.
// Recommended cache strategy
const CACHE_TTL = 86400; // 24 hours
const key = `nutrigraph:${upc}`;
const cached = await redis.get(key);
if (!cached) {
  const data = await nutrigraph.get(upc);
  await redis.setex(key, CACHE_TTL, data);
}
Error handling
Status codes & product coverage
A 404 means the UPC is not yet in our 5M product database. We add products continuously — submit missing UPCs via the POST /v2/request endpoint and we typically onboard within 48 hours. 429 = rate limit hit. All error responses follow the same envelope:
{
  "error": "PRODUCT_NOT_FOUND",
  "upc": "012345678901",
  "message": "Submit via /v2/request",
  "request_id": "req_abc123"
}
Error reference →

From the NutriGraphAPI blog

View all articles →
Loading latest articles from blog.nutrigraphapi.com…

Full data depth.
Free to start.

1,000 free calls. No credit card. The complete analysed_data layer — per-ingredient allergen trees, all 6 quality scores, 30+ clean label fields, religious compliance, sustainability flags — all of it, from call one. No artificial data limits. You only pay when you scale past 1,000 calls.

Full payload on the free tier — not a stripped preview
Per-ingredient allergen trees, 30+ clean label fields
All 6 quality scores — Nova, Nutri, Eco + 3 more
Religious & dietary compliance on every response
Only limit is volume — upgrade when you scale
Request sandbox API key
No credit card · 1,000 calls free · Upgrade anytime
Your sandbox API key
✓ Email ready to send
Your mail client will open with a pre-filled request. We respond within 24 hours with your API key and onboarding guide.

Start free. Scale when ready.

Four tiers, no sales calls for the first three. Founding Member discounts lock in lifetime savings — only 3 spots remain.

Only 3 of 10 Founding Member spots remaining
Monthly
Annual Save 20%
Full payload free
Developer
$0
Free forever — no credit card
The complete analysed_data layer. Every attribute. No artificial limits on data depth.
1,000 API calls/month
Full analysed_data layer ✓
Per-ingredient allergen trees ✓
All 6 quality scores ✓
30+ clean label fields ✓
Religious & dietary compliance ✓
Sustainability flags ✓
Community support
Get full-access free key →
Custom
Let's talk
Tailored to your needs
Tailored solutions for unique requirements
Unlimited API calls
Custom data sources
Dedicated infrastructure
Custom SLA agreements
24/7 phone support
Data licensing options
Custom analytics
Multi-region deployment
Contact us →

The world's most complete
food intelligence dataset.

5 million products. Two intelligence layers. Per-ingredient allergen trees. Six quality scores. 30+ clean label fields. Four religious labels. Six sustainability flags. All in one API call, in under 50ms.

Get your free API key
No credit card · Full payload free · Every attribute from call one · Pay only when you scale