The backtesting API.

Not a backtest engine — the data layer under one, solved. The hard part of backtesting is reconstructing what you would have known: which tickers matched your condition on that day, with no look-ahead and no survivorship bias. Here that’s a query parameter — any screen with ?asof= returns the market as it stood, delisted tickers included, and aligned series price the trades. Your strategy logic and execution stay yours.

Free plan. Every ticker, every signal, real-time data, all-time history.

what you get

The capability, itemized.

Point-in-time scansAny SQL screen with ?asof= answers as of that moment — candidate sets with no look-ahead by construction
No survivorship biasDelisted tickers stay in every as-of answer — the past includes the companies that didn’t make it
Signals includedIndicators, fundamentals and flags are part of the point-in-time row — entry conditions read as they stood, not recomputed
Pricing the tradesAligned series return entry and exit prices for the whole candidate set on one time grid
Intraday tiersDate-only as-of resolves to the daily close; timestamps resolve to 1-hour and 1-minute state
Same query, liveThe backtested screen runs unchanged in the present — or as a webhook, so the strategy goes live without translation

Every read runs in three tenses: live, as of any past moment (add ?asof=; no look-ahead, no survivorship bias), or on push — the same query as a webhook that fires when the answer changes. Under it sits the computed table: every US equity plus rates, FX and crypto, every signal precomputed and refreshed continuously, all-time history. Data included — there’s no feed to bring.

one call

The screen, asked of the past.

The candidate set for a condition on 15 March 2023 — exactly what the screen would have returned that day:

POST /v2/scan
{ "q": "above_sma_200 AND rsi_14 < 40", "asof": "2023-03-15" }

// → { "as_of": "2023-03-15",
//     "_meta": { "resolution": "daily",
//                "interval_reason": "date-only asof resolves to the daily close" },
//     "results": [ … the market as it stood … ] }

Step the date, and each answer is an independent point-in-time reconstruction — then price entries and exits for the candidates from aligned series.

Ready to wire it into something? Build a backtester walks it end to end. Reference: as-of queries · series · the SQL surface.

questions

FAQ

Is this a backtest engine?

No — it’s the data layer a backtest engine needs: point-in-time candidate sets, survivorship-complete history, and aligned pricing. Portfolio simulation, fills and P&L stay in your code (or your framework of choice), which is where they belong — that logic is your strategy.

How does the API avoid look-ahead and survivorship bias?

By construction rather than by discipline. An ?asof= answer is computed from the state recorded at that moment — a screen can’t see a value that didn’t exist yet — and delisted tickers are kept in the record, so past answers include the names that later disappeared. The two classic backtest leaks are closed before your code runs.

Why does a trading system need computed state?

Because every action it takes — an alert, a screen result, an order — 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.

How does Tickerbot work with AI agents?

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.

How does Tickerbot pricing work?

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, at 10,000 calls a month and 60 a minute. Paid plans start at $29/mo, remove the monthly cap, and raise the rate limit; webhooks and streaming come with them. Data depth is never a tier lever: every plan sees the same table.

in the wild

900K+ calls served, and counting.

What people are saying.

“dude. whoah.”
President, ShopifyHarley Finkelstein
“Tickerbot is insane. It turns Claude into a quant.”
Quantitative Finance MScLounes Vennema
“Best value for hobbyists and advanced traders alike.”
AI Engineer, ImergeRon Reid

get started

Get a key. Run a scan.

Free plan. Every ticker, every signal, real-time data, all-time history.