API guide
Free stock API: what free tiers really include, and their limits
Every free tier is a trade. The provider gives you data, and the limits decide what you are allowed to build with it, so read them before you write the integration.
On this page
Key takeaways
- A free stock API trades money for limits: a request cap, a rate limit, often delayed or end-of-day data, a smaller symbol list and a license that rarely covers commercial display.
- The request cap decides your architecture: 3,000 requests a month is about 100 a day, plenty for end-of-day work on dozens of symbols and far too little for polling a live screen.
- Display rights matter more than price: most free data may be used for your own research but not shown to other people in a commercial product.
- TickerLayer's free tier includes 3,000 REST requests a month with no card; WebSocket streaming comes with paid plans, and free accounts can request a trial from the dashboard.
- You can test any free stock market API in five minutes: make one request, read the rate-limit headers, and check the error you get for a malformed symbol.
A free stock API is a stock data service you can call without paying, in exchange for limits: a monthly or daily request cap, a rate limit, often delayed or end-of-day prices, a narrower symbol list, and a license that usually allows personal use but not commercial display. TickerLayer's free tier is 3,000 REST requests a month with no card, on the same stock API routes paid plans use.
Lists of "the best free stock APIs" go stale within a year because vendors change their quotas. The categories do not change. This guide sorts free tiers into the types you will actually meet, shows how to do the arithmetic on a quota, covers the licensing questions most comparisons skip, and ends with a five-minute test you can run against any provider.
The five kinds of free stock API
| Type | What you get | Typical catch | Good for |
|---|---|---|---|
| End-of-day only | Daily open, high, low, close and volume after the session | Nothing intraday; yesterday is the newest bar | Backtests, nightly reports |
| Delayed intraday | Quotes and bars 15 minutes or more behind | Cannot drive anything that acts on the current price | Charts, teaching, prototypes |
| Real-time with a small quota | Current prices over REST, a few thousand calls a month | The cap runs out fast if you poll | Integration work, low-frequency tools |
| Time-limited trial | A paid plan for a week or two | It ends, usually just as you depend on it | Load tests, evaluation |
| Unofficial scraping library | Whatever a public web page shows | Breaks without notice; no right to redistribute | One-off personal analysis |
The last row deserves a warning of its own. Libraries that read prices out of public finance websites are free and convenient until the page layout changes, the site starts rate-limiting your IP, or someone asks where the numbers came from. They are fine in a notebook. They are a liability in anything that runs unattended or that other people rely on.
TickerLayer sits in the third row: REST requests on the same endpoints as paid plans, capped at 3,000 a month, with no end date. The pricing page heads it "Free tier always available", and every new account starts on it.
The limits that decide what you can build
- Request quotaA monthly or daily cap on calls. It sets how many symbols you can track and how often you can ask.
- Rate limitCalls per second or per minute. Bursts at the open, or on a page that loads ten tickers at once, hit it first.
- DelayReal-time, 15 minutes behind, or end-of-day. Delayed prices are fine for charts and wrong for alerts.
- Coverage and historyUS only or other markets too, and how many years of bars. Free tiers are often vague about both.
- StreamingWebSocket access is the feature free tiers most often leave out.
- LicensePersonal use, internal use, or display to other people. The most expensive limit to discover late.
The quota is the one to do arithmetic on, because polling is expensive. Every REST request is one symbol at one moment, so the monthly cost of a polling loop multiplies quickly:
requests per month = symbols × polls per hour × hours per day × trading days
- symbols
- Each symbol is its own request.
- polls per hour
- 12 if you refresh every five minutes, 60 if every minute.
- hours per day
- 6.5 for a regular US session.
- trading days
- About 21 in a month.
The same quota goes a long way once you stop polling prices and start asking for bars. A single call to the aggregates route returns up to 5,000 bars per page, so a year of daily history for one symbol (about 252 bars) is one request. Fetch history once, store it, and spend one request per symbol per day on the newest bar with GET /stocks/agg/{symbol}/prev.
Fits in 3,000 requests a month
- The daily close for 100 symbols: 2,100 requests
- A year of daily bars for 50 symbols, fetched once: 50 requests
- Five symbols refreshed hourly through the US session: about 735 requests
- Your integration tests and a staging environment
Does not fit
- Ten symbols polled every five minutes: 16,380 requests
- A live ticker on a public website
- Backfilling minute bars for hundreds of stocks
- Anything that must react to every trade
Licensing: the limit free tiers do not advertise
Price data is licensed, not sold. The organizations that produce it charge differently depending on who sees the numbers and what they are used for, and every data provider passes those terms down to you. Three distinctions decide whether a free tier fits your project:
- Display versus non-display. Showing prices to a person on a screen is display. Feeding them to an algorithm, a risk model or a calculation that nobody looks at is non-display. Many licenses price and permit the two differently.
- Personal versus commercial. Using data for your own research is almost always allowed. Showing it to customers, subscribers or the public usually is not, on free tiers and on many personal paid plans too.
- Redistribution. Passing raw prices on to someone else, through your own API, a file export or an embeddable widget, needs explicit rights. Derived numbers such as an indicator or a ranking are sometimes treated differently, but read the terms instead of assuming.
Usually fine on a free tier
- Your own research notebook
- A private dashboard only you log in to
- Building and testing an app before launch
- Coursework and tutorials
Usually needs a commercial license
- Prices shown to paying customers
- A public website ticker or widget
- Re-serving raw prices through your own API
- A trading tool other people use
TickerLayer says this on its pricing cards: Individual plans are for personal or research use, and Business plans include commercial use. The public symbol pages on this site show prices 15 minutes delayed, while the API serves live data to entitled keys (latency varies by stock market). If you are unsure where your project falls, read the terms of use before you ship, not after a customer asks.
What the TickerLayer free tier includes
- 3,000REST requests a month
- 10requests per second
- $0and no card to start
- REST access with the
x-api-keyheader, on the same routes and JSON shapes as paid plans. - Symbol discovery (
GET /stocks/symbols,POST /symbols/coverage) and market status, sessions and holidays under/markets. - The MCP server for AI agents, which is included with every plan, the free tier among them.
- No WebSocket by default: streaming comes with paid plans, and free accounts can request a trial from the dashboard.
Which markets a key reaches is a property of the key, and the API will tell you: GET /stocks/symbols?market=US lists the stocks your key can use, and the coverage checker marks each symbol with the access it needs. A request rejected by the per-second limit does not count against the month, because rate limits are checked first. The limits documentation has the current defaults.
What running out looks like
{
"error": "REST_QUOTA_EXCEEDED",1
"message": "monthly REST quota exceeded",
"limit": 30002
}
errorMachine-readable code. The per-second variant isREST_RATE_LIMIT_EXCEEDED.limitYour monthly allowance.
Handle the two 429s differently: sleep and retry the per-second one, stop and alert on the monthly one. The 429 Too Many Requests guide covers both in depth.
How to make 3,000 requests last
- Ask for bars, not prices. One aggregates request returns a whole range; a price request returns one moment.
- Cache per render, not per visitor. If a page shows a price, fetch it once per minute on the server and serve every visitor from that copy.
- Skip closed markets.
GET /markets/status?asset=stocks&market=USreturnsnext_openandnext_close, so a job can sleep until the session starts instead of polling a closed market all weekend. Note thatis_openis also true in pre-market; checkstatusequalsopenfor the regular session. - Read closes from
prev.GET /stocks/agg/{symbol}/prevreturns the last completed daily bar (with the official close for US stocks), one request per symbol per day. - Normalize symbols once. Run your ticker list through the coverage checker a single time and store the qualified symbols, instead of retrying guesses.
Test a free stock market API in five minutes
- Create an accountSign up and copy the key from the dashboard. The free tier needs no card.
- Export the keyKeep it out of source code: set
TICKERLAYER_API_KEYin your shell or secrets manager. - Make one requestFetch a snapshot and look at the timestamps, not only the price.
- Read the headers
x-ratelimit-limitandx-ratelimit-remainingshow your per-second budget. - Break it on purposeAsk for
KOwithout a market prefix and confirm you get a clear 400, not a guess.
export TICKERLAYER_API_KEY="YOUR_API_KEY"
# 1. A price, with its timestamps
curl -sS "https://api.tickerlayer.com/stocks/snapshot/US:KO" \
-H "x-api-key: $TICKERLAYER_API_KEY"
# 2. The rate-limit headers only
curl -sS -o /dev/null -D - "https://api.tickerlayer.com/stocks/quote/US:KO" \
-H "x-api-key: $TICKERLAYER_API_KEY" | grep -i ratelimit
# 3. A deliberate mistake: no market prefix
curl -sS "https://api.tickerlayer.com/stocks/quote/KO" \
-H "x-api-key: $TICKERLAYER_API_KEY"{"symbol":"US:KO","bid":88.11,"ask":88.24,"bid_size":400,"ask_size":1000,"last_price":88.24,"last_timestamp":1790589160160,"prev_close":87.81,"change":0.43,"change_percent":0.4897,"last_size":150}
x-ratelimit-limit: <requests allowed per second>
x-ratelimit-remaining: <requests left this second>
x-ratelimit-policy: <limit>;w=1
{"statusCode":400,"message":"invalid symbol"}Run the same three checks against every provider on your shortlist. A free tier that returns prices without timestamps, guesses at ambiguous tickers, or hides its limits until you hit them will cost more in debugging than a paid plan costs in money. For the same flow in Python, with retries and a pandas DataFrame, follow the Python stock prices tutorial.
When to move off a free tier
| Free | Individual | Business | |
|---|---|---|---|
| Price | $0 | From $49 a month per feed (US stocks $99) | From $449 a month per feed (US stocks $999) |
| REST requests | 3,000 a month | 250,000 a month | 25,000,000 a month |
| WebSocket | Trial on request | 1 connection, 10 symbols | 10 connections, unlimited symbols |
| Use | Building and testing | Personal or research use | Commercial use included |
Signs you have outgrown the free tier
- You poll more than a few symbols during market hours.
- Other people see the prices, and some of them pay you.
- You need prices pushed to you over a WebSocket, not pulled.
- You are about to launch, and the quota would run out in the first week.
If you are comparing providers rather than tiers, the financial data providers guide compares exchange-direct feeds, aggregators and free-tier APIs. Pricing lists every feed and market.
Questions
Is there a completely free stock API?
Yes, several providers offer a free tier, and TickerLayer's includes 3,000 REST requests a month with no card. None is unlimited: expect a request cap, a rate limit and license terms that restrict commercial display.
What is the best free stock API?
The one whose limits fit your use. End-of-day research needs only a modest quota and daily bars; a live screen needs streaming, which free tiers rarely include; a product other people see needs a commercial license whatever the price.
Do free stock APIs provide real-time data?
Some do, within a small quota; many serve delayed or end-of-day prices instead. Compare the timestamp in the response with the clock rather than trusting the marketing page.
Can I use a free stock API in a commercial app?
Usually not. Free and personal plans typically allow private or research use, and showing prices to customers needs a commercial license. On TickerLayer, commercial use is included with Business plans.
How many requests does the TickerLayer free tier include?
3,000 REST requests a month, about 100 a day, at up to 10 requests per second. A request rejected by the per-second limit does not count against the monthly quota.
Is there a free stock API with WebSocket streaming?
Streaming is the feature free tiers most often leave out. TickerLayer's WebSocket comes with paid plans, and free accounts can request a trial from the dashboard.