Tables de référence des macronutriments gratuites : Téléchargez des données nutritionnelles complètes en CSV et JSON

Téléchargez des tables de référence des macronutriments gratuites avec des données nutritionnelles complètes pour plus de 500 aliments courants aux formats CSV et JSON. Comprend protéines, glucides, lipides, fibres et calories organisés par catégorie d'aliment.

Que vous développiez une application de nutrition, meniez une étude de recherche, accompagniez des clients ou souhaitiez simplement avoir une feuille de référence fiable sur votre bureau, vous avez besoin de données de macronutriments propres dans un format avec lequel vous pouvez réellement travailler. Les bases de données gouvernementales existent, mais elles sont tentaculaires, incohérentes et formatées pour les bureaucrates plutôt que pour les développeurs.

Nous avons constitué un ensemble de tables de référence des macronutriments gratuites couvrant plus de 500 aliments courants avec des répartitions complètes des macronutriments. Les données sont disponibles aux formats CSV et JSON, prêtes à être intégrées dans un tableur, une base de données, un script ou une application. Chaque entrée a été vérifiée par rapport aux sources primaires, et les fichiers sont structurés de manière à pouvoir les utiliser immédiatement sans nettoyage ni transformation.

Cette page couvre exactement ce que contiennent les tables, comment les données sont structurées, comment les charger par programmation et comment soumettre des corrections si vous trouvez quelque chose qui nécessite une mise à jour.

Ce qui est inclus

Les tables de référence des macronutriments contiennent plus de 500 des aliments les plus couramment consommés répartis en sept catégories principales. Pour chaque aliment, vous obtenez :

  • Nom de l'aliment — le nom standard en anglais utilisé en science de la nutrition
  • Catégorie — l'une des sept catégories principales (plus de détails ci-dessous)
  • Sous-catégorie — un regroupement plus spécifique au sein de la catégorie parente
  • Description de la portion — une taille de portion lisible (p. ex., « 1 banane moyenne », « 1 tasse cuite »)
  • Poids de la portion en grammes — l'équivalent en grammes de cette taille de portion
  • Calories — énergie totale en kilocalories (kcal)
  • Protéines — grammes de protéines par portion
  • Lipides totaux — grammes de lipides totaux par portion
  • Graisses saturées — grammes de graisses saturées par portion
  • Glucides totaux — grammes de glucides totaux par portion
  • Fibres alimentaires — grammes de fibres alimentaires par portion
  • Sucres — grammes de sucres totaux par portion
  • Sodium — milligrammes de sodium par portion

Toutes les valeurs sont indiquées par portion listée, et non pour 100 grammes. Nous avons choisi cette approche parce que les données par portion sont ce dont la plupart des gens ont réellement besoin lorsqu'ils suivent leurs repas, créent des plans alimentaires ou affichent des informations nutritionnelles dans une interface. Si vous avez besoin de valeurs pour 100 g, il suffit de diviser par le poids de la portion et de multiplier par 100.

Les tables n'incluent pas de micronutriments au-delà du sodium et des fibres. Pour des profils complets de micronutriments (vitamines, minéraux, acides aminés), consultez la section sur l'API de Nutrola à la fin de cet article — c'est là que se trouvent les données détaillées.

Spécifications du format des données

Format CSV

Le fichier CSV utilise l'encodage UTF-8 avec une ligne d'en-tête. Les champs sont délimités par des virgules et les champs texte sont entre guillemets. Voici à quoi ressemble la structure :

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

Le fichier CSV est compatible avec Microsoft Excel, Google Sheets, LibreOffice Calc, Apple Numbers et tout langage de programmation prenant en charge l'analyse CSV. Aucune configuration spéciale n'est nécessaire — ouvrez le fichier et il sera analysé correctement.

Format JSON

Le fichier JSON contient un tableau d'objets, un par aliment. La structure reflète les champs du CSV :

{
  "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
      }
    }
  ]
}

Le fichier JSON inclut des champs de métadonnées au niveau supérieur : une chaîne de version pour le suivi des mises à jour, la date de génération, le nom de la source et le nombre total d'enregistrements. Cela facilite la vérification que vous disposez de la dernière version et la mise en place d'une logique de vérification des mises à jour dans vos applications.

Les valeurs numériques sont stockées sous forme de nombres, pas de chaînes de caractères. Les valeurs nulles n'apparaissent pas — si la valeur d'un nutriment est inconnue, l'aliment est exclu du jeu de données plutôt qu'inclus avec des données manquantes. C'est un choix délibéré pour garder les données propres et éviter les erreurs silencieuses dans les calculs.

