One of the app's features lets you select Global X ETFs in the Watchlist and aggregate their holdings to see how often each ticker appears across the selected funds. Repeated holdings make overlapping exposure visible: the more selected funds include a ticker, the greater its potential influence on the portfolio; gains in that holding may help, while declines may hurt, and actual impact also depends on each fund's position size. Another feature makes it faster and easier to find funds with stronger growth over different periods, higher dividend yields or distributions, greater Total Return (price performance plus dividends), and other key performance metrics. A single-file client-side tool reading the generated ./api/globalx static feed (Global X ETF catalog and fund pages, dated official daily holdings CSV files, SEC EDGAR N-PORT-P and Yahoo Finance history) into a searchable ETF/asset-class catalog with per-fund tabs, watchlist aggregation, ticker copy and CSV/TXT export — the same look, feel, columns and business logic as the sibling applications.
bunx degit daggerok/Global-X#main ./12345 && cd ./12345 && bunx serve . -p 1234
open http://0:1234The published application is available at https://daggerok.github.io/Global-X/. No build step, no bundler, no server — index.html carries the markup and a Babel-standalone bootstrap that transpiles app.tsx in the browser. The app reads only relative ./api/globalx/** files generated by scripts/update-data.ts; the committed feed is complete, so the site works offline with no update run at all.
Run the updater with Bun:
bun install --frozen-lockfile
bun test scripts/update-data.test.ts
bun ./scripts/update-data.tsRun bun ./scripts/update-data.ts -h (or --help) to print every configuration variable with its default and usage examples.
The Update Global X ETF data GitHub Actions workflow (.github/workflows/update-data.yml) exposes the same settings as manual inputs, runs weekly on Sunday at 00:00 UTC, and commits api/globalx/** and nothing else. All supplied filters use AND logic.
| Block | Source | Notes |
|---|---|---|
| Fund universe, ticker, fund name, inception date, NAV, net assets, gross/net expense ratio, THEME and SUB_THEME | globalxetfs.com/explore |
The current Next.js page publishes the catalog in its server-delivered React Flight payload. The updater decodes that payload without a headless browser. |
| CUSIP, ISIN, NAV, market price, daily changes, premium/discount, 30-Day Median Bid-Ask Spread, primary exchange and shares outstanding | https://www.globalxetfs.com/funds/<ticker>/ |
The official fund page's React Flight payload plus its rendered ETF Prices table. |
| Holdings (daily) | https://assets.globalxetfs.com/funds/holdings/<ticker>_full-holdings_<YYYYMMDD>.csv |
The dated Full Holdings (.csv) link on each fund page. The seven-column file publishes weight, ticker, name, SEDOL, market price, shares held and market value. |
| NAV-basis performance | Official fund-page React Flight payload (PERFORMANCE_HISTORY) |
Monthly and quarter-end annualized and cumulative NAV values are copied from the provider payload. The catalog stores published annualized values and the app renders the same return rows as the sibling applications. |
| Distribution history and frequency | Official fund-page React Flight payload (DISTRIBUTION_HISTORY) |
Ex-date, record date, payable date and amount are kept in newest-first order. Global X does not publish a declaration date in this payload, so that shared row stays blank. |
| Daily price history (Date / Close / Adj Close / Volume) | Yahoo Finance chart API | Used for the paginated history sheets and as the market-price fallback. Adjusted close is rounded to two decimals before writing. |
| Holdings fallback | SEC EDGAR Form N-PORT-P, Global X Funds CIK 0001432353, file 811-22209 | Used only when the official holdings CSV is unavailable and EDGAR_FALLBACK=1; off by default. |
| Dividend-history fallback | Yahoo Finance dividend events | Used only when Global X publishes no distribution-history rows; the feed marks those rows distributions.fallback: true. |
The official Global X page was live-verified as a server-rendered Next.js shell with real catalog/fund values in React Flight payloads. No WAF proxy is used. Requests are bounded, retried, and paced by the configured per-worker lanes.
The CSV is parsed with a dependency-free RFC-4180 reader that tolerates the BOM, CRLF and quoted fields. Global X publishes SEDOL for holdings rather than a separate asset-class column, so Asset Category is derived conservatively from the row's own name/ticker: cash/payables, Treasury, fund, option-like and otherwise equity. Provider values are otherwise preserved in the generated sheets.
The source publishes annualized NAV values for 1, 3, 5 and, where available, 10 years plus since inception, and cumulative monthly/quarterly readings. The feed keeps both readings and does not extrapolate a missing tenor; unavailable values remain null and the app renders —.
| Metric | Status | Reason |
|---|---|---|
| Declaration Date | always blank in Global X distribution rows | The current official DISTRIBUTION_HISTORY payload publishes ex-date, record date, payable date and amount, but no declaration-date field. |
| Underlying Exposure | — |
It is not part of the current Global X catalog/fund-page payload used by the updater; the updater does not infer an index from a fund name. |
| SEDOL / CUSIP | both may appear, in different places | The daily holdings CSV publishes SEDOL; the fund page's Trading Details panel publishes CUSIP and ISIN. The shared Identifier holdings field uses the provider's SEDOL. |
| Growth-of-$10,000 series and document links | — where the current payload does not expose a stable value |
The updater does not invent a chart series or document URL from an unrelated page. |
| Premium / Discount | official value preferred; derived quotient retained | The page payload's current premium/discount value is kept alongside (Market Price - NAV) / NAV as a guard. |
| EDGAR fallback | opt-in | SEC EDGAR can reject GitHub-hosted runner IPs with HTTP 403; the normal source is the official dated holdings CSV. |
| Environment variable | Default | Meaning |
|---|---|---|
MAX_FETCHES |
0 |
Funds to process; 0 means a full pass. A positive value resumes after the saved cursor in api/globalx/update-state.json. |
TICKERS |
"" |
Space/comma-separated ticker allowlist, combined with all other filters. |
CATEGORY |
"" |
Substring match on the official THEME / SUB_THEME category. |
AUM / TER / DIVIDEND_YIELD / SEC_YIELD |
"" |
Strict min:max ranges; AUM also accepts nano, micro, small, mid and large. |
PERFORMANCE_YTD … PERFORMANCE_10Y / TOTAL_RETURN_YTD … TOTAL_RETURN_10Y |
"" |
min:max filters on official/derived return values. |
CONCURRENCY / REQUEST_SLEEP |
2 / 1.5 |
Per-worker request lanes and the minimum spacing within each lane. |
HOLDINGS_PAGE_SIZE / HISTORY_PAGE_SIZE |
250 / 1000 |
Rows per generated JSON page. |
MAX_RETRIES |
3 |
Retries after the initial request for network errors and HTTP 408/425/429/5xx. |
HISTORY_RANGE |
max |
Yahoo chart range (max, 10y, 5y, …). |
EDGAR_FALLBACK |
off | Use SEC N-PORT-P if a holdings CSV is unavailable. |
SKIP_YAHOO / SKIP_GLOBALX |
off | Skip the Yahoo stage or the official Global X catalog/fund stages. |
STORE_RAW_DOWNLOADS |
off | Keep raw catalog, fund pages and CSV samples under api/globalx/raw. |
SEC_UA |
repo URL | Declared User-Agent contact string for SEC EDGAR. |
A bounded or partly failed run preserves previously published files. TICKERS combines with AUM/TER/yield/return filters using AND logic; it does not override them.
MAX_FETCHES=10 bun ./scripts/update-data.ts
TICKERS="PAVE AIQ COPX" bun ./scripts/update-data.ts
AUM="1B:" TER=":0.70" bun ./scripts/update-data.ts
CATEGORY="Fixed Income" bun ./scripts/update-data.tsThe browser app is intentionally build-free: index.html carries the markup, styles and bootstrap, and app.tsx is TypeScript compiled in the browser with Babel standalone — no build step, no bundler, no tsconfig.json needed. Bun runs TypeScript out of the box.
Verification before every publish: bun install --frozen-lockfile, bun test scripts/update-data.test.ts, bun build --target=bun scripts/update-data.ts --outfile=/dev/null, and git diff --check.
| Brand | Where to get the data |
|---|---|
| abrdn (Aberdeen) | aberdeeninvestments.com | aberdeen |
| Amplify | amplifyetfs.com | Amplify |
| Capital Group | capitalgroup.com | Capital-Group |
| Fidelity | fidelity.com | Fidelity |
| Franklin Templeton | franklintempleton.com | Franklin |
| Global X | globalxetfs.com/explore | Global X |
| Goldman Sachs | am.gs.com | Goldman-Sachs |
| Invesco | invesco.com | Invesco |
| iShares | ishares.com | iShares |
| JPMorgan | am.jpmorgan.com | JPMorgan |
| NEOS | neosfunds.com | Neos |
| Northern Trust | etfs.ntam.northerntrust.com | Northern-Trust |
| ProShares | proshares.com | ProShares |
| Schwab | schwabassetmanagement.com | Schwab |
| SPDR | ssga.com | SPDR |
| VanEck | vaneck.com | VanEck |
| Vanguard | investor.vanguard.com | Vanguard |
| VictoryShares | vcm.com VictoryShares ETFs | VictoryShares |
| WisdomTree | wisdomtree.com | WisdomTree |
| Application | Data provider | Repository |
|---|---|---|
| abrdn (Aberdeen) | Official Aberdeen gateway + SEC N-PORT holdings fallback + Yahoo history/dividends | aberdeen |
| Amplify | Amplify ETFs (Firestore data feed) | Amplify |
| Capital Group | Official Capital Group fund data + SEC N-PORT holdings fallback + Yahoo history fallback | Capital-Group |
| Fidelity | SEC EDGAR N-PORT-P + Yahoo Finance | Fidelity |
| Franklin Templeton | franklintempleton.com ETF listings + product pages + SEC EDGAR N-PORT-P | Franklin |
| Global X | globalxetfs.com Next.js catalog and fund pages + dated full-holdings CSV | Global X |
| Goldman Sachs | am.gs.com fund finder + detail pages + SEC EDGAR N-PORT-P | Goldman-Sachs |
| Invesco | invesco.com CSV downloads + Yahoo Finance | Invesco |
| iShares | iShares (BlackRock) product workbooks | iShares |
| JPMorgan | am.jpmorgan.com fund explorer + product-data JSON | JPMorgan |
| NEOS | neosfunds.com lineup table + official fund pages + daily holdings CSV | Neos |
| Northern Trust | etfs.ntam.northerntrust.com funds list + per-fund CSV/JSON downloads | Northern-Trust |
| ProShares | proshares.com ETF finder + fund pages + official data host | ProShares |
| Schwab | schwabassetmanagement.com product pages + CSV exports | Schwab |
| SPDR | SSGA / State Street public feeds | SPDR |
| VanEck | vaneck.com ETF finder + product pages | VanEck |
| Vanguard | Vanguard product pages + SEC EDGAR N-PORT-P | Vanguard |
| VictoryShares | VCM VictoryShares catalog and product JSON + SEC EDGAR N-PORT-P holdings fallback + Yahoo Finance adjusted-market-price history | VictoryShares |
| WisdomTree | WisdomTree product table + SEC EDGAR N-PORT-P + Yahoo Finance | WisdomTree |
MIT — same as all sibling ETF repositories.
Global X® and the fund names/tickers referenced here are trademarks of Global X Investment Management LLC. This is an independent, unofficial tool; it is not affiliated with, endorsed by, or sponsored by Global X. All data is reproduced from Global X's own public pages and downloads, with public SEC EDGAR filings and Yahoo Finance as fallbacks, for research purposes. All other trademarks, including index names, are the property of their respective owners.