Morningstar — Screener via API JSON

SkillDev tools

Morningstar Screener via public JSON API: bulk download of 53 universes (102K+ listings, 39 countries, NYSE/Nasdaq/BCBA/etc) with 33 fields (price, market cap, ratios, 1d/1w/1m/3m/6m/12m/36m/60m/120m returns, debt, dividend yield, sector, industry). No API key, no auth.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Morningstar — Screener via API JSON skill

What this skill tells your AI

The instructions your AI receives, as published by gauss314/skills in skills/morningstar/SKILL.md and read by ahel’s review.

Skill para descargar la base de datos de acciones globales de Morningstar usando un endpoint JSON interno descubierto por ingenieria inversa. Sin API key, sin autenticacion, sin rate limit agresivo.


⚠️ Aviso Legal

  • Este endpoint no es oficial — fue descubierto interceptando el trafico XHR de la UI web del screener de Morningstar.
  • Los datos provienen del sitio publico de Morningstar. Respetar los terminos de servicio del sitio.
  • Solo el endpoint /security/screener es accesible sin auth. Otros endpoints de Morningstar (api-global, global, lt, etc.) requieren resolver AWS WAF challenge (no soportado por este skill).
  • Para uso intensivo, respetar pausas de 0.5-1 segundo entre requests.

Scripts

ScriptDescripcion
fetch_morningstar.pyScript principal: info, fields, search, screener, download

Instalacion de dependencias

pip install requests

Solo requests puro, sin dependencias extras.


Uso rapido

# === INFO ===
python scripts/fetch_morningstar.py info       # Stats del skill
python scripts/fetch_morningstar.py fields     # 33 campos disponibles

# === BUSCAR TICKERS (por nombre, multi-universe) ===
python scripts/fetch_morningstar.py search Apple --universe XNAS
python scripts/fetch_morningstar.py search Apple --universe XNAS XFRA XBUE
python scripts/fetch_morningstar.py search YPF --universe XBUE
python scripts/fetch_morningstar.py search "MercadoLibre" --universe XNAS BVMF

# === DESCARGA MASIVA (screener) ===
python scripts/fetch_morningstar.py screener --universe XNAS
python scripts/fetch_morningstar.py screener --universe XBUE
python scripts/fetch_morningstar.py screener --universe XNAS XLON XTKS

# === DESCARGA POR PAIS ===
python scripts/fetch_morningstar.py screener --country AR
python scripts/fetch_morningstar.py screener --country US
python scripts/fetch_morningstar.py screener --country DE

# === DESCARGA COMPLETA (53 universes, 100K+ listings) ===
python scripts/fetch_morningstar.py screener --all

# === GUARDAR A ARCHIVO ===
python scripts/fetch_morningstar.py screener --universe XBUE -o argentina.json
python scripts/fetch_morningstar.py screener --universe XNAS -o nasdaq.csv
python scripts/fetch_morningstar.py screener --country AR -o ar.csv
python scripts/fetch_morningstar.py search "YPF" --universe XBUE -o ypf_results.json

# === DOWNLOAD (alias de screener) ===
python scripts/fetch_morningstar.py download --universe XBUE -o ar.csv

# === MODO SILENCIOSO (solo JSON, sin logs) ===
python scripts/fetch_morningstar.py search Apple --universe XNAS -q
python scripts/fetch_morningstar.py screener --universe XBUE -q -o ar.json

# === CAMPOS ESPECIFICOS (--fields) ===
python scripts/fetch_morningstar.py screener --universe XNAS --fields Ticker Name ClosePrice MarketCap PERatio

Modos disponibles

ModoDescripcionEjemplo
infoStats del skill, dominios, token, #universes, #campospython fetch_morningstar.py info
fieldsLista los 33 securityDataPoints disponibles con descripcionpython fetch_morningstar.py fields
searchBuscar tickers por nombre en uno o varios universespython fetch_morningstar.py search Apple --universe XNAS
screenerDescarga masiva de uno o varios universes (toda la DB)python fetch_morningstar.py screener --universe XNAS
downloadAlias de screenerpython fetch_morningstar.py download --universe XNAS

Flags

FlagDescripcionEjemplo
--universe XNASUno o varios universe codes (sin prefijo E0EXG$)--universe XNAS XBUE
--country ARCodigos de pais ISO (39 paises soportados)--country AR US DE
--allTodos los 53 universes (~100K listings, demora ~1-2 min)--all
--fields Ticker NameSub-set de campos (default: los 33)--fields Ticker Name ClosePrice
--output archivo.jsonGuardar a JSON-o data.json
--output archivo.csvGuardar a CSV (flat)-o data.csv
-q / --quietSolo JSON, sin logs-q

Cobertura

53 universes, 102,093 listings, 39 paises — ver assets/UNIVERSES.md.

Top 10 universes

UniverseExchangePaisListings
XFRAFrankfurt (Tradegate)Germany14,082
XSTUStuttgartGermany9,971
XMUNMunichGermany8,425
XDUSDusseldorfGermany8,297
XBOMBombay (BSE)India5,192
XTKSTokyoJapan3,989
XNASNasdaqUnited States3,741
XNSENSE IndiaIndia3,018
XSHEShenzhenChina2,934
XKRXKorea ExchangeSouth Korea2,877

Argentina

XBUE (BCBA) → 469 CEDEARs (certificados de deposito de acciones extranjeras) con precios en ARS.

python fetch_morningstar.py screener --universe XBUE -o ar.csv

Cada CEDEAR tiene un PerformanceId distinto del ADR original. Ej: Apple Inc CEDEAR (0P0000TFNY) ≠ Apple Inc NASDAQ (0P000000GY).

