APIs y datos web
Consumir datos de APIs REST y páginas web.
Las APIs (Application Programming Interfaces) son la puerta de entrada a miles de fuentes de datos modernas. En esta lección aprenderás a conectar Power BI a APIs REST y servicios web populares.
¿Qué es una API?
Definición simple
Una API es un punto de acceso que te permite obtener datos de un servicio web mediante URLs.
Ejemplo de API:
https://api.empresa.com/ventas?fecha=2026-01-27
Responde con datos (formato JSON):
{
"fecha": "2026-01-27",
"total": 15420,
"transacciones": 87,
"productos": [
{"nombre": "Laptop", "cantidad": 5}
]
}
APIs vs otras fuentes
| Característica | Excel/CSV | Base de datos | API |
|---|---|---|---|
| Actualización | Manual | Programada | Tiempo real |
| Integración | Archivo | Conexión directa | HTTP requests |
| Formato | Tabular | Tabular | JSON/XML |
| Autenticación | No | Usuario/Pass | Tokens/Keys |
| Datos disponibles | Lo que guardas | Lo que consultas | Lo que expone la API |
Casos de uso comunes
| Servicio | API disponible | Datos que puedes obtener |
|---|---|---|
| Google Analytics | Sí | Visitas, conversiones, fuentes de tráfico |
| Salesforce | Sí | Leads, oportunidades, cuentas |
| Facebook Ads | Sí | Impresiones, clicks, conversiones |
| Stripe | Sí | Transacciones, clientes, suscripciones |
| GitHub | Sí | Commits, issues, pull requests |
| APIs internas | Depende | Lo que tu empresa construya |
Conectar una API REST básica
Requisitos previos
Para conectar una API necesitas:
- URL de la API: El endpoint (punto de acceso)
- Método HTTP: Generalmente GET para consultar datos
- Autenticación (si aplica): API Key, Bearer Token, OAuth
- Documentación: Para entender la estructura de respuesta
Paso 1: Conectar Web en Power BI
- Ve a Inicio → Obtener datos
- Busca "Web" o selecciona Otros → Web
- Haz clic en Conectar
Paso 2: Ingresar la URL
Opción Básica:
https://api.ejemplo.com/datos
Opción Avanzada (para partes dinámicas):
- Usa esta opción si la URL tiene parámetros que cambiarán
- Puedes crear parámetros en Power BI para URLs dinámicas
Ejemplo con parámetros:
https://api.ejemplo.com/ventas?fecha=2026-01-27®ion=norte
Paso 3: Autenticación
Las APIs requieren diferentes tipos de autenticación:
1. Anónima (sin autenticación)
Cuándo: APIs públicas gratuitas (ej: tipos de cambio, clima)
Configuración:
☑ Anónimo
2. API Key
Cuándo: Servicios que te dan una clave al registrarte
Configuración:
- Selecciona Básico
- Nombre de usuario: (vacío o tu email)
- Contraseña: tu API key
O en la URL:
https://api.ejemplo.com/datos?apikey=tu_clave_aqui
3. Bearer Token (OAuth)
Cuándo: Servicios empresariales (Salesforce, Google Analytics)
Configuración:
- Selecciona Organizacional o servicio específico
- Power BI maneja OAuth automáticamente
- Te redirige al servicio para autorizar
4. Header personalizado
Cuándo: APIs con autenticación personalizada
Configuración:
- Haz clic en Avanzado
- En "Encabezados HTTP", agrega:
Authorization: Bearer tu_token_aqui
Paso 4: Parsear JSON
Power BI muestra la respuesta como texto JSON:
Vista inicial:
[Record]
Para convertir a tabla:
- Haz clic en Transformar datos
- Si es una lista, haz clic en To Table
- Si es un registro, haz clic en los botones de expansión (↔)
- Selecciona los campos que necesitas
Antes:
{
"ventas": [
{"producto": "Laptop", "cantidad": 5},
{"producto": "Mouse", "cantidad": 20}
]
}
Después:
| producto | cantidad |
|----------|----------|
| Laptop | 5 |
| Mouse | 20 |
Conectar servicios populares
Google Analytics
Google Analytics tiene un conector nativo en Power BI.
Paso 1: Conectar
- Obtener datos → Servicios en línea → Google Analytics
- Haz clic en Iniciar sesión
- Autoriza a Power BI acceder a tus datos de Analytics
Paso 2: Seleccionar propiedad
El Navegador muestra:
- Todas tus cuentas de GA
- Propiedades dentro de cada cuenta
- Vistas disponibles
Estructura:
📊 Cuenta: Mi Empresa
🌐 Propiedad: Sitio Web Principal
👁️ Vista: Todas las visitas
👁️ Vista: Solo producción
Paso 3: Seleccionar métricas
Google Analytics te permite elegir:
Dimensiones (campos de agrupación):
- Fecha
- Fuente/Medio
- Página
- País/Ciudad
- Dispositivo
Métricas (valores numéricos):
- Usuarios
- Sesiones
- Tasa de rebote
- Páginas por sesión
- Duración promedio
Ejemplo de selección:
Dimensiones: Fecha, Fuente/Medio
Métricas: Usuarios, Sesiones, Conversiones
Rango: Últimos 90 días
Paso 4: Cargar datos
Haz clic en Cargar y Power BI traerá los datos seleccionados.
Limitaciones:
- Máximo 7 dimensiones + 10 métricas por query
- Rango máximo: 365 días por carga
- Sampleo en cuentas con mucho tráfico (>500K sesiones/día)
Salesforce
Salesforce también tiene conector nativo.
Paso 1: Conectar
- Obtener datos → Servicios en línea → Salesforce Reports
- O Salesforce Objects (más flexible)
- Ingresa tu URL de Salesforce:
https://tuempresa.salesforce.com
Paso 2: Autenticación
- Selecciona Cuenta organizativa
- Ingresa usuario y contraseña de Salesforce
- Si tienes 2FA, usa tu token de seguridad:
Contraseña: tu_password + token_seguridad
Paso 3: Seleccionar objetos
Salesforce Reports (más fácil):
- Muestra reportes ya creados en Salesforce
- Trae datos pre-filtrados y calculados
Salesforce Objects (más flexible):
- Acceso a objetos raw: Leads, Opportunities, Accounts
- Traes todas las columnas
- Aplicas filtros en Power Query
Objetos comunes:
📊 Salesforce Objects
📄 Lead
📄 Opportunity
📄 Account
📄 Contact
📄 Task
📄 Campaign
Facebook Ads / LinkedIn Ads
Requieren APIs con autenticación OAuth.
Paso 1: Conectar
No tienen conector nativo, usa Web:
Facebook Marketing API:
https://graph.facebook.com/v18.0/act_{ad_account_id}/insights
LinkedIn Marketing API:
https://api.linkedin.com/v2/adAnalytics
Paso 2: Obtener Access Token
- Ve a Facebook/LinkedIn Developers
- Crea una aplicación (o usa una existente)
- Genera un Access Token
- Copia el token
Paso 3: Usar el token en Power BI
En Power BI Web connector:
Opción 1: En la URL:
https://graph.facebook.com/v18.0/act_{id}/insights?access_token=tu_token
Opción 2: Header HTTP (más seguro):
Authorization: Bearer tu_token
Tip profesional: Usa conectores de terceros como Supermetrics o Funnel.io que simplifican estas conexiones.
APIs personalizadas (tu propia API)
Si tu empresa tiene una API interna, sigue estos pasos.
Paso 1: Obtener documentación
Pregunta a tu equipo de backend:
- URL base:
https://api.empresa.com - Endpoints disponibles:
/ventas,/clientes, etc. - Método de autenticación: API Key, Bearer Token
- Formato de respuesta: JSON o XML
- Límites de rate: Requests por minuto
Paso 2: Probar en Postman primero
Antes de conectar en Power BI, valida en Postman:
- Descarga Postman (gratis)
- Crea un request GET a tu API
- Agrega headers de autenticación
- Ejecuta y verifica la respuesta
Ejemplo en Postman:
GET https://api.empresa.com/ventas
Headers:
Authorization: Bearer abc123xyz
Paso 3: Replicar en Power BI
Una vez que funciona en Postman:
- Obtener datos → Web
- Ingresa la misma URL
- Opciones avanzadas → Agrega los mismos headers
- Conecta
Paso 4: Manejar paginación
Muchas APIs limitan resultados por página:
Respuesta con paginación:
{
"data": [...100 items...],
"next_page": "https://api.empresa.com/ventas?page=2"
}
Solución en Power Query:
- Crea una función recursiva que llame a cada página
- O usa el conector "Web API" con lógica de paginación
Código M básico:
let
Source = Json.Document(Web.Contents("https://api.empresa.com/ventas")),
data = Source[data],
// Lógica para llamar next_page si existe
in
data
Import vs DirectQuery para APIs
Import Mode (recomendado para APIs)
Ventajas:
- No saturas la API con requests constantes
- Velocidad instantánea en dashboards
- Menor riesgo de exceder rate limits
Desventajas:
- Datos pueden quedar obsoletos
- Requieres configurar refrescos
Cuándo usar:
- APIs con rate limits estrictos
- Datos que no cambian cada minuto
- Performance crítica
DirectQuery (rara vez soportado)
La mayoría de APIs no soportan DirectQuery en Power BI.
Excepciones:
- Azure services (Blob Storage, Cosmos DB)
- Algunas bases de datos expuestas vía REST
Mejores prácticas
1. Respeta los rate limits
Cada API tiene límites:
| Servicio | Límite típico |
|---|---|
| Google Analytics | 10 requests/segundo |
| Salesforce | 15,000 requests/día |
| Facebook Ads | 200 requests/hora |
| APIs internas | Variable |
Solución:
- Usa Import mode
- Programa refrescos en horarios de baja actividad
- Implementa caché cuando sea posible
2. Almacena credenciales de forma segura
Malo:
URL: https://api.com/data?apikey=12345abcde
Cualquiera con el .pbix puede ver tu key.
Bueno:
- Usa headers HTTP para tokens
- O autenticación OAuth (Power BI encripta tokens)
- Nunca compartas archivos .pbix con credenciales
3. Maneja errores de API
Las APIs fallan. Prepárate:
Errores comunes:
| Código HTTP | Significado | Solución |
|---|---|---|
| 401 | No autorizado | Revisa token/key |
| 403 | Prohibido | Verifica permisos |
| 429 | Too many requests | Reduce frecuencia |
| 500 | Error del servidor | Contacta proveedor |
En Power Query:
try
Json.Document(Web.Contents(url))
otherwise
null
4. Documenta tus conexiones
Agrega un cuadro de texto en tu reporte:
Fuente de datos: API de Ventas
Endpoint: https://api.empresa.com/ventas
Actualización: Diaria 3:00 AM
Rate limit: 1000 requests/día
Contacto: api-support@empresa.com
5. Optimiza las queries
Malo (traes todo):
https://api.com/transacciones
→ 1 millón de transacciones
Bueno (filtras en la API):
https://api.com/transacciones?fecha_desde=2024-01-01&limite=10000
→ Solo lo necesario
Errores comunes y soluciones
Error 1: "Web.Contents failed to get contents"
Síntoma:
DataSource.Error: Web.Contents failed to get contents from 'https://api...'
Causas y soluciones:
| Causa | Solución |
|---|---|
| URL incorrecta | Verifica en el navegador primero |
| API caída | Contacta al proveedor |
| Firewall bloqueando | Configura excepciones |
| SSL certificate error | Usa Postman para diagnosticar |
Error 2: "401 Unauthorized"
Síntoma:
401 Unauthorized
Solución:
- Verifica que el token/key sea correcto
- Confirma que no haya expirado
- Revisa que tengas permisos correctos
- Re-autoriza si es OAuth
Error 3: "Formula.Firewall"
Síntoma:
Formula.Firewall: Query 'Query1' references other queries, but isn't included in the firewall.
Solución:
- Ve a Archivo → Opciones → Privacidad
- Cambia a "Ignorar los niveles de privacidad"
- O configura cada fuente con el mismo nivel de privacidad
Error 4: "JSON parse error"
Síntoma:
Expression.Error: Invalid JSON
Causa: La API no respondió JSON válido
Diagnóstico:
- Haz clic en "View Native" en Power Query
- Revisa la respuesta cruda
- La API pudo haber devuelto HTML (error) en vez de JSON
Solución:
- Verifica la URL
- Revisa headers de autenticación
- Prueba en Postman primero
Error 5: "Too many requests"
Síntoma:
429 Too Many Requests
Solución:
- Reduce la frecuencia de refrescos
- Implementa delay entre requests
- Contacta al proveedor para aumentar límite
- Usa caché intermedio si es posible
Herramientas complementarias
Postman
Uso: Probar APIs antes de conectar en Power BI
Descarga: postman.com
Flujo:
- Prueba request en Postman
- Verifica que funciona
- Replica en Power BI
Power Query M code
Para APIs complejas, necesitarás aprender M:
Recursos:
Ejemplo básico:
let
url = "https://api.empresa.com/ventas",
headers = [Authorization="Bearer token123"],
response = Json.Document(Web.Contents(url, [Headers=headers])),
data = response[data],
toTable = Table.FromList(data, Splitter.SplitByNothing(), null, null, ExtraValues.Error)
in
toTable
Ejercicio práctico
Opción A: API pública gratuita
Practica con una API de tipos de cambio:
- API gratuita: exchangerate-api.com
- Obtén tu API key (gratis)
- Endpoint:
https://v6.exchangerate-api.com/v6/TU_KEY/latest/USD - Conecta en Power BI:
- Obtener datos → Web
- Pega la URL
- Autenticación: Anónima
- Transforma:
- Expande el campo "conversion_rates"
- Crea tabla con monedas y tasas
- Crea visual:
- Tabla con monedas y sus valores vs USD
Opción B: Google Analytics (si tienes cuenta)
- Conecta tu cuenta de Google Analytics
- Selecciona:
- Dimensión: Fecha
- Métrica: Usuarios
- Rango: Últimos 30 días
- Crea gráfico de línea de usuarios por día
Opción C: API simulada
Si no tienes acceso a APIs:
- Usa JSONPlaceholder (API de prueba):
https://jsonplaceholder.typicode.com/posts - Conecta en Power BI (sin autenticación)
- Transforma a tabla
- Expande campos: userId, id, title, body
Puntos clave de esta lección
- Las APIs permiten acceso a datos en tiempo real de servicios web
- Power BI soporta APIs REST mediante el conector Web
- Google Analytics y Salesforce tienen conectores nativos en Power BI
- La autenticación puede ser: Anónima, API Key, Bearer Token, u OAuth
- Respeta los rate limits de cada API para evitar bloqueos
- Usa Import mode para APIs con límites estrictos
- Prueba APIs en Postman antes de conectar en Power BI
Próxima lección
En la siguiente lección entrarás a Power Query para transformar y limpiar datos, la herramienta más poderosa de preparación de datos en Power BI.
Quiz de comprensión
- ¿Qué formato de datos devuelven la mayoría de APIs modernas?
- ¿Cuál es la diferencia entre API Key y OAuth?
- Menciona dos servicios que tienen conectores nativos en Power BI
- ¿Por qué es recomendable usar Import mode en lugar de DirectQuery para APIs?
- ¿Qué herramienta puedes usar para probar una API antes de conectarla en Power BI?
Completaste esta leccion?
Marca esta leccion como completada. Tu progreso se guardara en tu navegador.