Every portfolio tracker starts the same way: a list of what you own, and the grind of pricing it. Model the list as a Tickerbot universe and the grind disappears — one call prices every holding with all 421+ signals attached, one call charts the history, and alerts scope to exactly what you hold. Positions and cost basis stay yours; the market side is done.
Free plan. Every ticker, every signal, real-time data, all-time history.
the recipe
1. Model the holdings — a universe is a named ticker list. One per portfolio (or per user, if you’re building for others) — update it as positions change:
curl -s -X POST https://api.tickerbot.io/v2/universes \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "name": "my-portfolio", "tickers": ["AAPL","MSFT","NVDA","RIOT"] }'2. Price everything in one call — scan scoped to the universe returns every holding’s current row — price for the P&L math, and the computed state most trackers never show (trend, momentum, distance from highs):
curl -s -X POST https://api.tickerbot.io/v2/scan \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "market_cap > 0", "universe": "my-portfolio",
"columns": "ticker,price,day_change_pct,rsi_14,above_sma_200" }'
# P&L is your arithmetic on your cost basis:
# value = qty * row.price; pnl = value - qty * cost3. Chart the history — /v2/series puts every holding’s price path on one aligned daily grid — the allocation and performance charts are one response away:
curl -s "https://api.tickerbot.io/v2/series?tickers=AAPL,MSFT,NVDA,RIOT\ &columns=close&interval=1d&from=2026-01-01" \ -H "Authorization: Bearer $TICKERBOT_API_KEY"
4. Watch what you own — alerts scoped to the same universe: the tracker stops being a page you check and starts telling you when a holding needs attention:
curl -s -X POST https://api.tickerbot.io/v2/scan/subscribe \
-H "Authorization: Bearer $TICKERBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "q": "day_change_pct < -5 OR rsi_overbought",
"universe": "my-portfolio",
"target_url": "https://your-app.example.com/hook" }'under the hood
POST /v2/universes | The holdings list — named, updatable, referenced everywhere by slug |
POST /v2/scan | Current value + computed state for every holding, one call |
GET /v2/series | Price history for every holding on one aligned grid |
POST /v2/scan/subscribe | Alerts scoped to the portfolio — pushed, not polled |
Every read runs in three tenses: live, as of any past moment (add ?asof= — no survivorship bias), or on push — the same query as a webhook that fires when the answer changes. Under all of it sits the computed table: every US equity plus rates, FX and crypto, every signal precomputed and refreshed continuously, with all-time history. That pipeline — warehouse, indicator math, refresh, point-in-time storage — is the part you’d otherwise build before writing your first line of product. Buy it as a table instead — data included; there’s no feed to bring.
questions
On your side — quantities, lots, and costs are your application’s data (or your users’). Tickerbot supplies the market half: current computed state and full history for every holding. The P&L join is one multiply per position.
Yes — create a universe per user and scope their scans, series, and alert subscriptions with universe=. The same list drives their table, their charts, and their notifications, and updating it in one place updates all three.
Because every action it takes — an alert, a screen result, an order, a row in a user-facing app — is a condition over derived values: RSI below 30, price above the 200-day average, volume three times normal. Raw data doesn’t contain those. Something has to compute and refresh them for every symbol, continuously, and keep the history so past answers are reproducible. That’s a data pipeline, not a feature — you either build and operate it, or query one that already runs.
Every call here is also a native tool call: install the MCP server and Claude, ChatGPT, Cursor, or any MCP runtime queries the market directly. Computed state is what makes that work well — hand a model raw data and its context window fills with math to do; hand it computed answers and the context goes to decisions. A scan returns the tickers matching your condition — a list, not a workload.
The Free plan needs no card and carries the full data side: every ticker, every signal, real-time data, all-time history and as-of queries. Paid plans start at $29/mo and add real-time webhooks, websocket streaming, and higher rate limits. Data depth is never a tier lever — every plan sees the same table.
in the wild
What people are saying.
“dude. whoah.”
“Tickerbot is insane. It turns Claude into a quant.”
“Best value for hobbyists and advanced traders alike.”
get started
Free plan. Every ticker, every signal, real-time data, all-time history.