Descriptions des champs

Voici une description détaillée de chaque champ, y compris les unités, les plages attendues et les cas particuliers :

Champ Type Unité Description
food_name string Nom standard en anglais. Inclut la méthode de préparation lorsque c'est pertinent (p. ex., « cooked », « raw », « dried »).
category string L'une des sept catégories principales. Voir la section des catégories ci-dessous.
subcategory string Un regroupement plus spécifique. Par exemple, au sein de « Proteins », vous trouverez « Poultry », « Red Meat », « Fish & Seafood », « Legumes » et « Eggs ».
serving_description string Une taille de portion lisible. Inclut toujours le poids en grammes entre parenthèses.
serving_weight_g number grammes Le poids numérique en grammes de la portion. Valeurs entières pour la plupart des articles, une décimale pour les articles où la précision est importante.
calories_kcal number kcal Énergie totale. Calculée selon le système Atwater (4 kcal/g protéines, 4 kcal/g glucides, 9 kcal/g lipides).
protein_g number grammes Protéines totales. Précision à une décimale.
total_fat_g number grammes Lipides totaux incluant les acides gras saturés, monoinsaturés et polyinsaturés.
saturated_fat_g number grammes Acides gras saturés uniquement.
total_carbs_g number grammes Glucides totaux incluant les fibres et les sucres.
fiber_g number grammes Fibres alimentaires totales (solubles + insolubles).
sugar_g number grammes Sucres totaux (naturels + ajoutés). Le jeu de données ne sépare pas les sucres ajoutés des sucres naturels.
sodium_mg number milligrammes Teneur en sodium. Notez que c'est en milligrammes, pas en grammes, contrairement aux autres champs de nutriments.

Quelques notes sur la précision : toutes les valeurs nutritionnelles sont arrondies à une décimale. Cela correspond au niveau de précision des données sources sous-jacentes. Indiquer plus de décimales impliquerait un faux niveau d'exactitude — la composition des aliments varie naturellement de 5 à 15 % selon les conditions de culture, la race de l'animal et les méthodes de préparation.

Catégories d'aliments

Les plus de 500 aliments sont organisés en sept catégories principales, chacune avec plusieurs sous-catégories :

Protéines

Environ 95 entrées couvrant la volaille (blanc de poulet, cuisse, dinde, dinde hachée), la viande rouge (faux-filet de bœuf, bœuf haché à divers pourcentages de maigre, filet de porc, agneau), les poissons et fruits de mer (saumon, thon, crevettes, cabillaud, tilapia, sardines), les œufs (entiers, blancs, brouillés) et les protéines végétales (tofu, tempeh, seitan, edamame). Les légumineuses comme les lentilles, les pois chiches et les haricots noirs sont incluses ici plutôt que dans les céréales car leur rôle nutritionnel principal est l'apport en protéines.

Céréales et féculents

