Worked example · 2026

Get Stock Quotes, Fundamentals & History — No API Key

No registration, no key to rotate, no monthly call quota to ration. Here's exactly what you can pull, a real worked example, and the throttling traps that quietly kill homemade scripts.

Open the Yahoo Finance Actor →

Almost every "free stock API" hands you a key, then meters it: 25 calls a day, 5 a minute, fundamentals locked behind the paid tier. For a dashboard, a backtest, or a watchlist, you blow through that before lunch. The workaround most people reach for — the public Yahoo Finance JSON endpoints — genuinely needs no key, but it has a cookie-and-crumb handshake and a hair-trigger rate limit that turns a working script into empty responses overnight. This walks the clean path.

Three kinds of data, one source

Decide which of these you need — the request shape and the gotchas differ for each:

Live quote

The near-real-time snapshot you'd see on the ticker page.

price · change% · volume
marketCap · dayHigh/Low
bid · ask

Fundamentals

The valuation and profile numbers for screening.

trailingPE · EPS
dividendYield · beta
fiftyTwoWeekHigh/Low

Price history

OHLCV bars back years, for charts and backtests.

date · open · high
low · close · adjClose
volume

The history feed is the one with the most knobs: you set an interval (1d, 1wk, 1mo) and a range (1mo, 1y, 5y, max). Asking for 1d bars over max on a 30-year-old stock returns thousands of rows — fine, but size your request to the chart you're actually drawing.

Worked example: a 5-stock dashboard feed

Say you want a morning feed for five tickers: current price plus a few fundamentals, refreshed daily. You list the symbols, ask for quote-plus-fundamentals, and run it.

Request
curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tickers": ["AAPL", "MSFT", "NVDA", "AMZN", "GOOGL"],
    "dataType": "quote"
  }'
Response (one row per ticker)
[
  {
    "symbol": "AAPL",
    "regularMarketPrice": 228.52,
    "regularMarketChangePercent": 1.34,
    "marketCap": 3470000000000,
    "trailingPE": 34.8,
    "epsTrailingTwelveMonths": 6.57,
    "dividendYield": 0.43,
    "fiftyTwoWeekHigh": 260.10,
    "fiftyTwoWeekLow": 169.21,
    "currency": "USD"
  }
]

That's the whole task for a quote feed. Swap "dataType": "quote" for "dataType": "history" and add "interval": "1d" plus "range": "1y" to get a year of daily bars per ticker instead. Append &format=csv to the dataset URL and the same data lands as a spreadsheet you can chart in Sheets.

Why the DIY version breaks — and what to watch for

If you skip the Actor and hit the endpoints yourself, you'll meet these in roughly this order. None of them throw a friendly error; they just return nothing, which is what makes them maddening:

SymptomCauseFix
401 / "Invalid Crumb"Yahoo's quote endpoints require a crumb token paired with a session cookie you have to fetch first.Do the cookie handshake, then attach the crumb to every call. The Actor does this transparently.
HTTP 429, then emptiesToo many requests from one IP. The rate ceiling is low and unpublished, and it cools down slowly.Pace requests and rotate IPs. A few hundred tickers in a tight loop will trip it.
Missing fundamentalsQuote and fundamentals come from different modules; one request doesn't return both unless you ask the right module.Request the correct data type, or let the Actor merge the modules into one row.
Wrong number of barsInterval and range interact: some pairings silently cap or thin the series.Pick a sane interval/range pair and validate the row count against the date span.
Stale or delayed priceThe public feed is near-real-time for US equities but can lag, and is delayed for some exchanges.Treat it as "near-real-time," not tick data. For most dashboards and backtests it's plenty.

Notice the theme: the data is free and good, but the access layer is hostile by design. The reason a maintained Actor is worth it here isn't the parsing — it's that the cookie/crumb handshake and the throttling are exactly the parts that rot and need babysitting.

Skip the cookie-and-crumb circus

The Yahoo Finance Actor handles the session handshake, the crumb token and the rate-limit pacing, then returns quotes, fundamentals or full price history as clean JSON or CSV — no key, no quota to ration.

Run the Yahoo Finance Actor → Or get done-for-you leads

When you'd want a paid key instead

Being honest about the trade-off: if you need a contractual data license, guaranteed sub-second tick data, or coverage of exotic instruments and exchanges, a paid market-data vendor is the right call. The no-key route shines for the 90% case — building a watchlist, screening on fundamentals, backtesting on daily bars, powering a side-project dashboard — where paying per call or rationing a free quota is the only thing standing between you and the data.

Disclosure: links to Apify on this page are affiliate links, marked rel="sponsored". If you create a paid account through them we may earn a commission at no extra cost to you. We recommend Apify because we build and ship Actors on it ourselves, including the Yahoo Finance Actor linked above.