How Tickerbot Works
Tickerbot turns a plain-English description of a market setup into an alert that runs continuously and only fires when the setup is actually live. This page walks through how the pieces fit together: the data we collect, the precomputed alert flags we maintain, and how those flags combine with on-demand queries to handle anything you want to ask.
The data we keep
Tickerbot maintains a market database of 12,793 tickers updated every five minutes during US market hours. For each ticker we store about 340 fields — prices, OHLCV bars (252 days of history), 50+ technical indicators (RSI, MACD, ATR, moving averages, Bollinger bands), fundamentals (balance sheet, income, cash flow with quarterly history), Benzinga analyst ratings (consensus, individual upgrades and downgrades, price targets), earnings calendar data, and SEC Form 4 insider transactions.
Alongside the equities, we keep live data on 20 forex pairs, 100 cryptocurrencies, gold, silver, oil, natural gas, and 10 economic indicators including the Fed funds rate and treasury yields across the curve. All of it is queryable from the same place.
Precomputed alert flags
On top of the raw data, Tickerbot computes 50 boolean "alert flags" on every ticker, every five minutes. Each flag is a named condition the system has already evaluated. When you write an alert that references one of these flags, Tickerbot doesn't have to interpret your sentence at runtime — the value is already there in the database.
A few of the flags we maintain:
breakout— price breaks above the 20-day high on confirming volumebreakdown— the inverseoversold— RSI just crossed below 30 (edge-triggered)overbought— RSI just crossed above 70gap_up/gap_down— overnight gap exceeds 2%golden_cross/death_cross— 50-day MA crosses 200-day MA52_week_high/52_week_low— new high/low this morningvolume_spike— relative volume more than 3× the 30-day averagelow_float/ultra_low_float— float under 10M / under 5M sharesvalue_stock— P/E between 0 and 15high_margin— TTM profit margin above 20%recent_upgrade/recent_downgrade— Benzinga rating change in the last 30 daysbullish_consensus/bearish_consensus— current Benzinga consensus ratingearnings_tomorrow/earnings_this_week/post_earnings_recent— calendar position
That's a partial list. The full set covers technical setups, market cap and float classifications, beta, fundamentals, earnings calendar position, and analyst ratings activity.
What flags give you
Most useful alerts can be written by combining flags directly. "Stocks breaking out on volume that also have a recent analyst upgrade" is a two-flag combination: breakout AND recent_upgrade. The query takes milliseconds to run because both fields are already on every row.
Stacking two or three flags is also where the most reliable signals come from. A breakout in isolation is a noisy signal — many fail. A breakout combined with confirming volume, a recent upgrade, and an EPS revision is a much rarer event, and the rarity is what makes it worth alerting on.
Custom queries when flags aren't enough
Not every alert is expressible as a combination of flags. Sometimes you want something more specific: a particular percentage move, a custom moving-average period, a cross-asset comparison, a watchlist scoping. For those, Tickerbot uses an AI translation step.
When you write an alert in plain English, the system first checks whether the conditions can be expressed using the existing flags. If they can, it stops there. If they can't, it generates a custom SQL query against the same underlying database — once. The query is saved with the alert and reused on every evaluation. The AI step happens at create time, not at run time.
Evaluation and dedup
Every active alert is evaluated against the live market database every five minutes during market hours (4 AM to 8 PM ET, weekdays). Each evaluation returns a set of tickers that currently match. The matching set is compared to the previous evaluation's set, and a notification is sent only for new additions — not for tickers that were already matching.
This is what we call state-change dedup. It's the reason a Tickerbot alert that matches a stock at 10:00 AM doesn't fire again at 10:05, 10:10, 10:15. You get one notification per event, not one per evaluation. We wrote a longer explanation of why this matters in a separate blog post.
One notification per event, not one per evaluation.
Cross-asset and macro
Because all the asset classes share the same database, you can write alerts that span them. A condition involving the 10-year treasury yield, the price of gold, and a watchlist of stocks all sits in one query. The same evaluator that handles equity-only alerts handles cross-asset alerts.
What you don't see
You don't write SQL. You don't pick conditions from a dropdown. You don't configure an evaluation schedule. You write a sentence describing what you want, and Tickerbot does the translation, saves the alert, and runs it every five minutes from then on. Notifications arrive on your phone when something matches.
The reason most stock alert tools don't feel like this is that the underlying engineering is non-trivial: you need precomputed flags to make most queries fast, you need an AI step for the queries that flags can't cover, you need a continuous evaluator, and you need state-change dedup so the alerts stay useful over time. Building any one of those pieces is doable. Building all of them at consumer prices is the work.
Try it
Write your first alert in plain English. Tickerbot handles the rest.