Gratis makroreferansetabeller: Last ned fullstendige ernæringsdata i CSV og JSON
Last ned gratis makroreferansetabeller med fullstendige ernæringsdata for over 500 vanlige matvarer i CSV- og JSON-format. Inkluderer protein, karbohydrater, fett, fiber og kalorier organisert etter matkategori.
Enten du bygger en ernæringsapp, driver med forskning, coacher kunder, eller bare ønsker et pålitelig referansedokument på skrivebordet, trenger du rene makrodata i et format du faktisk kan jobbe med. Offentlige databaser finnes, men de er ofte omfattende, inkonsekvente og tilpasset byråkrater snarere enn utviklere.
Vi har satt sammen et sett med gratis makroreferansetabeller som dekker over 500 vanlige matvarer med fullstendige makronutrientanalyser. Dataene er tilgjengelige i både CSV- og JSON-formater, klare til å brukes i et regneark, en database, et skript eller en applikasjon. Hver oppføring er verifisert mot primærkilder, og filene er strukturert slik at du kan begynne å bruke dem umiddelbart uten behov for opprydning eller omforming.
Denne siden dekker nøyaktig hva som er inkludert i tabellene, hvordan dataene er strukturert, hvordan du kan laste dem inn programmatisk, og hvordan du kan bidra med korrigeringer hvis du finner noe som trenger oppdatering.
Hva er inkludert
Makroreferansetabellene inneholder over 500 av de mest konsumerte matvarene fordelt på syv hovedkategorier. For hver matvare får du:
- Matnavn — den standard engelske betegnelsen brukt i ernæringsvitenskap
- Kategori — en av syv toppnivåkategorier (mer om disse nedenfor)
- Underkategori — en mer spesifikk gruppering innen hovedkategorien
- Beskrivelse av porsjonsstørrelse — en lettfattelig porsjonsstørrelse (f.eks. "1 middels banan", "1 kopp kokt")
- Porsjonsvekt i gram — gramverdien av den porsjonsstørrelsen
- Kalorier — total energi i kilokalorier (kcal)
- Protein — gram protein per porsjon
- Totalt fett — gram totalt fett per porsjon
- Mettet fett — gram mettet fett per porsjon
- Totale karbohydrater — gram totale karbohydrater per porsjon
- Kostfiber — gram kostfiber per porsjon
- Sukker — gram totalt sukker per porsjon
- Natrium — milligram natrium per porsjon
Hver verdi rapporteres per den oppførte porsjonsstørrelsen, ikke per 100 gram. Vi valgte denne tilnærmingen fordi data basert på porsjoner er det de fleste faktisk trenger når de sporer måltider, lager måltidsplaner eller viser ernæringsinformasjon i et grensesnitt. Hvis du trenger verdier per 100 g, er det enkelt å dele med porsjonsvekten og multiplisere med 100.
Tabellene inkluderer ikke mikronæringsstoffer utover natrium og fiber. For fullstendige mikronæringsprofiler (vitaminer, mineraler, aminosyrer), se avsnittet om Nutrolas API på slutten av denne artikkelen — der finner du de detaljerte dataene.
Dataformatspesifikasjoner
CSV-format
CSV-filen bruker UTF-8-koding med en header-rad. Feltene er kommadelte, og tekstfeltene er sitert. Her er hvordan strukturen ser ut:
food_name,category,subcategory,serving_description,serving_weight_g,calories_kcal,protein_g,total_fat_g,saturated_fat_g,total_carbs_g,fiber_g,sugar_g,sodium_mg
"Chicken Breast, boneless skinless, cooked","Proteins","Poultry","1 breast (170g)",170,284,53.4,6.2,1.7,0.0,0.0,0.0,126
"Atlantic Salmon, cooked","Proteins","Fish & Seafood","1 fillet (154g)",154,280,39.3,12.4,2.5,0.0,0.0,0.0,109
"Brown Rice, cooked","Grains & Starches","Whole Grains","1 cup (195g)",195,216,5.0,1.8,0.4,44.8,3.5,0.7,10
"Banana, raw","Fruits","Tropical Fruits","1 medium (118g)",118,105,1.3,0.4,0.1,27.0,3.1,14.4,1
CSV-filen er kompatibel med Microsoft Excel, Google Sheets, LibreOffice Calc, Apple Numbers og alle programmeringsspråk med støtte for CSV-parsing. Ingen spesiell konfigurasjon er nødvendig — åpne filen, så vil den parses korrekt.
JSON-format
JSON-filen inneholder et array av objekter, ett for hver matvare. Strukturen speiler CSV-feltene:
{
"version": "1.4.0",
"generated": "2026-03-12",
"source": "Nutrola Macro Reference Tables",
"record_count": 527,
"foods": [
{
"food_name": "Chicken Breast, boneless skinless, cooked",
"category": "Proteins",
"subcategory": "Poultry",
"serving_description": "1 breast (170g)",
"serving_weight_g": 170,
"nutrients": {
"calories_kcal": 284,
"protein_g": 53.4,
"total_fat_g": 6.2,
"saturated_fat_g": 1.7,
"total_carbs_g": 0.0,
"fiber_g": 0.0,
"sugar_g": 0.0,
"sodium_mg": 126
}
}
]
}
JSON-filen inkluderer metadatafelt på toppnivå: en versjonsstreng for å spore oppdateringer, genereringsdato, kildens navn, og total antall poster. Dette gjør det enkelt å verifisere at du har den nyeste versjonen og å bygge logikk for oppdateringskontroll inn i applikasjonene dine.
Numeriske verdier lagres som tall, ikke strenger. Nullverdier vises ikke — hvis en næringsverdi er ukjent, ekskluderes maten fra datasettet i stedet for å inkluderes med manglende data. Dette var et bevisst valg for å holde dataene rene og unngå stille feil i beregningene.
Feltbeskrivelser
Her er en detaljert oversikt over hvert felt, inkludert enheter, forventede områder og kanttilfeller:
| Felt | Type | Enhet | Beskrivelse |
|---|---|---|---|
| food_name | string | — | Standard engelsk navn. Inkluderer tilberedningsmetode der det er relevant (f.eks. "kokt", "rå", "tørket"). |
| category | string | — | En av syv toppnivåkategorier. Se kategoriseksjonen nedenfor. |
| subcategory | string | — | En mer spesifikk gruppering. For eksempel, innen "Proteins" finner du "Poultry", "Red Meat", "Fish & Seafood", "Legumes", og "Eggs". |
| serving_description | string | — | En lettfattelig porsjonsstørrelse. Inkluderer alltid gramvekten i parentes. |
| serving_weight_g | number | gram | Den numeriske gramvekten av porsjonen. Heltallsverdier for de fleste varer, ett desimalsted for varer der presisjon er viktig. |
| calories_kcal | number | kcal | Total energi. Beregnet ved å bruke Atwater-systemet (4 kcal/g protein, 4 kcal/g karbohydrater, 9 kcal/g fett). |
| protein_g | number | gram | Total protein. Ett desimalsted presisjon. |
| total_fat_g | number | gram | Totalt fett inkludert mettet, enumettet og flerumettet. |
| saturated_fat_g | number | gram | Bare mettet fettsyre. |
| total_carbs_g | number | gram | Totale karbohydrater inkludert fiber og sukker. |
| fiber_g | number | gram | Totalt kostfiber (løselig + uløselig). |
| sugar_g | number | gram | Totalt sukker (naturlig forekommende + tilsatt). Datasettet skiller ikke mellom tilsatt sukker og naturlig sukker. |
| sodium_mg | number | milligram | Natriuminnhold. Merk at dette er milligram, ikke gram, i motsetning til de andre næringsfeltene. |
Noen notater om presisjon: alle næringsverdier er avrundet til ett desimalsted. Dette samsvarer med presisjonsnivået til de underliggende kildedataene. Å rapportere flere desimaler ville gi inntrykk av et falskt nivå av nøyaktighet — matkomposisjon varierer naturlig med 5-15% avhengig av vekstforhold, dyretype og tilberedningsmetoder.
Matkategorier
De 500+ matvarene er organisert i syv toppnivåkategorier, hver med flere underkategorier:
Proteiner
Omtrent 95 oppføringer som dekker fjærfe (kyllingbryst, lår, kalkun, malt kalkun), rødt kjøtt (biff, malt storfekjøtt med ulike magre prosentandeler, svinekjøtt, lam), fisk og sjømat (laks, tunfisk, reker, torsk, tilapia, sardiner), egg (hele, hviter, eggerøre), og plantebaserte proteiner (tofu, tempeh, seitan, edamame). Belgfrukter som linser, kikerter og svarte bønner er inkludert her i stedet for i korn fordi deres primære ernæringsmessige rolle er proteinlevering.
Korn og stivelse
Omtrent 80 oppføringer som dekker fullkorn (brun ris, havre, quinoa, bygg, bulgur), raffinerte korn (hvit ris, hvitt brød, pasta), stivelsesholdige grønnsaker (poteter, søtpoteter, mais), og vanlige kornprodukter (tortillas, bagels, kjeks, couscous). Både kokte og tørre verdier er gitt for korn der skillet er viktig.
Frukt
Omtrent 65 oppføringer som dekker vanlige ferske frukter (epler, bananer, appelsiner, jordbær, blåbær, druer), tropiske frukter (mango, ananas, papaya, kiwi), tørkede frukter (rosiner, dadler, tørkede aprikoser, tranebær), og frosne frukter. Alle ferske frukter oppføringer er for den rå, spiselige delen — frø, skinn og kjerner er ekskludert fra porsjonsvekten der det er aktuelt.
Grønnsaker
Omtrent 85 oppføringer som dekker bladgrønnsaker (spinat, grønnkål, romaine, ruccola), korsblomstrede grønnsaker (brokkoli, blomkål, rosenkål, kål), rotgrønnsaker (gulrøtter, rødbeter, kålrot, reddiker), allium (løk, hvitløk), nattskygge (tomater, paprika, aubergine), og andre vanlige grønnsaker (agurk, selleri, zucchini, sopp, asparges). Både rå og kokte verdier er gitt for grønnsaker der matlaging betydelig endrer næringstettheten per porsjon.
Meieriprodukter og alternativer
Omtrent 70 oppføringer som dekker melk (hel, 2%, skummet, og plantebaserte melk), yoghurt (gresk, vanlig, smaksatt, plantebasert), ost (cheddar, mozzarella, feta, cottage cheese, kremost, parmesan), smør, fløte, og vanlige meierialternativer (mandelmelk, havremelk, soyamelk, kokosnøtt yoghurt). Plantebaserte melk og yoghurt er gruppert her i stedet for i en egen kategori fordi brukerne vanligvis velger dem som direkte substitutter.
Snacks og bearbeidede matvarer
Omtrent 75 oppføringer som dekker nøtter og frø (mandler, valnøtter, peanøtter, chiafrø, linfrø, solsikkefrø), nøttesmør (peanøttsmør, mandelsmør), vanlige snacks (pretzels, popcorn, granola-barer, proteinbarer, turmix, chips, mørk sjokolade), pålegg og sauser (hummus, guacamole, salsa, majones, olivenolje, honning), og andre vanlig registrerte varer som proteinpulver og energibiter.
Drikkevarer
Omtrent 60 oppføringer som dekker juice (appelsinjuice, eplejuice, tranebærjuice), brus (cola, sitron-lime brus, ingefærøl), sports- og energidrikker, kaffedrikker (svart kaffe, latte, cappuccino, mocha med ulike melketyper), smoothie-baser, alkoholholdige drikker (øl, vin, brennevin), og vanlige tillegg (fløte, sukker, smaksatte siruper). Vann er ikke inkludert da det ikke har noe makronæringsinnhold.
Bruke dataene programmatisk
Hensikten med å tilby CSV- og JSON-formater er at du kan laste inn disse dataene direkte i koden din. Her er fungerende eksempler i Python og JavaScript.
Python: Laste inn CSV
import csv
def load_macro_table(filepath):
foods = []
with open(filepath, newline='', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
# Konverter numeriske felt fra strenger
for key in ['serving_weight_g', 'calories_kcal', 'protein_g',
'total_fat_g', 'saturated_fat_g', 'total_carbs_g',
'fiber_g', 'sugar_g', 'sodium_mg']:
row[key] = float(row[key])
foods.append(row)
return foods
foods = load_macro_table('macro_reference_table.csv')
# Finn alle matvarer i en kategori
proteins = [f for f in foods if f['category'] == 'Proteins']
print(f"Fant {len(proteins)} proteinkilder")
# Finn de matvarene med høyest proteininnhold per kalori
foods_sorted = sorted(foods, key=lambda f: f['protein_g'] / max(f['calories_kcal'], 1), reverse=True)
print("\nTopp 10 matvarer etter proteininnhold (g protein per kcal):")
for f in foods_sorted[:10]:
ratio = f['protein_g'] / f['calories_kcal']
print(f" {f['food_name']}: {ratio:.3f} g/kcal ({f['protein_g']}g protein, {f['calories_kcal']} kcal)")
Python: Laste inn JSON
import json
def load_macro_json(filepath):
with open(filepath, encoding='utf-8') as f:
data = json.load(f)
print(f"Laste inn {data['record_count']} matvarer (versjon {data['version']})")
return data['foods']
foods = load_macro_json('macro_reference_table.json')
# Bygg et oppslagsordbok etter matnavn
lookup = {f['food_name'].lower(): f for f in foods}
# Rask oppslag
chicken = lookup.get('chicken breast, boneless skinless, cooked')
if chicken:
n = chicken['nutrients']
print(f"Kyllingbryst per porsjon ({chicken['serving_description']}):")
print(f" Kalorier: {n['calories_kcal']} kcal")
print(f" Protein: {n['protein_g']}g")
print(f" Fett: {n['total_fat_g']}g")
print(f" Karbohydrater: {n['total_carbs_g']}g")
JavaScript: Laste inn JSON
// Node.js
const fs = require('fs');
function loadMacroTable(filepath) {
const raw = fs.readFileSync(filepath, 'utf-8');
const data = JSON.parse(raw);
console.log(`Laste inn ${data.record_count} matvarer (versjon ${data.version})`);
return data.foods;
}
const foods = loadMacroTable('macro_reference_table.json');
// Grupper matvarer etter kategori
const byCategory = {};
for (const food of foods) {
if (!byCategory[food.category]) {
byCategory[food.category] = [];
}
byCategory[food.category].push(food);
}
// Skriv ut sammendrag
for (const [category, items] of Object.entries(byCategory)) {
console.log(`${category}: ${items.length} matvarer`);
}
// Finn lavkaloriske, fiberrike matvarer
const highFiber = foods
.filter(f => f.nutrients.fiber_g >= 5 && f.nutrients.calories_kcal <= 200)
.sort((a, b) => b.nutrients.fiber_g - a.nutrients.fiber_g);
console.log('\nFiberrike, lavkaloriske matvarer:');
highFiber.slice(0, 10).forEach(f => {
console.log(` ${f.food_name}: ${f.nutrients.fiber_g}g fiber, ${f.nutrients.calories_kcal} kcal`);
});
JavaScript: Laste inn CSV i nettleseren
// Nettleserbasert CSV-parsing (ingen avhengigheter)
async function loadMacroCSV(url) {
const response = await fetch(url);
const text = await response.text();
const lines = text.split('\n').filter(line => line.trim());
const headers = parseCSVLine(lines[0]);
return lines.slice(1).map(line => {
const values = parseCSVLine(line);
const obj = {};
headers.forEach((header, i) => {
obj[header] = isNaN(values[i]) ? values[i] : parseFloat(values[i]);
});
return obj;
});
}
function parseCSVLine(line) {
const result = [];
let current = '';
let inQuotes = false;
for (const char of line) {
if (char === '"') { inQuotes = !inQuotes; }
else if (char === ',' && !inQuotes) { result.push(current.trim()); current = ''; }
else { current += char; }
}
result.push(current.trim());
return result;
}
// Bruk
const foods = await loadMacroCSV('/data/macro_reference_table.csv');
console.log(`Laste inn ${foods.length} matvarer`);
Disse eksemplene demonstrerer de vanligste operasjonene: laste inn dataene, søke og filtrere, gruppere etter kategori, og sortere etter næringstetthet. Datastrukturene er bevisst enkle slik at du ikke trenger spesielle biblioteker for å jobbe med dem.
Datakilder
Makroreferansetabellene er samlet fra følgende primærkilder:
USDA SR Legacy Database. USDA Standard Reference Legacy-databasen er det grunnleggende datasettet for amerikansk matkomposisjon. Den inneholder laboratorieanalysierte næringsdata for over 7 600 matvarer. Våre tabeller bruker SR Legacy som primærkilde for generiske/ubrandede matvarer. Vi valgte SR Legacy fremfor den nyere FoodData Central FNDDS fordi SR Legacy-verdiene er mer bredt validerte og siterte i ernæringsforskning.
USDA FoodData Central. For matvarer som ikke dekkes av SR Legacy, spesielt nyere matvarer og oppdaterte verdier, refererer vi til FoodData Centrals Foundation Foods og Survey Foods datasett.
Internasjonale matkomposisjonsdatabaser. For matvarer som konsumeres globalt, men kanskje ikke vises i amerikanske databaser, kryssrefererer vi data fra Public Health Englands McCance og Widdowson komposisjonstabeller, Food Standards Australia New Zealand (FSANZ) NUTTAB, den kanadiske næringsfilen (CNF), og den danske matkomposisjonsdatabasen (Frida). Dette er spesielt relevant for tropiske frukter, regionale korn og tilberedningsmetoder som er vanlige utenfor USA.
Produsentdata. For bearbeidede og merkede varer i snacks- og drikkekategoriene refererer vi til næringsfakta-paneler levert av produsenter. Der produsentdata strider mot laboratorieanalyse, noterer vi avviket og går for laboratorieverdiene.
Alle verdier har blitt kryssreferert mot minst to uavhengige kilder. Der kildene er uenige med mer enn 10%, undersøkte vi årsaken (vanligvis forskjellige tilberedningsmetoder eller variasjoner) og valgte verdien som er mest representativ for hvordan maten vanligvis konsumeres.
Datasettet er versjonskontrollert. Den nåværende versjonen er 1.4.0, sist oppdatert mars 2026. Vi oppdaterer tabellene omtrent hver kvartal for å inkludere korrigeringer, legge til forespurte matvarer, og reflektere eventuelle betydelige endringer i kilde-databasene.
Hvordan bidra med korrigeringer
Ernæringsdata er iboende ufullkomne. Matkomposisjon varierer etter region, sesong, variasjon og tilberedningsmetode. Hvis du finner en feil eller har en korrigering støttet av en pålitelig kilde, ønsker vi å høre fra deg.
Det er tre måter å sende inn korrigeringer på:
GitHub Issues. Makroreferansetabellene er vert i et offentlig GitHub-repositorium. Åpne en sak med matnavn, feltet du mener er feil, nåværende verdi, verdien du mener er korrekt, og en lenke til kilden din. Vi gjennomgår saker ukentlig.
E-post. Send korrigeringer til data@nutrola.com med den samme informasjonen: matnavn, felt, nåværende verdi, foreslått verdi, og kilde. Vi vil svare innen fem arbeidsdager.
Pull requests. Hvis du er komfortabel med Git, kan du forgrene repositoriet, redigere CSV- eller JSON-filen direkte, og sende inn en pull request. Inkluder kilden din i PR-beskrivelsen. Vi vil gjennomgå og slå sammen korrigeringer som støttes av pålitelige data.
Vi aksepterer ikke innsendelser for merkede eller proprietære produkter gjennom denne prosessen. Disse håndteres gjennom Nutrolas hovedmatdatabasepipeline, som har sin egen verifiseringsarbeidsflyt.
Integrasjon med Nutrolas API for sanntidsdata
De nedlastbare makroreferansetabellene er et statisk øyeblikksbilde — flott for offline bruk, innebygde applikasjoner, utdanningsmaterialer og raske oppslag. Men hvis du trenger sanntids ernæringsdata i stor skala, tilbyr Nutrolas Nutrition Data API alt i disse tabellene og mye mer.
API-et dekker over 3 millioner matoppføringer (sammenlignet med 500+ i referansetabellene), inkluderer fullstendige mikronæringsprofiler med 70+ næringsstoffer per vare, støtter strekkodeskanning, tekstsøk og autocompleting, og serverer data for merkede produkter fra 47 land. Det er de samme dataene som driver Nutrola-appen som brukes av over 2 millioner mennesker daglig.
For utviklere: API-et er RESTful, returnerer JSON, og tilbyr et gratis nivå med 500 forespørsel per dag — nok for prototyping og personlige prosjekter. Betalte nivåer skalerer til millioner av forespørsel. Du finner full dokumentasjon på api.nutrola.com/docs.
For forskere og institusjoner: vi tilbyr akademiske lisenser med hevede hastighetsgrenser og muligheter for bulkeksport. Kontakt research@nutrola.com for detaljer.
Makroreferansetabellene og API-et komplementerer hverandre. Bruk tabellene for offline arbeid, innebygde datasett, og situasjoner der du trenger en selvstendig fil. Bruk API-et når du trenger bredde, dybde, sanntidsoppdateringer og søkefunksjonalitet.
Ofte stilte spørsmål
Hvor ofte oppdateres makroreferansetabellene?
Vi oppdaterer tabellene omtrent hver kvartal. Hver utgivelse får et nytt versjonsnummer (den nåværende versjonen er 1.4.0). Oppdateringer inkluderer korrigeringer sendt inn av brukere, tillegg av ofte forespurte matvarer, og justeringer når kilde-databasene våre publiserer reviderte verdier. JSON-filen inkluderer versjonen og genereringsdatoen i metadataene, slik at du programmatisk kan sjekke om du har den nyeste versjonen.
Kan jeg bruke disse dataene i min kommersielle applikasjon?
Ja. Makroreferansetabellene er utgitt under en Creative Commons Attribution 4.0 (CC BY 4.0) lisens. Du kan bruke, modifisere og redistribuere dataene i både personlige og kommersielle prosjekter så lenge du gir attribusjon. En lenke til nutrola.com eller en omtale av "Nutrola Macro Reference Tables" i datakredittene dine er tilstrekkelig. Du trenger ikke å be om tillatelse eller betale et gebyr.
Hvorfor bare 500+ matvarer og ikke hele Nutrola-databasen?
Referansetabellene er designet for å være et praktisk, høykvalitetsutvalg av de mest konsumerte matvarene. Å dekke 500+ varer på tvers av syv kategorier adresserer omtrent 90% av det folk spiser daglig i de fleste land. Å utvide til 3 millioner oppføringer ville gjøre filene uhåndterlige for mange bruksområder (den fullstendige databasen overstiger 2 GB). Hvis du trenger hele datasettet, gir Nutrola API tilgang til alt.
Er verdiene per porsjon eller per 100 gram?
Per porsjon. Hver oppføring inkluderer en porsjonsbeskrivelse (f.eks. "1 middels eple (182g)") og den tilsvarende gramvekten, slik at du enkelt kan konvertere til per-100g verdier ved å dele hver næringsverdi med porsjonsvekten og multiplisere med 100. Vi valgte verdier per porsjon fordi de er mer umiddelbart nyttige for måltidssporing, måltidsplanlegging og kundeorienterte applikasjoner.
Hvordan konverterer jeg dataene til per-100g verdier?
Multipliser hver næringsverdi med 100 og del på feltet serving_weight_g. For eksempel, hvis en porsjon kyllingbryst på 170g inneholder 53.4g protein, er verdien per 100g protein (53.4 * 100) / 170 = 31.4g. Her er en rask Python-funksjon:
def per_100g(food, nutrient_field):
"""Konverter en næringsverdi per porsjon til per-100g."""
serving_weight = food['serving_weight_g']
if serving_weight == 0:
return 0
return round(food[nutrient_field] * 100 / serving_weight, 1)
Hva skal jeg gjøre hvis en matvare jeg trenger ikke er i tabellen?
Først, sjekk om en lignende matvare finnes under et annet navn — bruk tekstredigererens søkefunksjon eller et enkelt skript for å søke i food_name-feltet. Hvis maten virkelig ikke er inkludert, har du to alternativer: send inn en forespørsel gjennom vårt GitHub-repositorium (vi prioriterer tillegg basert på etterspørsel), eller bruk Nutrolas API som dekker over 3 millioner matvarer og er langt mer sannsynlig å ha det du trenger. For engangsoppslag lar Nutrola-appen deg søke i hele databasen gratis.
Klar til å forvandle ernæringssporingen din?
Bli en del av tusenvis som har forvandlet helsereisen sin med Nutrola!