Search for "Google Finance API" and most of what you find is either a Sheets tutorial or a wrapper library that broke when the page changed. The reason is simple: the official API has not existed for over a decade. Google announced its deprecation on May 26, 2011 and switched it off on October 20, 2012, taking the Portfolio API and Finance Gadgets with it. What remains is GOOGLEFINANCE() in Google Sheets and the public Google Finance website. This guide covers what the Sheets function still does well, exactly where it stops, and how a scraping API turns the website's quote, chart, financials and news pages into JSON you can call from code.
What GOOGLEFINANCE() in Sheets still gives you
For a personal watchlist in a spreadsheet, the Sheets function is often enough, and it is free. Google's own documentation lists the attributes it supports:
| Attribute group | Fields | Notes |
|---|---|---|
| Real-time (delayed) | price, priceopen, high, low, volume, marketcap, tradetime, volumeavg, pe, eps, high52, low52, change, beta, changepct, closeyest, shares, currency | "Real-time price quote, delayed by up to 20 minutes" per Google's docs |
| Historical | open, close, high, low, volume, all | Daily bars over a date range, e.g. =GOOGLEFINANCE("NASDAQ:GOOG","close",DATE(2026,1,1),TODAY(),"DAILY") |
| Mutual funds | returnytd, netassets, yieldpct, return1, return4, return13, return52, and more | Fund-specific |
Three things it does not do, which are usually the reason people go looking for an API:
- It only runs inside a spreadsheet. There is no HTTP endpoint. Automating it means driving Sheets through Apps Script or the Sheets API and living with recalculation timing.
- It returns numbers, not the page. The Google Finance site also shows quote news, analyst articles, a company description and classification, financial statement tables (income statement, balance sheet, cash flow), related instruments, and market-wide pages (indices, movers, trending, earnings calendar). None of that is exposed through the function.
- Quotes are delayed by up to 20 minutes and, in Google's words, "not sourced from all markets".
What a Google Finance scraping API returns
A Google Finance scraper API exposes the public site as documented endpoints that return the same shape every call. Crawlora's catalog for the platform currently covers 20 endpoints:
| Scope | Endpoints | What you get |
|---|---|---|
| Per ticker | quote/{quote}, ticker/{ticker}, chart/{quote} | Current price and change, market state, and the historical price series behind the chart |
| Per ticker | company/{quote}, financials/{quote}, classification/{quote} | Company description and key stats, income statement / balance sheet / cash flow tables, sector and industry classification |
| Per ticker | news/{quote}, analyst-articles/{quote}, related/{quote} | Quote news with source and timestamp, analyst articles, related instruments |
| Market-wide | markets/indices, markets/movers, markets/trending, markets/featured, markets/top, markets/headline, markets/earnings | Index levels, gainers and losers, trending and featured stocks, top stocks by metric, the top headline, and the earnings calendar |
| Market-wide | markets/categories/{category}/stocks, markets/categories/{category}/news | Stocks and news for a Google Finance category page |
| Discovery | search, context | Resolve a company name or ticker to Google Finance's identifier, and pull the context block for a query |
Every endpoint is a GET against https://api.crawlora.net/api/v1/google/finance/... with your key in an x-api-key header. The quote and chart calls are the ones a watchlist uses most:
# Current quote for Alphabet on NASDAQ
curl -s "https://api.crawlora.net/api/v1/google/finance/quote/GOOG:NASDAQ" \
-H "x-api-key: $CRAWLORA_API_KEY"
# Historical series behind the chart
curl -s "https://api.crawlora.net/api/v1/google/finance/chart/GOOG:NASDAQ" \
-H "x-api-key: $CRAWLORA_API_KEY"
import requests
BASE = "https://api.crawlora.net/api/v1/google/finance"
HEADERS = {"x-api-key": "YOUR_API_KEY"}
def quote(symbol: str) -> dict:
r = requests.get(f"{BASE}/quote/{symbol}", headers=HEADERS, timeout=30)
r.raise_for_status()
return r.json()["data"]
for symbol in ["GOOG:NASDAQ", "AAPL:NASDAQ", "MSFT:NASDAQ"]:
q = quote(symbol)
print(symbol, q)
The response is JSON under a data key with a stable field set per endpoint; the exact schema for each is in the API docs, and the Playground lets you run a call and inspect the real response before writing code.
GOOGLEFINANCE() vs a scraping API: which one for which job
| GOOGLEFINANCE() in Sheets | Google Finance scraping API | |
|---|---|---|
| Access | Spreadsheet formula only | HTTP endpoints, any language |
| Quotes and historical bars | Yes | Yes |
| News, analyst articles | No | Yes, per ticker |
| Financial statements | No | Yes, per ticker |
| Market movers, trending, earnings calendar | No | Yes |
| Related instruments, classification | No | Yes |
| Many tickers on a schedule | Awkward (Apps Script, recalculation) | One request per ticker per run |
| Cost | Free | Credit-based; 2,000 free credits a month |
| Delay | Up to 20 minutes | Whatever the public page shows |
| Licensed real-time feed | No | No |
The honest summary: if you want a dozen closing prices in a personal spreadsheet, use the formula. If you want a program to read what a person sees on the Google Finance page, for many tickers, including the news and financials, use the API.
A typical workflow
- Resolve symbols once. Use
searchto map company names to Google Finance identifiers (GOOG:NASDAQ,VOD:LON), and store the mapping; do not re-resolve on every run. - Pull the per-ticker set on a schedule.
quoteevery run,chartless often (the series changes once a day),financialsquarterly,newsandanalyst-articleswhenever your monitoring cadence needs them. - Add market context.
markets/movers,markets/trendingandmarkets/earningsgive a dashboard its "what happened today" row without any per-ticker call. - Store normalized rows with a fetched-at timestamp so your dashboard or agent can see staleness, and so you can diff runs to detect changes in analyst coverage or financials.
- Handle failures explicitly. Endpoints return typed error codes; retry on transient failures with backoff and alert on a symbol that fails repeatedly, which usually means it was delisted or renamed.
The finance market data use case walks through watchlists, market-news monitoring and dashboard enrichment in more detail, and the same key covers Yahoo Finance for OHLCV history, options chains and dividends, and SEC EDGAR for filings, so an agent can cross-check a Google Finance quote against a 10-K in the same run.
Limitations, stated plainly
- Not real time. The page's quotes are delayed and the API returns what the page shows. Do not build execution logic on it.
- Not a licensed feed. Exchanges license real-time and historical tick data; Google Finance is a consumer website. For backtesting or compliance, use a licensed vendor. The financial data API guide for agents is explicit about where Polygon, Databento and peers are the right choice.
- Not investment advice, and not a compliance source. Public-page data is an input to research and monitoring, not a system of record.
- Coverage follows the site. If Google Finance does not show a security or a statement, the API cannot return it.
- Commercial use depends on your situation. Applicable law, third-party rights and the source's terms all apply; see Is web scraping legal in 2026?.
Start collecting
Run the quote endpoint for one ticker in the Playground, read the response schema in the API docs, and check the credit weight per endpoint on the pricing page. For the workflow design, start from the finance market data use case. If you are pairing market data with company research, the SEC platform covers full-text filing search, insider transactions and 13F holdings under the same key.
Sources
Related reading
- Financial Data API for AI Agents — where a scraping API fits next to licensed market-data vendors.
- How to Scrape Yahoo Finance — OHLCV history, options and dividends from the other big public finance site.
- How to Scrape Google Finance — the step-by-step guide with Python and curl examples.
- Web Scraping vs API — when an official API exists and when it doesn't.
Frequently asked questions
Is there an official Google Finance API?
No. Google discontinued its official Google Finance API in 2012. The only first-party remnant is the GOOGLEFINANCE() function in Google Sheets, which is delayed and not a programmatic API, so teams use a scraping layer for structured public data.
What data can I get from Google Finance?
Quote pages (price/volume, ticker context), historical chart points, market news (headlines, sources, URLs, timestamps), company and financial sections, market movers and categories, plus related securities and search.
Can I use Google Finance data for trading?
No. It is public page data that may be delayed or incomplete — not a real-time trading feed, investment advice, or a licensed market-data source. Use it for research, monitoring, and enrichment only.
How do I collect many symbols efficiently?
Call the relevant endpoint per symbol on a schedule and store normalized rows in one consistent shape, handling documented errors and retries — so a dashboard or alerting layer can read them directly.