Brasil

BVMF (B3) → 2,070 BDRs/acciones en BRL.

Mexico

XMEX (BMV) → 2,233 acciones en MXN.


Campos (33 en total)

5 metadata: Ticker, Name, PerformanceId, Universe, MarketCountryName

5 categoricos: SectorName, IndustryName, EquityStyleBox (1-9), QuantitativeStarRating (1-5)

23 numericos:

  • Precio/tamano (2): ClosePrice, MarketCap
  • Valuacion (3): PERatio, PEGRatio, DividendYield
  • Calidad (7): DebtEquityRatio, NetMargin, EBTMarginYear1, ROATTM, ROETTM, ROEYear1, ROICYear1
  • Crecimiento (2): EPSGrowth3YYear1, RevenueGrowth3Y
  • Retornos (9): ReturnD1, ReturnW1, ReturnM0, ReturnM1, ReturnM3, ReturnM6, ReturnM12, ReturnM36, ReturnM60, ReturnM120

Ver assets/DATA_POINTS.md para detalles.


Ejemplos de output

search Apple --universe XNAS (1 resultado)

{
  "_meta": {
    "query": "Apple",
    "universe_count": 1,
    "total_results": 1
  },
  "results": [
    {
      "Ticker": "AAPL",
      "PerformanceId": "0P000000GY",
      "Name": "Apple Inc",
      "ClosePrice": 311.23,
      "MarketCap": 4571145807880,
      "MarketCountryName": "United States",
      "SectorName": "Technology",
      "IndustryName": "Consumer Electronics",
      "_universe_code": "XNAS",
      "_universe_name": "Nasdaq"
    }
  ]
}

screener --universe XBUE -o ar.csv (469 filas)

_universe_code,Ticker,Name,PerformanceId,Universe,ClosePrice,MarketCap,SectorName,IndustryName,EquityStyleBox,...
XBUE,MMM,3M Co Cedear,0P0000D5UB,E0EXG$XBUE,23100,Industrials,Conglomerates,4,...
XBUE,A3,A3 Mercados SA Ordinary Shares,0P0000WJD7,E0EXG$XBUE,2215,Financial Services,Financial Data & Stock Exchanges,,...
XBUE,YPFD,YPF SA Class D,0P0000BS4D,E0EXG$XBUE,83850,Energy,Oil & Gas Integrated,9,...

search YPF --universe XBUE (4 resultados)

{
  "_meta": {"query": "YPF", "universe_count": 1, "total_results": 4},
  "results": [
    {"Ticker": "YPFD",   "PerformanceId": "0P0000BS4D", "Name": "YPF SA Class D",        "ClosePrice": 83850, "SectorName": "Energy", "IndustryName": "Oil & Gas Integrated", "_universe_code": "XBUE"},
    {"Ticker": "YPFD1",  "PerformanceId": "0P0001NX4I", "Name": "YPF SA Class D Cedear", ...},
    {"Ticker": "YPF",    "PerformanceId": "...",          "Name": "YPF SA",                ...},
    ...
  ]
}

Consideraciones tecnicas

Token universal

El mismo token klr5zyak8x funciona en 5 sub-dominios de tools.morningstar.*:

DominioIdioma default
tools.morningstar.co.ukEnglish (UK)
tools.morningstar.deGerman
tools.morningstar.frFrench
tools.morningstar.itItalian
tools.morningstar.esSpanish

Todos devuelven la misma data. El script prueba los 5 hasta que uno responda 200.

NO funciona en: tools.morningstar.com (US), .com.au, .br, .jp, etc. (geofencing, IP blocking o no existe el endpoint).

Encoding

El API devuelve nombres de sectores/industrias en el idioma del languageId (es-AR, de-DE, etc.). PROBLEMA: los caracteres acentuados vienen mal-encodados (Energ�a en vez de Energía).

Solucion del script: usar languageId=en-GB para todos los universes. Los nombres de empresas (Apple, YPF, etc.) se mantienen, solo los nombres de sectores/industrias se devuelven en inglés (que es el estándar para screener cuantitativo).

Rate limit

No hay rate limit agresivo observado. Sin embargo:

  • Hacer 50+ requests en pocos segundos puede triggerear throttling del CDN
  • El script espera 0.5-1 segundo entre universes (configurable en get())
  • Sin reintentos agresivos

PerformanceId

Cada listing (instrumento en un exchange especifico) tiene un PerformanceId unico. El mismo "Apple Inc" tiene:

  • 0P000000GY en NASDAQ (XNAS)
  • 0P0000EEDJ en XFRA (Frankfurt)
  • 0P0000VE8R en BVMF (Brasil BDR)
  • 0P0000TFNY en XBUE (CEDEAR Argentina)

El PerformanceId NO se transfiere entre exchanges. Es la unica clave estable para identificar un listing especifico.

Estructura del skill

skills/morningstar/
├── SKILL.md                          # Este archivo (guia rapida)
├── assets/
│   ├── UNIVERSES.md                  # Lista completa de 53 universes
│   └── DATA_POINTS.md                # Lista de 33 campos disponibles
├── references/
│   └── REFERENCE.md                  # Documentacion tecnica detallada
└── scripts/
    └── fetch_morningstar.py          # Script principal

Documentacion detallada: Consultar references/REFERENCE.md para la doc tecnica exhaustiva de endpoints, JSON schemas, ejemplos y troubleshooting.

Signals

GitHub stars
237
Forks
35
Last commit
Jun 2026
Advanced
Catalog kind
skill
Gateway key
morningstar
Source
github.com/gauss314/skills