Financial Literature

Polygon.io

Polygon.io — US stocks, options and crypto with a developer-grade API; the free tier is end-of-day only

When you are building something and want an API with proper docs, SDKs and a path to real-time — US stocks first, options and crypto beside them — and can live with the free tier's five calls a minute while you prototype.

equitiesoptionscryptofxUnited States
Asset classesequities · options · crypto · fx
Frequencyintraday → monthly
History2000s → today
Limit · costFree: 5 calls/min, end-of-day, 2 years of history · paid from about $30/month
KeyFree key needed — Sign up at polygon.io; the key is instant.
Formats · pull withjson · csv — python, excel
LicencePolygon terms: personal use on the free tier; display and redistribution need a paid plan and, for some data, exchange agreements.
RedistributeNo — link and pull, do not republish
Best for“A well-documented US equities API to build on” · “Option chains and aggregates on a paid plan”
When to use it

Reach for it when…

When you are building something and want an API with proper docs, SDKs and a path to real-time — US stocks first, options and crypto beside them — and can live with the free tier's five calls a minute while you prototype.

Not for: Non-US markets (EODHD, Twelve Data), macro (FRED), free-tier real-time (paid only), anything you will redistribute.

How to read it

Units, revisions, traps

Units. Prices in US dollars; timestamps are Unix milliseconds — convert with unit='ms'. Aggregates are adjusted by default (adjusted=true).

Revisions. Adjusted aggregates change with corporate actions.

  • Five calls a minute on the free tier — add a sleep or the API returns 429.
  • The previous-close endpoint is the cheapest way to get today's price; aggregates for a range cost one call regardless of length.
  • Options tickers have their own format (O:AAPL260117C00200000).

Classic mistake: Reading the 't' timestamp as seconds.

How to use it in your own work

Three recipes

Each recipe: Python · Excel · Sheets, with how to read the result. Python recipes run under pandas; recipe 1 is re-run by the weekly check where the source allows it.

How to use it in your own work

Copy the snippet, change the series id, read the result the way the footer says. Replace YOUR_…_KEY with your own key where one is needed.

Recipe 1Daily aggregates for a stock

import requests, pandas as pd
KEY = "YOUR_POLYGON_KEY"
u = f"https://api.polygon.io/v2/aggs/ticker/AAPL/range/1/day/2026-01-01/2026-09-08?adjusted=true&sort=asc&limit=500&apiKey={KEY}"
df = pd.DataFrame(requests.get(u, timeout=30).json()["results"])
df["date"] = pd.to_datetime(df.t, unit="ms")
print(df.set_index("date")[["o", "h", "l", "c", "v"]].tail())
How to read the resultColumns are single letters (o h l c v); vw is the volume-weighted average price.

Recipe 2Previous close for a list

import requests, time
KEY = "YOUR_POLYGON_KEY"
for t in ["AAPL", "MSFT", "NVDA"]:
    j = requests.get(f"https://api.polygon.io/v2/aggs/ticker/{t}/prev?adjusted=true&apiKey={KEY}", timeout=30).json()
    print(t, j["results"][0]["c"])
    time.sleep(13)   # free tier: 5 calls a minute
How to read the resultYesterday's close, adjusted; for a longer list the free tier takes minutes — plan around it.

Recipe 3An option contract's daily bars (paid)

import requests, pandas as pd
KEY = "YOUR_POLYGON_KEY"
u = f"https://api.polygon.io/v2/aggs/ticker/O:AAPL260117C00200000/range/1/day/2026-01-01/2026-09-08?apiKey={KEY}"
print(requests.get(u, timeout=30).json().get("resultsCount"))
How to read the resultThe ticker encodes underlying, expiry (YYMMDD), C/P and strike × 1000.

Series → question map

The ids we use from Polygon.io, each with the question it answers. The catalog's compare view reads the concept tags behind these rows.

SeriesAnswersRegionConcept
aggs · 1/dayDaily OHLC for a US stockUnited Statesohlc_daily
aggs · 1/minuteIntraday bars (paid)United Statesintraday
options aggsOption contract prices (paid)United Statesoptions
crypto aggsCrypto barsglobalcrypto_spot

Compare with

Same question, different source: Twelve Data, EODHD, SEC EDGAR APIs. The compare view lines up coverage, frequency, history and access side by side and lists what the combination makes possible.

Open compare: Polygon.io · Twelve Data · EODHD →

Questions readers ask

What is free?

End-of-day aggregates, five calls a minute, two years back. Real-time and options need a paid plan.

Is Polygon good for non-US stocks?

No — it is US-centric. Use EODHD or Twelve Data for Asia and Europe.

Do they have a Python library?

Yes, polygon-api-client on PyPI; the raw REST calls above need nothing but requests.

Educational only — we explain, we never advise · snippet licence: public domain · corrections to [email protected], fixed within a day and logged in the changelog.