Environ 80 entrées couvrant les céréales complètes (riz complet, flocons d'avoine, quinoa, orge, boulgour), les céréales raffinées (riz blanc, pain blanc, pâtes), les légumes féculents (pommes de terre, patates douces, maïs) et les produits céréaliers courants (tortillas, bagels, crackers, couscous). Les valeurs cuites et sèches sont fournies pour les céréales où la distinction est importante.

Fruits

Environ 65 entrées couvrant les fruits frais courants (pommes, bananes, oranges, fraises, myrtilles, raisins), les fruits tropicaux (mangues, ananas, papaye, kiwi), les fruits secs (raisins secs, dattes, abricots secs, canneberges) et les fruits surgelés. Toutes les entrées de fruits frais concernent la portion crue et comestible — les pépins, pelures et noyaux sont exclus du poids de la portion le cas échéant.

Légumes

Environ 85 entrées couvrant les légumes-feuilles (épinards, chou frisé, laitue romaine, roquette), les légumes crucifères (brocoli, chou-fleur, choux de Bruxelles, chou), les légumes-racines (carottes, betteraves, navets, radis), les alliacées (oignons, ail), les solanacées (tomates, poivrons, aubergine) et d'autres légumes courants (concombre, céleri, courgette, champignons, asperges). Les valeurs crues et cuites sont fournies pour les légumes où la cuisson modifie significativement la densité nutritionnelle par portion.

Produits laitiers et alternatives

Environ 70 entrées couvrant le lait (entier, demi-écrémé, écrémé et laits végétaux), le yaourt (grec, nature, aromatisé, végétal), le fromage (cheddar, mozzarella, feta, fromage blanc, fromage à la crème, parmesan), le beurre, la crème et les alternatives laitières courantes (lait d'amande, lait d'avoine, lait de soja, yaourt à la noix de coco). Les laits et yaourts végétaux sont regroupés ici plutôt que dans une catégorie séparée car les utilisateurs les recherchent généralement comme substituts directs.

Snacks et aliments transformés

Environ 75 entrées couvrant les noix et graines (amandes, noix, cacahuètes, graines de chia, graines de lin, graines de tournesol), les beurres de noix (beurre de cacahuète, beurre d'amande), les snacks courants (bretzels, pop-corn, barres de céréales, barres protéinées, mélange de fruits secs, chips, chocolat noir), les tartinades et condiments (houmous, guacamole, salsa, mayonnaise, huile d'olive, miel) et d'autres articles couramment suivis comme la poudre de protéine et les energy balls.

Boissons

Environ 60 entrées couvrant les jus (jus d'orange, jus de pomme, jus de canneberge), les boissons gazeuses (cola, limonade, ginger ale), les boissons sportives et énergétiques, les boissons au café (café noir, latte, cappuccino, moka avec différents types de lait), les bases de smoothie, les boissons alcoolisées (bière, vin, spiritueux) et les ajouts courants (crème, sucre, sirops aromatisés). L'eau n'est pas incluse car elle n'a pas de contenu en macronutriments.

Utilisation programmatique des données

L'objectif principal de fournir des formats CSV et JSON est de pouvoir charger ces données directement dans votre code. Voici des exemples fonctionnels en Python et JavaScript.

Python : Charger le 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:
            # Convert numeric fields from strings
            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')

# Find all foods in a category
proteins = [f for f in foods if f['category'] == 'Proteins']
print(f"Found {len(proteins)} protein sources")

# Find the highest protein foods per calorie
foods_sorted = sorted(foods, key=lambda f: f['protein_g'] / max(f['calories_kcal'], 1), reverse=True)
print("\nTop 10 foods by protein density (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 : Charger le JSON

import json

def load_macro_json(filepath):
    with open(filepath, encoding='utf-8') as f:
        data = json.load(f)
    print(f"Loaded {data['record_count']} foods (version {data['version']})")
    return data['foods']

foods = load_macro_json('macro_reference_table.json')

# Build a lookup dictionary by food name
lookup = {f['food_name'].lower(): f for f in foods}

# Quick lookup
chicken = lookup.get('chicken breast, boneless skinless, cooked')
if chicken:
    n = chicken['nutrients']
    print(f"Chicken breast per serving ({chicken['serving_description']}):")
    print(f"  Calories: {n['calories_kcal']} kcal")
    print(f"  Protein: {n['protein_g']}g")
    print(f"  Fat: {n['total_fat_g']}g")
    print(f"  Carbs: {n['total_carbs_g']}g")

JavaScript : Charger le JSON

// Node.js
const fs = require('fs');

function loadMacroTable(filepath) {
  const raw = fs.readFileSync(filepath, 'utf-8');
  const data = JSON.parse(raw);
  console.log(`Loaded ${data.record_count} foods (version ${data.version})`);
  return data.foods;
}

const foods = loadMacroTable('macro_reference_table.json');

// Group foods by category
const byCategory = {};
for (const food of foods) {
  if (!byCategory[food.category]) {
    byCategory[food.category] = [];
  }
  byCategory[food.category].push(food);
}

// Print summary
for (const [category, items] of Object.entries(byCategory)) {
  console.log(`${category}: ${items.length} foods`);
}

// Find low-calorie, high-fiber foods
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('\nHigh-fiber, low-calorie foods:');
highFiber.slice(0, 10).forEach(f => {
  console.log(`  ${f.food_name}: ${f.nutrients.fiber_g}g fiber, ${f.nutrients.calories_kcal} kcal`);
});

JavaScript : Charger le CSV dans le navigateur

// Browser-based CSV parsing (no dependencies)
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;
}

// Usage
const foods = await loadMacroCSV('/data/macro_reference_table.csv');
console.log(`Loaded ${foods.length} foods`);

Ces exemples illustrent les opérations les plus courantes : charger les données, rechercher et filtrer, regrouper par catégorie et trier par densité nutritionnelle. Les structures de données sont intentionnellement simples afin que vous n'ayez besoin d'aucune bibliothèque spéciale pour travailler avec elles.

Sources des données

Les tables de référence des macronutriments sont compilées à partir des sources primaires suivantes :

USDA SR Legacy Database. La base de données USDA Standard Reference Legacy est le jeu de données fondamental pour la composition des aliments aux États-Unis. Elle contient des données nutritionnelles analysées en laboratoire pour plus de 7 600 aliments. Nos tables utilisent SR Legacy comme source primaire pour les aliments génériques/sans marque. Nous avons choisi SR Legacy plutôt que la plus récente FoodData Central FNDDS car les valeurs SR Legacy sont plus largement validées et citées dans la recherche en nutrition.

USDA FoodData Central. Pour les aliments non couverts par SR Legacy, notamment les aliments plus récents et les valeurs mises à jour, nous faisons référence aux jeux de données Foundation Foods et Survey Foods de FoodData Central.

Bases de données internationales de composition des aliments. Pour les aliments consommés à l'échelle mondiale mais qui peuvent ne pas figurer dans les bases de données américaines, nous recoupons les données avec les tables de composition McCance and Widdowson de Public Health England, Food Standards Australia New Zealand (FSANZ) NUTTAB, le Canadian Nutrient File (CNF) et la base de données danoise de composition des aliments (Frida). Cela est particulièrement pertinent pour les fruits tropicaux, les céréales régionales et les méthodes de préparation courantes en dehors des États-Unis.

Données des fabricants. Pour les articles transformés et de marque dans les catégories snacks et boissons, nous faisons référence aux panneaux d'information nutritionnelle fournis par les fabricants. Lorsque les données du fabricant sont en conflit avec l'analyse en laboratoire, nous notons l'écart et optons par défaut pour les valeurs de laboratoire.

Toutes les valeurs ont été recoupées avec au moins deux sources indépendantes. Lorsque les sources divergent de plus de 10 %, nous avons investigué la cause (généralement des méthodes de préparation différentes ou des différences de cultivar) et sélectionné la valeur la plus représentative de la façon dont l'aliment est typiquement consommé.

Le jeu de données est versionné. La version actuelle est 1.4.0, dernière mise à jour en mars 2026. Nous mettons à jour les tables environ chaque trimestre pour intégrer les corrections, ajouter les aliments demandés et refléter tout changement significatif dans les bases de données sources.

Comment soumettre des corrections

Les données nutritionnelles sont par nature imparfaites. La composition des aliments varie selon la région, la saison, le cultivar et la méthode de préparation. Si vous trouvez une erreur ou avez une correction étayée par une source fiable, nous souhaitons en être informés.

Il existe trois façons de soumettre des corrections :

GitHub Issues. Les tables de référence des macronutriments sont hébergées dans un dépôt GitHub public. Ouvrez un issue avec le nom de l'aliment, le champ que vous pensez incorrect, la valeur actuelle, la valeur que vous estimez correcte et un lien vers votre source. Nous examinons les issues chaque semaine.

E-mail. Envoyez les corrections à data@nutrola.com avec les mêmes informations : nom de l'aliment, champ, valeur actuelle, valeur proposée et source. Nous répondrons dans les cinq jours ouvrables.

Pull requests. Si vous êtes à l'aise avec Git, vous pouvez forker le dépôt, modifier directement le fichier CSV ou JSON et soumettre un pull request. Incluez votre source dans la description du PR. Nous examinerons et fusionnerons les corrections étayées par des données fiables.

Nous n'acceptons pas les soumissions de produits de marque ou propriétaires via ce processus. Ceux-ci sont gérés par le pipeline principal de la base de données de Nutrola, qui dispose de son propre flux de vérification.

Intégration avec l'API Nutrola pour les données en temps réel

Les tables de référence des macronutriments téléchargeables sont un instantané statique — parfait pour l'utilisation hors ligne, les applications embarquées, les supports pédagogiques et les consultations rapides. Mais si vous avez besoin de données nutritionnelles en temps réel à grande échelle, l'API de données nutritionnelles de Nutrola fournit tout ce que contiennent ces tables et bien plus encore.

L'API couvre plus de 3 millions d'entrées alimentaires (contre plus de 500 dans les tables de référence), inclut des profils complets de micronutriments avec plus de 70 nutriments par article, prend en charge le scan de codes-barres, la recherche textuelle et l'autocomplétion, et fournit des données pour les produits de marque de 47 pays. Ce sont les mêmes données qui alimentent l'application Nutrola utilisée quotidiennement par plus de 2 millions de personnes.

Pour les développeurs : l'API est RESTful, renvoie du JSON et offre un niveau gratuit avec 500 requêtes par jour — suffisant pour le prototypage et les projets personnels. Les niveaux payants évoluent jusqu'à des millions de requêtes. Vous pouvez trouver la documentation complète sur api.nutrola.com/docs.

Pour les chercheurs et les institutions : nous proposons des licences académiques avec des limites de débit élevées et des capacités d'export en masse. Contactez research@nutrola.com pour plus de détails.

Les tables de référence des macronutriments et l'API se complètent mutuellement. Utilisez les tables pour le travail hors ligne, les jeux de données embarqués et les situations où vous avez besoin d'un fichier autonome. Utilisez l'API lorsque vous avez besoin d'étendue, de profondeur, de mises à jour en temps réel et de fonctionnalité de recherche.

Questions fréquemment posées

À quelle fréquence les tables de référence des macronutriments sont-elles mises à jour ?

Nous mettons à jour les tables environ chaque trimestre. Chaque publication reçoit un nouveau numéro de version (la version actuelle est 1.4.0). Les mises à jour incluent les corrections soumises par les utilisateurs, les ajouts d'aliments fréquemment demandés et les ajustements lorsque nos bases de données sources publient des valeurs révisées. Le fichier JSON inclut la version et la date de génération dans ses métadonnées, vous pouvez donc vérifier programmatiquement si vous disposez de la dernière version.

Puis-je utiliser ces données dans mon application commerciale ?

Oui. Les tables de référence des macronutriments sont publiées sous une licence Creative Commons Attribution 4.0 (CC BY 4.0). Vous pouvez utiliser, modifier et redistribuer les données dans des projets personnels et commerciaux à condition de fournir une attribution. Un lien vers nutrola.com ou une mention de « Nutrola Macro Reference Tables » dans vos crédits de données est suffisant. Vous n'avez pas besoin de demander une autorisation ni de payer de frais.

Pourquoi seulement plus de 500 aliments et pas la base de données Nutrola complète ?

Les tables de référence sont conçues comme un sous-ensemble pratique et de haute qualité des aliments les plus couramment consommés. Couvrir plus de 500 articles dans sept catégories répond à environ 90 % de ce que les gens mangent quotidiennement dans la plupart des pays. Étendre à 3 millions d'entrées rendrait les fichiers difficiles à manipuler pour de nombreux cas d'usage (la base de données complète dépasse 2 Go). Si vous avez besoin du jeu de données complet, l'API Nutrola fournit l'accès à tout.

Les valeurs sont-elles par portion ou pour 100 grammes ?

Par portion. Chaque entrée inclut une description de la portion (p. ex., « 1 medium apple (182g) ») et le poids en grammes correspondant, vous pouvez donc facilement convertir en valeurs pour 100 g en divisant chaque valeur de nutriment par le poids de la portion et en multipliant par 100. Nous avons choisi les valeurs par portion car elles sont plus immédiatement utiles pour le suivi des repas, la planification des repas et les applications orientées client.

Comment convertir les données en valeurs pour 100 g ?

Multipliez chaque valeur de nutriment par 100 et divisez par le champ serving_weight_g. Par exemple, si une portion de blanc de poulet de 170 g contient 53,4 g de protéines, la valeur de protéines pour 100 g est (53,4 * 100) / 170 = 31,4 g. Voici une fonction Python rapide :

def per_100g(food, nutrient_field):
    """Convert a per-serving nutrient value to per-100g."""
    serving_weight = food['serving_weight_g']
    if serving_weight == 0:
        return 0
    return round(food[nutrient_field] * 100 / serving_weight, 1)

Que faire si un aliment dont j'ai besoin n'est pas dans la table ?

Vérifiez d'abord si un aliment similaire existe sous un nom différent — utilisez la fonction de recherche de votre éditeur de texte ou un script simple pour rechercher dans le champ food_name. Si l'aliment n'est véritablement pas inclus, vous avez deux options : soumettre une demande via notre dépôt GitHub (nous priorisons les ajouts en fonction de la demande), ou utiliser l'API Nutrola qui couvre plus de 3 millions d'aliments et a bien plus de chances d'avoir ce dont vous avez besoin. Pour des recherches ponctuelles, l'application Nutrola elle-même vous permet de consulter la base de données complète gratuitement.

Prêt à transformer votre suivi nutritionnel ?

Rejoignez des milliers de personnes qui ont transformé leur parcours santé avec Nutrola !

Tables de référence des macros gratuites : Téléchargement de données nutritionnelles CSV et JSON | Nutrola