Investing.com — Datos via HTML Scrape
Skill para extraer datos de Investing.com parseando el HTML publico. Sin API key, sin autenticacion.
⚠️ Aviso Legal y Tecnico
- Investing.com no expone API publica. Los datos se extraen de las paginas HTML con Cloudflare bot protection.
- Dependencia obligatoria:
curl_cffi(impersona Chrome 120 a nivel TLS —requestspuro devuelve el challenge de Cloudflare, no datos). - Rate limit agresivo: respetar 1-2 segundos entre requests. Cloudflare devuelve 429/403 si se hacen muchas requests muy rapido. El script reintenta con backoff automatico.
- Datos delayed: el precio mostrado en la pagina es el del ultimo cierre disponible (15-20 min de delay para US equities, similar para otros).
- Respetar terminos de servicio de Investing.com. No hacer mas de 1-2 requests/segundo. No usar para redistribuir masivamente.
- Investing.com se reserva el derecho de bloquear rangos de IP. El skill puede dejar de funcionar en cualquier momento.
Scripts
| Script | Descripcion |
|---|---|
| fetch_investing.py | Script principal: todos los modos disponibles |
Instalacion de dependencias
bashpip install curl_cffi
NO funciona con
requestspuro. Cloudflare detecta y bloquea.
Uso rapido
bash# === COTIZACIONES (auto-detect tipo) === python scripts/fetch_investing.py quote gold python scripts/fetch_investing.py quote eur-usd python scripts/fetch_investing.py quote us-spx-500 python scripts/fetch_investing.py quote bitcoin python scripts/fetch_investing.py quote ypf-sa --type equities python scripts/fetch_investing.py quote apple-computer-inc -q # === BUSQUEDA EN SITEMAPS === python scripts/fetch_investing.py search YPF python scripts/fetch_investing.py search gold --category commodities python scripts/fetch_investing.py search MERVAL --category indices python scripts/fetch_investing.py search AR --category currencies --limit 30 # === SITEMAPS COMPLETOS === python scripts/fetch_investing.py sitemap commodities # 344 instrumentos python scripts/fetch_investing.py sitemap currencies # 2,394 cruces python scripts/fetch_investing.py sitemap indices # 20K+ indices python scripts/fetch_investing.py sitemap equities # 81K+ acciones python scripts/fetch_investing.py sitemap etfs # 30K+ ETFs # === HISTORICO OHLCV === python scripts/fetch_investing.py historical gold python scripts/fetch_investing.py historical eur-usd python scripts/fetch_investing.py historical ypf-sa --pages 5 # ~115 dias python scripts/fetch_investing.py historical apple-computer-inc # === FUNDAMENTALS === python scripts/fetch_investing.py profile apple-computer-inc python scripts/fetch_investing.py financials apple-computer-inc --ftype income python scripts/fetch_investing.py financials apple-computer-inc --ftype balance python scripts/fetch_investing.py financials apple-computer-inc --ftype cashflow python scripts/fetch_investing.py ratios apple-computer-inc python scripts/fetch_investing.py dividends apple-computer-inc python scripts/fetch_investing.py earnings apple-computer-inc # === GUARDAR A ARCHIVO === python scripts/fetch_investing.py quote gold -o gold_quote.json python scripts/fetch_investing.py historical ypf-sa -o ypf_hist.json # === MODO SILENCIOSO (solo JSON, sin logs) === python scripts/fetch_investing.py quote gold -q
Modos disponibles
| Modo | Data | Endpoint |
|---|---|---|
quote | Cotizacion (precio, cambio, OHLC, volume, pair_id) | www.investing.com/{type}/{slug} |
search | Busqueda fuzzy sobre sitemaps publicos | Sitemap XMLs |
sitemap | Descarga sitemap completo (URLs de instrumentos) | Sitemap XMLs |
historical | Historico OHLCV desde la tabla HTML | /{type}/{slug}-historical-data |
profile | Descripcion, sector, industria, pais, sede, empleados | /{type}/{slug}-company-profile |
financials | Income / Balance / Cash Flow (TTM + ultimos 5 anios) | /{type}/{slug}-income-statement etc. |
ratios | Margenes, retornos, valuation ratios | /{type}/{slug}-ratios |
dividends | Historial completo de dividendos | /{type}/{slug}-dividends |
earnings | Earnings history (EPS real vs estimado) | /{type}/{slug}-earnings |
Tipos de instrumentos
| Tipo | --type | Slug example | Cobertura |
|---|---|---|---|
| Equity (stock/ADR) | equities | apple-computer-inc, ypf-sa, ggal | 81,518 |
| Commodity | commodities | gold, crude-oil, brent-oil | 344 |
| Indice | indices | us-spx-500, ibovespa, dax | 20,000+ |
| Currency pair (forex) | currencies | eur-usd, usd-ars, brl-usd | 2,394 |
| ETF | etfs | spdr-s-p-500, vanguard-ftse-all-world | 30,000+ |
| Crypto | crypto | bitcoin, ethereum | 4,135+ coins, 20K+ pairs |
| Tasa / Bono | rates-bonds | (no en sitemap directo) | 20,000+ |
| Fondo | funds | (no en sitemap directo) | 100K+ |
| Certificado | certificates | (no en sitemap directo) | 6,222 |
Auto-deteccion: si no pasas
--type, el script prueba commodities → currencies → indices → etfs → crypto → equities. Las equities son las mas lentas/rate-limited, asi que se prueban al final.
Slugs utiles (Argentina / LatAm)
| Slug | Nombre | Simbolo | Tipo |
|---|---|---|---|
ypf-sa | YPF Sociedad Anonima | YPF | equities |
ypf-sociedad | YPF Sociedad (variante) | YPF | equities |
pampa-energia | Pampa Energia SA | PAMPm | equities |
pampa-energia-sa | Pampa Energia ADR | PAM | equities |
central-puerto | Central Puerto S.A. | CEPUm | equities |
central-puerto-adr | Central Puerto ADR | CEPU | equities |
tenaris | Tenaris SA | TENR | equities |
tenaris-sa | Tenaris ADR | TS | equities |
bbva | Banco Bilbao Vizcaya Argentaria | BBVA | equities |
banco-macro-sa | Banco Macro SA | BMA | equities |
mercadolibre | MercadoLibre | MELI | equities |
mercadolibre-inc | MercadoLibre Inc | MELI | equities |
globant-sa | Globant SA | GLOB | equities |
globant-cedear | Globant CEDEAR | GLOBm | equities |
despegar-com | Despegar | DESP | equities |
despegar-ba | Despegar Buenos Aires | DESPm | equities |
galicia-b | Grupo Financiero Galicia (BA) | GGALm | equities |
grupo-financiero-galicia-sa-adr | Grupo Financiero Galicia ADR | GGAL | equities |
edenor | Edenor | EDNm | equities |
transportadora-de-gas-del-sur-sa | TGS SA | TGSm | equities |
siderar | Ternium / Siderar | TXR | equities |
aluar | Aluar | ALUA | equities |
mirgor | Mirgor | MIRG | equities |
loma-negra | Loma Negra | LOMA | equities |
cresud | Cresud | CRESY | equities |
transener | Transener | TRAN | equities |
capex | Capex | CAPX | equities |
solvay | Solvay | SOLB | equities |
holcim | Holcim | HCMLY | equities |
consultatio-s. | Consultatio | CONO | equities |
garovaglio | Garovaglio | GCLA | equities |
laboratorios-richmond | Laboratorios Richmond | RICH | equities |
longvie | Longvie | LONG | equities |
rigolleau | Rigolleau | RIGO | equities |
Currencies (FX)
| Slug | Par | Notas |
|---|---|---|
usd-ars | USD/ARS (oficial) | Dolar oficial |
eur-usd | EUR/USD | Mayor |
brl-usd | BRL/USD (oficial) | Dolar oficial Brasil |
mxn-usd | MXN/USD (oficial) | Peso mexicano |
ars-brl | ARS/BRL | Peso argentino vs real |
ars-mxn | ARS/MXN | Peso argentino vs peso mexicano |
aed-ars | AED/ARS | Dirham → Peso |
MEP / CCL / Blue: Investing.com no expone estos pares derivados como tales. Para MEP/CCL/blue, usar data912 que sí los cubre.
Datos devueltos
quote
json{ "last": "4,501.47", // precio formateado (con separadores) "last_raw": 4501.47, // precio como float "change": -0.78, // cambio absoluto vs last_close "change_pct": -0.02, // (no siempre presente) "last_close": 4502.25, // (no siempre presente) "bid": 4500.74, // bid (commodities, currencies) "ask": 4501.19, // ask "open": 4502.5, // apertura del dia "high": 4508.75, // maximo del dia "low": 4499.97, // minimo del dia "volume": 1633, // volumen "avg_volume": 0, // volumen promedio "prev_close": null, // cierre anterior "pair_id": 1057391, // ID interno de investing.com "name": "Gold Futures", // nombre completo "symbol": "GC", // ticker "currency": "USD", // moneda "exchange": null, // exchange "country": null, // pais "updated_epoch": 1749091200, // timestamp ultima actualizacion "page_title": "Gold Futures - Investing.com", "slug": "gold", "type": "commodities", "url": "https://www.investing.com/commodities/gold" }
Nota: no todos los campos aparecen en todos los instrumentos. Equities suelen tener
last,last_raw,change,bid,ask,open,high,low,volume,prev_close,pair_id,name,symbol,currency,exchange. Commodities suelen incluir ademasupdated_epoch.
historical
json{ "slug": "gold", "type": "commodities", "count": 23, "rows": [ { "date": "Jun 04, 2026", "price": "4,497.70", "open": "4,481.76", "high": "4,543.12", "low": "4,470.55", "vol": "3.16K", "change_pct": "+0.69%" }, ... ] }
23 dias por default (1 pagina). Usar
--pages 5para ~115 dias, etc.
financials
Devuelve estructura con periodos (TTM, 2024, 2023, 2022, 2021, 2020) y filas con label + valores:
json{ "slug": "apple-computer-inc", "type": "equities", "ftype": "income", "periods": ["TTM", "2024", "2023", "2022", "2021", "2020"], "count": 23, "rows": [ {"label": "Total Revenue", "values": ["394,328", "385,100", "383,285", "394,328", "365,817", "274,515"]}, {"label": "Gross Profit", "values": ["170,000", ...]}, ... ] }
--ftype income|balance|cashflow
ratios
Misma estructura que financials pero con ratios (margenes, retornos, valuation, etc).
dividends
Array de filas con celdas (fecha, dividend, yield, etc):
json{ "slug": "apple-computer-inc", "type": "equities", "count": 18, "rows": [ ["Ex-Dividend Date", "May 09, 2025", "Quarterly", "0.26", "..."], ... ] }
earnings
Array de filas (date, EPS actual, EPS estimado, surprise, etc):
json{ "slug": "apple-computer-inc", "type": "equities", "count": 20, "rows": [ ["Aug 01, 2024", "Q3 2024", "1.40", "1.35", "+3.70%", "..."], ... ] }
Consideraciones tecnicas
¿Por que curl_cffi y no requests?
Investing.com usa Cloudflare con proteccion anti-bot a nivel TLS. El User-Agent no importa — Cloudflare hace TLS fingerprinting y rechaza clientes que no sean navegadores reales.
requests(Python puro, TLS fingerprint de Python urllib3): bloqueado, devuelve challenge HTML.curl_cffi.requests.Session(impersonate="chrome120"): pasa el challenge porque impersona el fingerprint TLS de Chrome 120.
curl_cffi es un wrapper sobre curl-impersonate (fork de libcurl con fingerprints pre-cargados). Es una libreria con wheels precompilados para Windows/Mac/Linux — instalar y usar sin compilar nada.
Rate limit y Cloudflare
Cloudflare impone rate limits agresivos:
- /equities/ es el path mas rate-limited (mas requests, mas proteccion)
- /commodities/, /currencies/, /indices/ son mas permisivos
- Si haces 10+ requests en pocos segundos → 429 o 403 con "Just a moment..."
- Backoff recomendado: 2-3 segundos entre requests
- Si recibis 429, esperar 1-2 minutos
El script maneja esto con retries + backoff exponencial. Si el IP esta muy marcado, la unica solucion es esperar o usar un proxy residencial.
Auto-deteccion de tipo
Cuando no se pasa --type, el script prueba los 6 paths uno por uno. Esto dispara 6 requests, lo que puede rate-limitar. Recomendacion: pasar --type siempre que se sepa.
Orden de prueba (mas rapido primero):
commodities(344 instrumentos)currencies(2,394)indices(20K+)etfs(30K+)crypto(4K+)equities(81K+, rate-limited)
Sitemaps
Los sitemaps son la unica fuente totalmente publica y no rate-limited. Son utiles para:
- Descubrir slugs de instrumentos (no hay API de "search" publica)
- Construir catalogos locales
- Backups de listings
Cantidad de instrumentos por sitemap (verificado 2026-06-04):
- equities: 81,518 (9 archivos)
- commodities: 344 (1 archivo)
- indices: 20,000+ (2 archivos)
- currencies: 2,394 (2 archivos)
- etfs: 30,000+ (3 archivos)
- crypto coins: 4,135
- crypto pairs: 20,000+ (2 archivos)
- rates/bonds: 20,000+ (2 archivos)
- funds: 100K+ (11 archivos)
- certificates: 6,222
Limitaciones
- Rate limit agresivo: en uso intensivo, CF puede bloquear el IP. Es problema del sitio, no del script.
- Cloudflare puede romper el skill en cualquier momento cambiando el challenge.
- Historico paginado: 23 dias por default, hay que pasar
--pagespara mas.
Estructura del skill
skills/investing/ ├── SKILL.md # Este archivo (guia rapida) ├── references/ │ └── REFERENCE.md # Documentacion completa + endpoints └── scripts/ └── fetch_investing.py # Script principal
Documentacion detallada: Consultar references/REFERENCE.md para la documentacion exhaustiva de los endpoints, estructuras JSON, ejemplos y troubleshooting.


