Tony Wang6 min readHow to Scrape Google Finance in 2026 (API & Python)
Scrape Google Finance in 2026 — quotes, financials, and market-wide movers, earnings, and category views — DIY, no-code, or a structured API.
The fastest way to scrape Google Finance in 2026 is to call a structured API that returns normalized JSON — quotes, charts, financials, company data, and market-wide movers and category views — instead of parsing Google's client-rendered finance pages yourself. Google shut its own Finance API down in 2012, so there's no first-party endpoint to reach for, and the only official remnant is a delayed spreadsheet formula. This guide covers all three approaches, what each returns, where each breaks, and the legal reality up front.
Why scrape Google Finance?
Google Finance aggregates quotes, news, and market context in one place, which makes it useful for:
- Market-wide monitoring — track today's movers, trending symbols, and curated indices without polling one ticker at a time.
- Earnings calendar tracking — pull upcoming and recent earnings across companies for a single feed.
- Sector and category dashboards — pull news and stock lists scoped to a Google Finance category (technology, energy, and so on) instead of the whole market.
- Quote and fundamentals enrichment — attach price, company profile, and financial-statement data to a watchlist or research tool.
- News and sentiment research — pair a symbol's news and analyst-article feed with search demand or retail chatter to see what's driving it.
Is it legal to scrape Google Finance?
Option 1: DIY in Python (and why it breaks)
Google Finance's pages are a client-rendered app, not static HTML, so a DIY scraper has to drive a headless browser and parse whatever markup it renders:
from bs4 import BeautifulSoup
from playwright.sync_api import sync_playwright
with sync_playwright() as p:
browser = p.chromium.launch()
page = browser.new_page()
page.goto("https://www.google.com/finance/quote/AAPL:NASDAQ")
page.wait_for_selector("[data-last-price]") # price loads in async
soup = BeautifulSoup(page.content(), "html.parser")
It demos and then breaks:
- No official API since 2012. Google shut down the Finance Portfolio and Gadgets APIs in October 2012 and never shipped a public replacement, so there's no documented endpoint, key, or SLA to fall back on.
- JS-rendered, not scrapeable with a plain HTTP client. Prices and chart data load asynchronously into a client-side app, so
requestsalone returns an empty shell — you need a real browser. - Unlabeled, versioned CSS classes. There's no stable
data-*attribute strategy across sections; class names churn with frontend deploys, breaking selectors without warning. - Anti-bot at Google's scale. Headless traffic from datacenter IPs gets CAPTCHA-walled or blocked quickly, and running a browser per symbol is slow and expensive to scale.
Option 2: No-code tools
The closest thing Google offers to an API is the GOOGLEFINANCE() function in Google Sheets — pull a live price into a cell with =GOOGLEFINANCE("AAPL"), or a historical range with a start/end date. It's genuinely useful for a one-off spreadsheet, but the data is delayed, there's no programmatic way to call it outside Sheets, and it exposes nothing for movers, earnings calendars, or category news. Anything that needs to run on a schedule, join with other data, or reach market-wide views has to go elsewhere.
Option 3: A structured Google Finance API
For a repeatable, permission-scoped workflow, a Google Finance scraping API returns normalized JSON with no browser to run. Pull a quote's company profile:
curl "https://api.crawlora.net/api/v1/google-finance/company/AAPL:NASDAQ" \
-H "x-api-key: $CRAWLORA_API_KEY"
Quote, chart, company, and financials in Python:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/google-finance"
quote = requests.get(f"{base}/quote/AAPL:NASDAQ", headers=h).json()["data"]
chart = requests.get(f"{base}/chart/AAPL:NASDAQ", headers=h,
params={"window": "1y"}).json()["data"]
company = requests.get(f"{base}/company/AAPL:NASDAQ", headers=h).json()["data"]
financials = requests.get(f"{base}/financials/AAPL:NASDAQ", headers=h).json()["data"]
Company data is normalized JSON you can store directly (real response, check the docs for the full schema):
{
"code": 200,
"msg": "OK",
"data": {
"description": "Apple Inc. designs, manufactures, and markets smartphones, personal computers, tablets, wearables, and accessories.",
"ceo": "Tim Cook",
"employees": 166000,
"headquarters": "Cupertino, CA, US",
"sector": "Technology",
"market_cap": 4010000000000,
"pe_ratio": 34.56,
"fifty_two_week_high": 288.61,
"fifty_two_week_low": 169.21
}
}
Beyond a single symbol, the markets/* family reaches market-wide views — today's movers, an earnings calendar, or a category-scoped stock list — without touching quote/chart/company at all:
movers = requests.get(f"{base}/markets/movers", headers=h,
params={"count": 20}).json()["data"]
earnings = requests.get(f"{base}/markets/earnings", headers=h).json()["data"]
tech_stocks = requests.get(f"{base}/markets/categories/18/stocks", headers=h).json()["data"]
Movers is the same normalized shape, ticker/exchange/name per row:
{
"code": 200,
"msg": "OK",
"data": {
"count": 20,
"items": [
{ "ticker": "AAPL", "exchange": "NASDAQ", "name": "Apple Inc" }
]
}
}
Resolve a company name to a symbol with /google-finance/search?q= or /google-finance/context?q=, which both return ticker/exchange/name candidates. Store one row per symbol (or per market snapshot) and re-run on a schedule.
What you can collect
Per symbol (quote like AAPL:NASDAQ or BTC-USD): the full quote page (about, investment, key stats, news, related tickers), historical chart points with previous close, company profile (CEO, employees, headquarters, sector, market cap, P/E, 52-week range, day range, volume), annual and quarterly financials (revenue, net income), classification categories, related securities, and news and analyst articles. Market-wide: curated indices, movers, top-metric rankings, trending symbols, featured symbols, an earnings calendar, a headline article with a linked instrument snapshot, and category-scoped news and stock lists. Public data only.
Limitations and common challenges
- No official API to fall back on. Google shut its Finance API down in 2012 with no public replacement — every DIY approach means driving a browser against a page Google can redesign anytime.
- JS-rendered pages need a real browser. Plain HTTP requests won't see price or chart data; DIY scraping means the overhead and cost of headless Chrome per symbol.
- Data is informational, not advice, and not real-time trading data. Treat values as inputs, not recommendations, and confirm anything material against an authoritative source.
- Redistribution can need a license. Collecting public quote and market data for research or internal dashboards is one thing; reselling or re-hosting it commercially may require licensing — check Google's terms.
- Category and metric ids aren't self-explanatory. The
markets/categories/*andmarkets/topendpoints take numeric category and metric ids rather than names — confirm the ids you need against the docs before wiring a pipeline.
Where this gets used
- Market monitoring dashboards — movers, trending symbols, and curated indices refreshed on a schedule.
- Earnings calendar feeds — upcoming and recent earnings across a watchlist of companies.
- Sector research — category-scoped news and stock lists instead of one ticker at a time.
- Fundamentals enrichment — company profile and financial-statement data attached to a research tool or CRM.
Sources
Start collecting
Try it first, free: run any public URL through the Free Web Scraper, or check whether a site blocks bots with the Anti-Bot Checker — no signup.
Test the quote, company, and movers endpoints in the Playground, check the schema in the API docs, and review pricing. Google Finance covers the market broadly — movers, an earnings calendar, curated indices, category views — while Yahoo Finance goes deeper on a single ticker's fundamentals, options, and analyst data, so pair the two when a workflow needs both breadth and depth. For the asset class neither covers, how to scrape CoinGecko handles crypto prices, market caps, and exchange data. And for what a company officially disclosed rather than what the market paid for it, how to scrape SEC EDGAR covers the filings side of the same picture. See the broader finance & market data use case for how these sources fit together. See also how to choose a web scraping API and is web scraping legal.
Part of our how-to-scrape guide series — every platform we cover, in one index.
Frequently asked questions
Is there an official Google Finance API?
No. Google shut down its Finance Portfolio and Gadgets APIs in October 2012 and never shipped a public replacement. The only official remnant is the delayed GOOGLEFINANCE() function in Google Sheets.
How do I address a stock or crypto symbol on Google Finance?
Use the exchange-qualified quote identifier Google Finance itself uses, like AAPL:NASDAQ for a stock or BTC-USD for crypto, across the quote, chart, company, and financials endpoints.
Is scraping Google Finance legal?
It's a legal gray area, not outright illegal, but Google's Terms of Service prohibit automated access without permission. Treat it as public reference data, respect rate limits, and don't resell or re-host Google's own feed. This isn't legal advice.
How is this guide different from the how-to-scrape-yahoo-finance guide?
Yahoo Finance's guide focuses on deep per-ticker fundamentals, options, and analyst data via yfinance and a structured API. This guide's differentiator is Google Finance's markets/* family — category-scoped movers and news, an earnings calendar, and curated indices — market-wide views the Yahoo Finance guide doesn't cover.
Can I use Google Sheets' GOOGLEFINANCE() function instead of scraping?
For a one-off spreadsheet, yes — it pulls a delayed live price or historical range. It has no programmatic access outside Sheets and no coverage for movers, earnings calendars, or category views, so it doesn't replace an API for a pipeline.
What market-wide data can I get beyond a single symbol?
Curated indices, today's movers, top-metric rankings, trending and featured symbols, an earnings calendar, a headline article with a linked instrument snapshot, and category-scoped news and stock lists via the markets/* endpoints.
Is Google Finance data real-time?
No — treat it as informational and possibly delayed, not a licensed real-time trading feed, and confirm anything material against an authoritative source before acting on it.