Finnhub
- Free allowance
- Free plan USD 0/month: 60 API calls/minute; on top of every plan's limit, 30 API calls/second
- Verdict
- caveatusable, with a named limit or an unprobed read path
- Cost
- free tier
- Identity
- emailno card, no phone
- Binding limit
- request-rate60 API calls per minute on the free plan; 30 API calls per second on every plan
- Evidence
- documented38 sources; a first-party page was read and the sentence quoted
- Freshness
- stale on 2026-12-04checked 2026-11-03 (live); stale on 2026-12-04
| Free tier | Free plan USD 0/month: 60 API calls/minute; on top of every plan's limit, 30 API calls/second unit requests; metered on request-count; No daily cap is stated. The free column covers US data: company news for 1 year, earnings calendar for 1 month, EPS surprises for 4 quarters, and a WebSocket of 50 symbols. The Quote endpoint is marked High Usage, not Premium. Candles (OHLCV), tick data, historical NBBO, last bid-ask, splits and most estimates endpoints are marked Premium in the API documentation, so the free plan carries no historical price bars. The All-In-One plan is USD 3500/month. |
|---|---|
| Price | none stated |
| Limits |
Bulk path: filings metadata only. The filings endpoint names a Kaggle dataset, SEC Filings 1994-2020, published by Finnhub for bulk download; prices, candles and news have no bulk path. |
| Binding | request-rate 60 calls a minute is the ceiling a free key meets; the 30-per-second limit binds only bursts. |
| Identity | email The signup form asks for a name, an email and a password, behind a reCAPTCHA; it has no card field. Signing up confirms non-professional status, and the terms use the name and email to file a non-professional subscriber form. When the register call returns a JSON body with status 200 the signup page opens /dashboard, where the docs say the API key is found, and its script holds no email-verification step; a third-party integration guide reports an email verification link before the key is shown, and whether the dashboard withholds the key until that link is followed is unverified: behind a sign-up. A call without a key answers HTTP 401 with 'Please use an API key.' |
| Egress | not metered in bytes; the call rate bounds what a free key can pull |
| Per-object cap | not applicable: one JSON response per call; the filings endpoint returns up to 250 documents per call |
| Interface | rest REST under https://finnhub.io/api/v1 with token=KEY in the URL or an X-Finnhub-Token header; a WebSocket stream of up to 50 symbols on the free plan. endpoint: https://finnhub.io/api/v1 |
| Tooling | curl or any HTTP client; a WebSocket client for the stream |
| Composes with | A free real-time US quote and news feed at 60 calls a minute with no historical bars; history comes from another record, such as Alpha Vantage weekly or monthly series, Twelve Data daily series or Massive Basic end-of-day bars. |
| Reliability | Inactive users are deleted from time to time; a deleted account needs a new signup. |
| Notes | The most generous call rate of the four market data records, but the free plan is a live-data plan: quotes, news, calendars and a 50-symbol stream, with candles and tick history behind Premium. |
| Evidence note | documented The rate and the plan columns are documented on the pricing page and the API documentation. A keyless probe confirmed the API answers and demands a key; the 60-per-minute cut-off needs a free key to measure. |
| Parsed numbers |
|
Evidence 38
| date | source | what it proved |
|---|---|---|
| 2026-10-30 | finnhub.io/pricing | the free plan allows 60 API calls per minute |
| 2026-10-30 | finnhub.io/pricing | the free plan is USD 0 a month and the All-In-One plan USD 3500 a month |
| 2026-10-30 | finnhub.io/pricing | not published |
| 2026-10-30 | finnhub.io/pricing | the free plan streams up to 50 symbols over the WebSocket |
| 2026-10-30 | finnhub.io/pricing | the free plan carries 1 year of company news |
| 2026-10-30 | finnhub.io/pricing | the free plan carries 1 month of the US earnings calendar |
| 2026-10-30 | finnhub.io/pricing | the free plan carries 4 quarters of EPS surprises |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | every plan is also held to 30 API calls per second |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | a call over the limit answers HTTP 429 |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | every call needs the key as a token parameter or an X-Finnhub-Token header |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | stock candles (OHLCV) are a premium endpoint |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | the quote endpoint is marked High Usage, not Premium |
| 2026-10-30 | finnhub.io/docs/api/rate-limit | filings return up to 250 documents per call and are offered for bulk download on Kaggle |
| 2026-10-30 | www.kaggle.com/datasets/finnhub/sec-filings | the Kaggle dataset is a Finnhub release of filings metadata for bulk download |
| 2026-10-30 | www.kaggle.com/datasets/finnhub/sec-filings | the bulk dataset covers SEC filings from 1994 to 2020 |
| 2026-10-30 | finnhub.io/static/js/webpack/dist/main.bundle.7d2d142701ec3d | the signup form has a name field; the same form has email and password fields and no card field |
| 2026-10-30 | finnhub.io/static/js/webpack/dist/main.bundle.7d2d142701ec3d | the signup form has an email field |
| 2026-10-30 | finnhub.io/register | signing up confirms non-professional status |
| 2026-10-30 | finnhub.io/register | the signup page sits behind a reCAPTCHA |
| 2026-10-30 | finnhub.io/terms-of-service | not published |
| 2026-10-30 | finnhub.io/terms-of-service | not published |
| 2026-10-30 | finnhub.io/terms-of-service | a personal-use signup is used to file a non-professional subscriber form |
| 2026-10-30 | finnhub.io/terms-of-service | inactive accounts are deleted from time to time |
| 2026-10-30 | docs.nexla.com/user-guides/connectors/finnhub_api | a third-party guide reports an email verification step before the account is active |
| 2026-10-30 | probe: https://finnhub.io/api/v1/quote?symbol=AAPL | the quote endpoint answered HTTP 401 to a call without a key |
| 2026-10-30 | probe: https://finnhub.io/api/v1/quote?symbol=AAPL | the keyless call is refused with a request for an API key |
| 2026-11-02 | finnhub.io/docs/api/rate-limit | a call over a plan's limit answers HTTP 429 |
| 2026-11-02 | github.com/finnhubio/Finnhub-API/issues/233 | a free-plan user's call over the limit got HTTP 429 with the text API limit reached. Please try again later. |
| 2026-11-02 | github.com/Finnhub-Stock-API/finnhub-python/issues/24 | the official Python client reports the 429 body as a JSON error message with this text (a premium-plan key) |
| 2026-11-02 | finnhub.io/pricing | the plan table gives 60 API calls a minute and names no reset instant |
| 2026-11-02 | finnhub.io/static/js/webpack/dist/main.bundle.4de77626bde75a | after the register call returns a JSON body with status 200 the signup script shows Successful and sends the browser to /dashboard |
| 2026-11-02 | finnhub.io/docs/api/rate-limit | the docs say the API key is found on the dashboard |
| 2026-11-02 | probe: https://www.kaggle.com/api/v1/datasets/download/finnhub/sec-filings | a request with no credentials to the Kaggle API download URL was redirected to the archive zip, and a ranged read of its first 1024 bytes answered 206 with a total of 499804103 bytes |
| 2026-11-02 | probe: https://www.kaggle.com/api/v1/datasets/download/finnhub/sec-filings | the ranged read of the archive behind the keyless download link answered HTTP 206 |
| 2026-11-02 | github.com/Kaggle/kagglehub/blob/main/README.md | Kaggle's own client documentation says authentication is needed only for public resources that require consent, and for private ones |
| 2026-11-02 | finnhub.io/docs/api/rate-limit | every plan is also held to 30 API calls per second |
| 2026-11-02 | finnhub.io/register | signing up confirms non-professional status |
| 2026-11-02 | finnhub.io/pricing | the free plan still allows 60 API calls a minute |
More fields 2
| bulk path | Kaggle dataset SEC Filings 1994-2020 (filings metadata only), a zip of 499804103 bytes that the Kaggle API download link serves with no Kaggle account or credentials; no bulk path for… |
|---|---|
| cutoff | {"http_status": "429","body": "a JSON error message that starts: API limit reached. Please try again later. (reported by users of the free and premium plans)","reset": "unverified: behind a sign-up: no Finnhub page says whether the 60-per-minute window is fixed or sliding, or when a blocked key may call again"} |
Unknown values 1
- retention stated: the field does not apply to this kind of offer