Skip to content

Latest commit

 

History

43 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Schwab

One of the app's features lets you select Schwab 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 that reads the generated ./api/schwab static feed (Schwab Asset Management product finder, per-fund product pages, per-fund holdings and distribution CSV exports, Yahoo Finance daily history, SEC EDGAR N-PORT-P as holdings fallback) 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.

Using Bun

bunx degit daggerok/Schwab#main ./12345 && cd $_
bunx serve . -p 1234
open http://0:1234

The published application is available at https://daggerok.github.io/Schwab/.

Updating the static Schwab data

Run the updater with Bun:

bun test scripts/update-data.test.ts
./scripts/update-data.ts

Run ./scripts/update-data.ts -h (or --help) to print every configuration variable with its default and usage examples.

The Update Schwab ETF data GitHub Actions workflow exposes the same settings as manual inputs. All supplied filters use AND logic.

Data sources

Block Source
Catalog (all US Schwab ETFs) https://www.schwabassetmanagement.com/products (Schwab product finder page)
Holdings per fund https://www.schwabassetmanagement.com/products/{TICKER} → holdings CSV export (e.g. SCHD)
Daily history, distributions Yahoo Finance public chart API (/v8/finance/chart/{TICKER}?range=max&interval=1d&events=div)
Fallback SEC EDGAR N-PORT-P for holdings fallback

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 1Y
  • cagr3y / cagr5y / cagr10y — published annualized 3Y/5Y/10Y figures → CAGR 3Y/5Y/10Y
  • tr3y / tr5y / tr10y — cumulative 3Y/5Y/10Y figures (1 + CAGR)^n - 1 → TR 3Y/5Y/10Y
  • siAnn — 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

Update controls

Environment variable Default Meaning
MAX_FETCHES all Batch size: with a positive value the updater continues after the committed cursor in api/schwab/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. SCHB SCHX SCHG SCHV SCHD.
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.

Examples

MAX_FETCHES=10 ./scripts/update-data.ts
TICKERS="SCHB SCHX SCHG SCHV SCHD" ./scripts/update-data.ts
AUM="1B:" TER=":0.5" ./scripts/update-data.ts
PERFORMANCE_1Y="15:" ./scripts/update-data.ts

TypeScript

The 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.

Brands table

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
First Trust ftportfolios.com | First-Trust
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

Sibling applications

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
First Trust ftportfolios.com official ETF list + fund summary, holdings, distribution and price-history export pages + SEC EDGAR N-PORT-P holdings fallback + Yahoo Finance history fallback First-Trust
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

License

MIT — same as all sibling ETF repositories.

Schwab® and Schwab ETFs® and the fund names/tickers referenced here are trademarks of Charles Schwab & Co., Inc. This is an independent, unofficial tool; it is not affiliated with, endorsed by, or sponsored by Schwab Asset Management (Charles Schwab Investment Management, Inc.) or Charles Schwab & Co., Inc. All data is reproduced from Schwab Asset Management'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.

About

Schwab ETF. A single-file client-side tool reading ./api/schwab (Schwab Asset Management product pages and CSV exports, Yahoo Finance and SEC EDGAR fallback) into a searchable ETF/asset-class catalog with per-fund tabs, watchlist, CSV/TXT export. TailwindCSS, dark mode, Bun updater.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages