WisdomTree ETF holdings to Watchlist. A single-file client-side tool reading the generated ./api/wisdomtree static feed (WisdomTree product pages, SEC EDGAR N-PORT-P holdings, Yahoo Finance history) into a searchable ETF/asset-class catalog with per-fund tabs, watchlist, N-PORT upload, CSV/TXT export — the same look, feel, columns and business logic as the sibling applications.
bunx degit daggerok/WisdomTree#main ./12345 && cd $_
bunx serve . -p 1234
open http://0:1234The published application is available at https://daggerok.github.io/WisdomTree/.
Run the updater with Bun:
bun test scripts/update-data.test.ts
./scripts/update-data.tsRun ./scripts/update-data.ts -h (or --help) to print every configuration variable with its default and usage examples.
The Update WisdomTree ETF data GitHub Actions workflow exposes the same settings as manual inputs. All supplied filters use AND logic.
| Block | Source |
|---|---|
| Catalog (all US WisdomTree ETFs) | https://www.wisdomtree.com/investments (WisdomTree product table) |
| Holdings per fund | SEC EDGAR N-PORT-P primary_doc.xml (WisdomTree Trust CIK 0001350487) |
| Daily history, distributions | Yahoo Finance chart API for daily history |
| Fallback | WisdomTree product pages for NAV, expense ratio, yields |
Each fund carries a derived metrics object that powers the catalog columns shared with the sibling sites:
ytd/tr1y— official YTD and 1-year returns → YTD Return, TR 1Ycagr3y/cagr5y/cagr10y— published annualized 3Y/5Y/10Y figures → CAGR 3Y/5Y/10Ytr3y/tr5y/tr10y— cumulative 3Y/5Y/10Y figures(1 + CAGR)^n - 1→ TR 3Y/5Y/10YsiAnn— since-inception annualized → SI Ann.dividendYield— 12-month trailing yield or indicated yield (latest distribution × frequency ÷ price)secYield— 30-day SEC yield when published;—otherwise
| Environment variable | Default | Meaning |
|---|---|---|
MAX_FETCHES |
all | Batch size: with a positive value the updater continues after the committed cursor in api/wisdomtree/update-state.json; empty or 0 is a full pass — every fund is refreshed in one run. |
REQUEST_SLEEP |
1 |
Minimum delay in seconds between outgoing request starts, including retries. |
CONCURRENCY |
2 |
Number of parallel fund update workers. Request starts are still globally spaced by REQUEST_SLEEP. |
AUM |
: |
Net Assets range. Each bound may be a USD amount or K/M/B/T, or one of nano, micro, small, mid, large. |
TER |
: |
Expense ratio range in % (strict min:max). |
DIVIDEND_YIELD |
: |
Dividend-yield percentage range. |
TICKERS |
all | Space-, comma- or semicolon-separated ticker allowlist, e.g. DGRW USFR WCLD. |
HOLDINGS_PAGE_SIZE |
250 |
Rows in each generated current-holdings JSON page. |
HISTORY_PAGE_SIZE |
1000 |
Rows in each generated daily-history JSON page. |
MAX_RETRIES |
2 |
Retries after the initial request. Only network errors and HTTP 408/425/429/5xx are retried with exponential backoff. |
SEC_UA |
declared UA | Override the SEC User-Agent. SEC policy requires automated tools to declare a contact. |
SKIP_YAHOO |
off | Skip Yahoo Finance history updates. |
TICKERS combines with AUM, TER, yield filters using AND logic; it does not override them. Funds not selected for a successful update keep their prior published metadata and data files.
MAX_FETCHES=10 ./scripts/update-data.ts
TICKERS="DGRW USFR WCLD" ./scripts/update-data.ts
AUM="1B:" TER=":0.5" ./scripts/update-data.ts
PERFORMANCE_1Y="15:" ./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, and git diff --check.
| Brand | Where to get the data |
|---|---|
| VanEck | vaneck.com | VanEck |
| JPMorgan | am.jpmorgan.com | JPMorgan |
| Schwab | schwabassetmanagement.com | Schwab |
| Invesco | invesco.com | Invesco |
| iShares | ishares.com | iShares |
| Fidelity | fidelity.com | Fidelity |
| Amplify | amplifyetfs.com | Amplify |
| Vanguard | investor.vanguard.com | Vanguard |
| SPDR | ssga.com | SPDR |
| WisdomTree | wisdomtree.com | WisdomTree |
| Goldman Sachs | am.gs.com | Goldman-Sachs |
| Application | Data provider | Repository |
|---|---|---|
| VanEck | vaneck.com ETF finder + product pages | VanEck |
| JPMorgan | am.jpmorgan.com fund explorer + product-data JSON | JPMorgan |
| Schwab | schwabassetmanagement.com product pages + CSV exports | Schwab |
| Invesco | invesco.com CSV downloads + Yahoo Finance | Invesco |
| iShares | iShares (BlackRock) product workbooks | iShares |
| Fidelity | SEC EDGAR N-PORT-P + Yahoo Finance | Fidelity |
| Amplify | Amplify ETFs (Firestore data feed) | Amplify |
| Vanguard | Vanguard product pages + SEC EDGAR N-PORT-P | Vanguard |
| SPDR | SSGA / State Street public feeds | SPDR |
| WisdomTree | WisdomTree product table + SEC EDGAR N-PORT-P + Yahoo Finance | WisdomTree |
| Goldman Sachs | am.gs.com fund finder + detail pages + SEC EDGAR N-PORT-P | Goldman-Sachs |
MIT — same as all sibling ETF repositories.
WisdomTree® and the fund names/tickers referenced here are trademarks of WisdomTree, Inc. This is an independent, unofficial tool; it is not affiliated with, endorsed by, or sponsored by WisdomTree. All data is reproduced from WisdomTree's own public product pages, public SEC EDGAR filings and Yahoo Finance for research purposes. All other trademarks, including index names, are the property of their respective owners.