Tablas de referencia de macronutrientes gratuitas: Descarga datos nutricionales completos en CSV y JSON
Descarga tablas de referencia de macronutrientes gratuitas con datos nutricionales completos para más de 500 alimentos comunes en formato CSV y JSON. Incluye proteínas, carbohidratos, grasas, fibra y calorías organizados por categoría de alimento.
Ya sea que estés desarrollando una aplicación de nutrición, realizando un estudio de investigación, asesorando clientes o simplemente quieras tener una hoja de referencia confiable en tu escritorio, necesitas datos de macronutrientes limpios en un formato con el que realmente puedas trabajar. Las bases de datos gubernamentales existen, pero son extensas, inconsistentes y están formateadas para burócratas en lugar de para desarrolladores.
Hemos preparado un conjunto de tablas de referencia de macronutrientes gratuitas que cubren más de 500 alimentos comunes con desgloses completos de macronutrientes. Los datos están disponibles en formatos CSV y JSON, listos para incorporarse en una hoja de cálculo, una base de datos, un script o una aplicación. Cada entrada ha sido verificada contra fuentes primarias, y los archivos están estructurados para que puedas comenzar a usarlos inmediatamente sin limpieza ni transformación.
Esta página cubre exactamente qué contienen las tablas, cómo están estructurados los datos, cómo cargarlos programáticamente y cómo contribuir correcciones si encuentras algo que necesita actualización.
Qué está incluido
Las tablas de referencia de macronutrientes contienen más de 500 de los alimentos más comúnmente consumidos en siete categorías principales. Para cada alimento, obtienes:
- Nombre del alimento — el nombre estándar en inglés utilizado en la ciencia de la nutrición
- Categoría — una de siete categorías principales (más sobre estas a continuación)
- Subcategoría — una agrupación más específica dentro de la categoría principal
- Descripción de la porción — un tamaño de porción legible (p. ej., "1 banana mediana", "1 taza cocida")
- Peso de la porción en gramos — el equivalente en gramos de ese tamaño de porción
- Calorías — energía total en kilocalorías (kcal)
- Proteína — gramos de proteína por porción
- Grasa total — gramos de grasa total por porción
- Grasa saturada — gramos de grasa saturada por porción
- Carbohidratos totales — gramos de carbohidratos totales por porción
- Fibra dietética — gramos de fibra dietética por porción
- Azúcar — gramos de azúcares totales por porción
- Sodio — miligramos de sodio por porción
Todos los valores se reportan por el tamaño de porción indicado, no por 100 gramos. Elegimos este enfoque porque los datos basados en porciones son lo que la mayoría de las personas realmente necesitan al hacer seguimiento de comidas, crear planes de alimentación o mostrar información nutricional en una interfaz. Si necesitas valores por 100 g, dividir por el peso de la porción y multiplicar por 100 es sencillo.
Las tablas no incluyen micronutrientes más allá del sodio y la fibra. Para perfiles completos de micronutrientes (vitaminas, minerales, aminoácidos), consulta la sección sobre la API de Nutrola al final de este artículo — ahí es donde residen los datos detallados.
Especificaciones del formato de datos
Formato CSV
El archivo CSV utiliza codificación UTF-8 con una fila de encabezado. Los campos están delimitados por comas y los campos de texto están entrecomillados. Así es como se ve la estructura:
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
El archivo CSV es compatible con Microsoft Excel, Google Sheets, LibreOffice Calc, Apple Numbers y cualquier lenguaje de programación con soporte para análisis de CSV. No se necesita ninguna configuración especial — abre el archivo y se analizará correctamente.
Formato JSON
El archivo JSON contiene un array de objetos, uno por alimento. La estructura refleja los campos del 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
}
}
]
}
El archivo JSON incluye campos de metadatos en el nivel superior: una cadena de versión para el seguimiento de actualizaciones, la fecha de generación, el nombre de la fuente y el recuento total de registros. Esto facilita verificar que tienes la última versión y construir lógica de verificación de actualizaciones en tus aplicaciones.
Los valores numéricos se almacenan como números, no como cadenas de texto. Los valores nulos no aparecen — si un valor de nutriente es desconocido, el alimento se excluye del conjunto de datos en lugar de incluirse con datos faltantes. Esta fue una decisión deliberada para mantener los datos limpios y evitar errores silenciosos en los cálculos.
Descripciones de campos
Aquí hay un desglose detallado de cada campo, incluyendo unidades, rangos esperados y casos especiales:
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
| food_name | string | — | Nombre estándar en inglés. Incluye el método de preparación donde sea relevante (p. ej., "cooked", "raw", "dried"). |
| category | string | — | Una de siete categorías principales. Consulta la sección de categorías a continuación. |
| subcategory | string | — | Una agrupación más específica. Por ejemplo, dentro de "Proteins" encontrarás "Poultry", "Red Meat", "Fish & Seafood", "Legumes" y "Eggs". |
| serving_description | string | — | Un tamaño de porción legible. Siempre incluye el peso en gramos entre paréntesis. |
| serving_weight_g | number | gramos | El peso numérico en gramos de la porción. Valores enteros para la mayoría de los artículos, un decimal para artículos donde la precisión importa. |
| calories_kcal | number | kcal | Energía total. Calculada usando el sistema Atwater (4 kcal/g proteína, 4 kcal/g carbohidratos, 9 kcal/g grasa). |
| protein_g | number | gramos | Proteína total. Precisión de un decimal. |
| total_fat_g | number | gramos | Grasa total incluyendo saturada, monoinsaturada y poliinsaturada. |
| saturated_fat_g | number | gramos | Solo ácidos grasos saturados. |
| total_carbs_g | number | gramos | Carbohidratos totales incluyendo fibra y azúcares. |
| fiber_g | number | gramos | Fibra dietética total (soluble + insoluble). |
| sugar_g | number | gramos | Azúcares totales (naturales + añadidos). El conjunto de datos no separa los azúcares añadidos de los naturales. |
| sodium_mg | number | miligramos | Contenido de sodio. Ten en cuenta que esto es en miligramos, no en gramos, a diferencia de los otros campos de nutrientes. |
Algunas notas sobre la precisión: todos los valores de nutrientes están redondeados a un decimal. Esto coincide con el nivel de precisión de los datos de origen subyacentes. Reportar más decimales implicaría un nivel falso de exactitud — la composición de los alimentos varía naturalmente entre un 5-15 % dependiendo de las condiciones de cultivo, la raza del animal y los métodos de preparación.
Categorías de alimentos
Los más de 500 alimentos están organizados en siete categorías principales, cada una con múltiples subcategorías:
Proteínas
Aproximadamente 95 entradas que cubren aves de corral (pechuga de pollo, muslo, pavo, pavo molido), carne roja (solomillo de res, carne molida de res en varios porcentajes de magro, lomo de cerdo, cordero), pescados y mariscos (salmón, atún, camarones, bacalao, tilapia, sardinas), huevos (enteros, claras, revueltos) y proteínas de origen vegetal (tofu, tempeh, seitán, edamame). Las legumbres como las lentejas, los garbanzos y los frijoles negros se incluyen aquí en lugar de en granos porque su papel nutricional principal es el aporte de proteínas.
Granos y almidones
Aproximadamente 80 entradas que cubren granos integrales (arroz integral, avena, quinoa, cebada, bulgur), granos refinados (arroz blanco, pan blanco, pasta), vegetales con almidón (papas, batatas, maíz) y productos de granos comunes (tortillas, bagels, galletas, cuscús). Se proporcionan valores tanto cocidos como secos para los granos donde la distinción es importante.
Frutas
Aproximadamente 65 entradas que cubren frutas frescas comunes (manzanas, bananas, naranjas, fresas, arándanos, uvas), frutas tropicales (mangos, piña, papaya, kiwi), frutas secas (pasas, dátiles, albaricoques secos, arándanos rojos) y frutas congeladas. Todas las entradas de frutas frescas son para la porción cruda y comestible — semillas, cáscaras y huesos se excluyen del peso de la porción cuando corresponde.
Vegetales
Aproximadamente 85 entradas que cubren hojas verdes (espinaca, col rizada, lechuga romana, rúcula), vegetales crucíferos (brócoli, coliflor, coles de Bruselas, repollo), vegetales de raíz (zanahorias, remolachas, nabos, rábanos), aliáceas (cebollas, ajo), solanáceas (tomates, pimientos, berenjena) y otros vegetales comunes (pepino, apio, calabacín, champiñones, espárragos). Se proporcionan valores tanto crudos como cocidos para vegetales donde la cocción cambia significativamente la densidad de nutrientes por porción.
Lácteos y alternativas
Aproximadamente 70 entradas que cubren leche (entera, 2 %, descremada y leches vegetales), yogur (griego, regular, saborizado, vegetal), queso (cheddar, mozzarella, feta, requesón, queso crema, parmesano), mantequilla, crema y alternativas lácteas comunes (leche de almendras, leche de avena, leche de soja, yogur de coco). Las leches y yogures vegetales se agrupan aquí en lugar de en una categoría separada porque los usuarios típicamente los buscan como sustitutos directos.
Snacks y alimentos procesados
Aproximadamente 75 entradas que cubren frutos secos y semillas (almendras, nueces, cacahuetes, semillas de chía, semillas de lino, semillas de girasol), mantequillas de frutos secos (mantequilla de cacahuete, mantequilla de almendras), snacks comunes (pretzels, palomitas de maíz, barras de granola, barras de proteína, mezcla de frutos secos, chips, chocolate negro), untables y condimentos (hummus, guacamole, salsa, mayonesa, aceite de oliva, miel) y otros artículos comúnmente registrados como proteína en polvo y bocaditos energéticos.
Bebidas
Aproximadamente 60 entradas que cubren jugos (jugo de naranja, jugo de manzana, jugo de arándano), refrescos (cola, gaseosa de limón-lima, ginger ale), bebidas deportivas y energéticas, bebidas de café (café negro, latte, cappuccino, moca con varios tipos de leche), bases para smoothies, bebidas alcohólicas (cerveza, vino, licores) y adiciones comunes (crema, azúcar, jarabes saborizados). El agua no está incluida ya que no tiene contenido de macronutrientes.
Uso programático de los datos
El objetivo principal de proporcionar formatos CSV y JSON es que puedas cargar estos datos directamente en tu código. Aquí hay ejemplos funcionales en Python y JavaScript.
Python: Cargar el 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: Cargar el 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: Cargar el 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: Cargar el CSV en el navegador
// 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`);
Estos ejemplos demuestran las operaciones más comunes: cargar los datos, buscar y filtrar, agrupar por categoría y ordenar por densidad de nutrientes. Las estructuras de datos son intencionalmente simples para que no necesites ninguna biblioteca especial para trabajar con ellas.
Fuentes de datos
Las tablas de referencia de macronutrientes se compilan a partir de las siguientes fuentes primarias:
USDA SR Legacy Database. La base de datos USDA Standard Reference Legacy es el conjunto de datos fundamental para la composición de alimentos en Estados Unidos. Contiene datos de nutrientes analizados en laboratorio para más de 7.600 alimentos. Nuestras tablas utilizan SR Legacy como fuente primaria para alimentos genéricos/sin marca. Elegimos SR Legacy en lugar de la más reciente FoodData Central FNDDS porque los valores de SR Legacy están más ampliamente validados y citados en la investigación nutricional.
USDA FoodData Central. Para alimentos no cubiertos en SR Legacy, particularmente alimentos más nuevos y valores actualizados, hacemos referencia a los conjuntos de datos Foundation Foods y Survey Foods de FoodData Central.
Bases de datos internacionales de composición de alimentos. Para alimentos que se consumen globalmente pero que pueden no aparecer en las bases de datos estadounidenses, cruzamos datos con las tablas de composición McCance and Widdowson de Public Health England, Food Standards Australia New Zealand (FSANZ) NUTTAB, el Canadian Nutrient File (CNF) y la base de datos danesa de composición de alimentos (Frida). Esto es particularmente relevante para frutas tropicales, granos regionales y métodos de preparación comunes fuera de Estados Unidos.
Datos de fabricantes. Para artículos procesados y de marca en las categorías de snacks y bebidas, hacemos referencia a los paneles de información nutricional proporcionados por los fabricantes. Cuando los datos del fabricante entran en conflicto con el análisis de laboratorio, anotamos la discrepancia y optamos por los valores de laboratorio.
Todos los valores han sido verificados contra al menos dos fuentes independientes. Cuando las fuentes difieren en más de un 10 %, investigamos la causa (generalmente diferentes métodos de preparación o diferencias de cultivar) y seleccionamos el valor más representativo de cómo se consume típicamente el alimento.
El conjunto de datos está versionado. La versión actual es 1.4.0, actualizada por última vez en marzo de 2026. Actualizamos las tablas aproximadamente cada trimestre para incorporar correcciones, agregar alimentos solicitados y reflejar cualquier cambio significativo en las bases de datos de origen.
Cómo contribuir correcciones
Los datos nutricionales son inherentemente imperfectos. La composición de los alimentos varía según la región, la temporada, el cultivar y el método de preparación. Si encuentras un error o tienes una corrección respaldada por una fuente confiable, queremos saberlo.
Hay tres formas de enviar correcciones:
GitHub Issues. Las tablas de referencia de macronutrientes están alojadas en un repositorio público de GitHub. Abre un issue con el nombre del alimento, el campo que crees que es incorrecto, el valor actual, el valor que crees que es correcto y un enlace a tu fuente. Revisamos los issues semanalmente.
Correo electrónico. Envía correcciones a data@nutrola.com con la misma información: nombre del alimento, campo, valor actual, valor propuesto y fuente. Responderemos dentro de cinco días hábiles.
Pull requests. Si te sientes cómodo con Git, puedes hacer fork del repositorio, editar el archivo CSV o JSON directamente y enviar un pull request. Incluye tu fuente en la descripción del PR. Revisaremos y fusionaremos correcciones que estén respaldadas por datos confiables.
No aceptamos envíos de productos de marca o propietarios a través de este proceso. Estos se manejan a través del pipeline principal de la base de datos de Nutrola, que tiene su propio flujo de verificación.
Integración con la API de Nutrola para datos en tiempo real
Las tablas de referencia de macronutrientes descargables son una instantánea estática — ideales para uso sin conexión, aplicaciones integradas, materiales educativos y consultas rápidas. Pero si necesitas datos nutricionales en tiempo real a escala, la API de datos nutricionales de Nutrola proporciona todo lo que contienen estas tablas y mucho más.
La API cubre más de 3 millones de entradas de alimentos (comparado con más de 500 en las tablas de referencia), incluye perfiles completos de micronutrientes con más de 70 nutrientes por artículo, soporta escaneo de códigos de barras, búsqueda de texto y autocompletado, y sirve datos para productos de marca de 47 países. Son los mismos datos que alimentan la aplicación Nutrola utilizada por más de 2 millones de personas diariamente.
Para desarrolladores: la API es RESTful, devuelve JSON y ofrece un nivel gratuito con 500 solicitudes por día — suficiente para prototipos y proyectos personales. Los niveles de pago escalan a millones de solicitudes. Puedes encontrar la documentación completa en api.nutrola.com/docs.
Para investigadores e instituciones: ofrecemos licencias académicas con límites de tasa elevados y capacidades de exportación masiva. Contacta a research@nutrola.com para más detalles.
Las tablas de referencia de macronutrientes y la API se complementan entre sí. Usa las tablas para trabajo sin conexión, conjuntos de datos integrados y situaciones donde necesitas un archivo autónomo. Usa la API cuando necesites amplitud, profundidad, actualizaciones en tiempo real y funcionalidad de búsqueda.
Preguntas frecuentes
¿Con qué frecuencia se actualizan las tablas de referencia de macronutrientes?
Actualizamos las tablas aproximadamente cada trimestre. Cada lanzamiento recibe un nuevo número de versión (la versión actual es 1.4.0). Las actualizaciones incluyen correcciones enviadas por usuarios, adiciones de alimentos comúnmente solicitados y ajustes cuando nuestras bases de datos de origen publican valores revisados. El archivo JSON incluye la versión y la fecha de generación en sus metadatos, para que puedas verificar programáticamente si tienes la última versión.
¿Puedo usar estos datos en mi aplicación comercial?
Sí. Las tablas de referencia de macronutrientes se publican bajo una licencia Creative Commons Attribution 4.0 (CC BY 4.0). Puedes usar, modificar y redistribuir los datos en proyectos tanto personales como comerciales siempre que proporciones atribución. Un enlace a nutrola.com o una mención de "Nutrola Macro Reference Tables" en tus créditos de datos es suficiente. No necesitas solicitar permiso ni pagar una tarifa.
¿Por qué solo más de 500 alimentos y no la base de datos completa de Nutrola?
Las tablas de referencia están diseñadas para ser un subconjunto práctico y de alta calidad de los alimentos más comúnmente consumidos. Cubrir más de 500 artículos en siete categorías aborda aproximadamente el 90 % de lo que las personas comen a diario en la mayoría de los países. Expandir a 3 millones de entradas haría que los archivos fueran difíciles de manejar para muchos casos de uso (la base de datos completa supera los 2 GB). Si necesitas el conjunto de datos completo, la API de Nutrola proporciona acceso a todo.
¿Los valores son por porción o por 100 gramos?
Por porción. Cada entrada incluye una descripción de la porción (p. ej., "1 medium apple (182g)") y el peso en gramos correspondiente, para que puedas convertir fácilmente a valores por 100 g dividiendo cada valor de nutriente por el peso de la porción y multiplicando por 100. Elegimos valores por porción porque son más inmediatamente útiles para el seguimiento de comidas, la planificación de comidas y las aplicaciones orientadas al cliente.
¿Cómo convierto los datos a valores por 100 g?
Multiplica cada valor de nutriente por 100 y divide por el campo serving_weight_g. Por ejemplo, si una porción de pechuga de pollo de 170 g contiene 53,4 g de proteína, el valor de proteína por 100 g es (53,4 * 100) / 170 = 31,4 g. Aquí hay una función rápida en Python:
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)
¿Qué debo hacer si un alimento que necesito no está en la tabla?
Primero, verifica si existe un alimento similar bajo un nombre diferente — usa la función de búsqueda de tu editor de texto o un script simple para buscar en el campo food_name. Si el alimento genuinamente no está incluido, tienes dos opciones: enviar una solicitud a través de nuestro repositorio de GitHub (priorizamos las adiciones según la demanda), o usar la API de Nutrola que cubre más de 3 millones de alimentos y es mucho más probable que tenga lo que necesitas. Para consultas individuales, la propia aplicación Nutrola te permite buscar en la base de datos completa de forma gratuita.
¿Listo para transformar tu seguimiento nutricional?
¡Únete a miles que han transformado su viaje de salud con Nutrola!