enter one or more free twelve data api keys, one per line, for the fastest and most reliable refresh across your ticker list, each key gets its own 8 requests per minute allowance. or skip this entirely and use the shared key built into the app instead, slower since it's split across everyone using it without their own key, but works with zero setup.
sign up at twelvedata.com, free tier account, copy the api key from the dashboard, one signup per key, paste each on its own line above
tap the info button above before entering anything if you want to know what this app does and how it handles your keys first
This is a quick service restaurant stock tracker. Before anything else works it needs at least one free api key from Twelve Data, which is what supplies live prices and price history. Sign up at twelvedata.com, copy the key from your dashboard, and paste it into the box on the setup screen, one key per line if you have more than one. Nothing else is required to get started. Four more services are optional and only unlock specific extras later, Alpha Vantage and Tiingo as backup price sources, Tiingo covering end of day chart data only, Finnhub and GNews to power the news button, and FMP which currently isn't used by anything since the 10-K feature moved to a proper backend, safe to skip. Each of these has its own separate add button once the app is running, in the hamburger menu, tap the plus next to whichever service you want, paste that one key into its own box, and hit add.
On how keys are handled. Every key you enter is stored only in this browser's own local storage on this specific device, the same private storage a site uses to remember a login or a shopping cart. Most providers, Twelve Data, Alpha Vantage, Finnhub, and GNews, are called directly from your browser straight to that provider, exactly the same as if you had typed the request into their own website, no server of this app's own sits in between. Tiingo is the one exception, its servers block browser requests outright, so a Tiingo key gets relayed through a small backend this app runs on Railway, which forwards your key on your behalf since there is no other way to reach Tiingo from a phone's browser. SEC filings, tariffs, the QSR Magazine feed, and commodity prices all go through that same backend too, but none of those need a key from you at all, SEC and the Federal Register and the magazine feed are open to begin with, and the one key those commodity prices need, from FRED, is held privately on the backend server itself rather than in this app or your browser. Anywhere a stored key is shown on screen it is masked down to its last four characters. The export feature elsewhere in the app, which lets you save your ticker list and cached data to a file, deliberately never includes api keys in that file, so a shared or backed up export can never leak a live key.
Once keys are in, this tracks 52 publicly traded companies, the core fast food and fast casual chains, the casual dining names that trade alongside them, and the supply chain and restaurant technology companies that sit behind the whole industry, McDonald's, Yum Brands, Chipotle, Sysco, Toast, and the rest.
The focus is restaurants and the businesses that feed them, rather than the whole market, because restaurant operations, unit economics, franchise structures, and food supply chains are a domain this was built with real working knowledge of. Narrowing the scope means the patterns on screen mean something instead of being noise pulled from an unrelated sector.
Each tile shows the current price, the change for the day, a small dot for whether that price is fresh from the api or loaded from the browser cache, and a faint background color. Open the hamburger menu and pick week, month, or year to set what that color compares against. Green means the current price sits meaningfully below that average, red means meaningfully above, gray means it is sitting close to normal. It is a cheap or expensive signal relative to the stock's own recent history, not a buy or sell call.
Tapping a tile expands it into a chart with six ranges, one day, one week, one month, three months, one year, each pulling from the coarsest data granularity that still covers it so the app is not making more api calls than it needs to. A slider below the range buttons lets you scrub back through earlier periods of the same size, current period on the right, drag left to go back. The chart marks the high, low, and average for whatever range is showing, and the line itself shifts from black toward green on a fast rise and toward red on a fast drop, so the shape of a move is visible at a glance, not just its direction.
Six buttons sit next to the range picker. News, shown on the one month view, pulls the last 30 days of headlines for that ticker from finnhub and gnews and drops a dot on the chart at the trading day closest to each article, sized and darkened by how many articles landed on that day, colored green or red if the coverage leans one way, purple if it does not. Recalls, shown on every range, checks the FDA's open recall database two ways, once by the company's own name and once by the core ingredient that chain is built on, beef, chicken, lettuce, whatever fits, since most real recalls name the supplier or grower, not the restaurant. Recall markers are diamonds colored by severity, red for Class I, orange for Class II, yellow for Class III, and every recall not directly naming the brand is labeled as a supplier match rather than a confirmed one. Qsr mag pulls a trade publication's own coverage of that specific chain and marks it the same way as news. 10-K pulls that company's actual annual report filing history straight from the SEC's own public EDGAR system, no key needed, and marks each filing date on the chart as a small dark square, since a scheduled annual disclosure is not inherently a positive or negative event the way news or a recall is. Tariffs checks the federal government's own Federal Register for actual tariff notices and executive orders mentioning that chain's core ingredient, and marks matches as a small teal triangle, since a real government trade action is a different kind of signal than a news headline about one. Commodities shows the real market price trend for every ingredient that chain actually depends on, beef, coffee, wheat, dairy, whichever apply, pulled from the same government price data economists use, colored red when a rising input cost is bad news for that chain's margins and green when a falling one is good news, the opposite direction from how a stock price itself gets colored. For seven of those ingredients, beef, pork, coffee, wheat, dairy, sugar, and rice, a second line also shows the actual futures price from the real commodity exchanges, a delayed quote relayed through the backend since exchange data isn't something a browser can pull directly. Chicken, eggs, potatoes, turkey, and cheese don't get a futures line, those markets either never had a real exchange contract or the one that existed was discontinued for lack of trading volume, so there's nothing genuine to show.
Next to the historical label sits a green and red number pair. That is a simple keyword and price move count, not a prediction. Every loaded news headline, magazine headline, and directly confirmed recall gets scanned for plain language cues, words like acquisition, expansion, and menu innovation add to the green count, words like layoffs, store closures, lawsuit, and recall add to the red one. On top of that, any commodity that chain depends on that has moved more than five percent since the earliest loaded price point also counts, a real rise in an input cost adds to red since it pressures margins, a real drop adds to green. Tariff notices deliberately do not feed this number at all, since a tariff match is found by ingredient keyword the same loose way an unconfirmed recall is, not tied to that specific company's actual supply chain, and folding that in would just reopen the same weak evidence problem already fixed for recalls. Each individual article in the lists below shows exactly which word triggered its tag, so the count is never a black box. It only reflects whatever news, magazine, recall, and commodity data has already been loaded for that ticker, and it is meant as a first, rough pass at surfacing whether recent conditions lean one way or the other, not a signal to act on by itself.
Each news headline in the one month view can also carry a second small tag showing leading or reactive. This checks five minute price data around the article's publish time, out to an hour before and after, for a move bigger than that stock's own typical five minute swing, and reports whether the move happened before the article posted or after it. Leading means the price had already started moving before the story came out, reactive means the move came after. This only works for articles that fall inside whatever intraday history is currently cached for that ticker, usually the last several trading days, an older article outside that window is labeled outside cached intraday window rather than guessed at, and a quiet stretch with no real move shows no measurable move. None of this proves the article caused anything, it only measures timing against price.
The small arrows under each tile let you drag it to a new spot in the grid without needing a remove button nearby, up and down jump a full row, left and right shift one space, and the order is remembered. Remove always asks for confirmation first, since a stray tap used to delete a ticker outright.
The hamburger menu also holds sort and filter options for the grid, an export and import feature for everything the app has cached, and this same info panel, which includes a read aloud button using your browser's own built in speech feature.