Everything on Google Finance is public, and almost none of it is convenient to collect. The quote, the chart, the key stats, the financial statements, and the news all live in separate widgets on a JavaScript-rendered page with no official endpoint behind it. I'll walk through the DIY route and where it breaks, then the shortcut: the Google Finance API on Apify, which takes a ticker like GOOGL:NASDAQ and returns the whole page as structured JSON.
Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.
One more thing up front: this post is about data plumbing. Nothing here is investment advice, and the Actor returns numbers, not opinions about what to do with them.
Does Google Finance have an API?
Not anymore. Google shut down its old Finance API years back and never replaced it, so there is no key to request and no official endpoint to call. When developers say "Google Finance API" in 2026, they mean a scraper with an API-shaped interface: send a symbol, get the quote, price history, fundamentals, news, and statements back as JSON you can load anywhere.
What the Google Finance API returns
The Google Finance API returns the real-time quote, price history graph, key statistics, related news, and financial statements for each symbol as one structured JSON item.
| Field | Example | Notes |
|---|---|---|
summary.price |
166.32 |
With exchange and currency in market_info
|
summary.stock.price_movement |
{ "percentage": 0.49, "movement": "Up" } |
Change and direction |
graph |
{ "date": "May 7, 9:30 AM", "price": 165.51, "volume": 3820000 } |
Price and volume series for your window, from 1D to MAX |
knowledge_graph.key_stats |
{ "label": "P/E ratio", "value": "18.13" } |
Market cap, P/E, dividend yield, 52-week range |
news_results |
{ "title": "...", "source": "Reuters", "date": "3 days ago" } |
Headlines with links |
financials |
{ "title": "Income Statement", "annual": [...] } |
Income statement, balance sheet, cash flow where available |
Symbols cover stocks, ETFs, indices, currencies, and crypto, so BTC-USD works exactly like AAPL:NASDAQ. Each symbol lands as its own dataset item, one run per ticker or one run per portfolio.
Who this is for
Three groups keep showing up in my logs. Analysts doing financial research who want income statements and key stats in a dataframe instead of a browser tab. Developers powering market dashboards that need index levels, FX rates, and crypto prices on a refresh cycle. And anyone doing portfolio monitoring who would rather batch-fetch fifty holdings in one run than open fifty tabs.
The manual way, and where it breaks
The DIY version is to request the Google Finance page for each ticker and parse what comes back. It fails fast. The page renders through JavaScript, so a plain HTTP request returns a shell with no prices in it. Move to a headless browser and you now maintain browser infrastructure, proxies, and retries for a page whose markup shifts without notice. The community libraries that once wrapped Google Finance mostly stopped working when the old API died, which is why so many of them sit archived on GitHub. You can absolutely rebuild all of this. The question is whether you want to own it.
The faster way: run the Google Finance scraper
You send a documented JSON input, you get a documented JSON output, and nothing needs babysitting.
Apify Console
- Open the Google Finance API and click Try for free.
- Enter a single symbol in
q, or a list inqueries. - Run it and download the dataset as JSON, CSV, or Excel.
REST
curl -X POST "https://api.apify.com/v2/acts/johnvc~google-finance-api/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "q": "GOOGL:NASDAQ", "window": "1M" }'
Endpoint details live in the Apify API docs.
Pull a whole portfolio in Python
The queries array takes a batch of symbols in one run:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("johnvc/google-finance-api").call(
run_input={
"queries": ["GOOGL:NASDAQ", "AAPL:NASDAQ", "BTC-USD"],
"window": "1M",
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
summary = item.get("summary", {})
movement = summary.get("stock", {}).get("price_movement", {})
print(summary.get("title"), summary.get("price"), movement.get("percentage"))
Download NVDA price history to CSV
The graph array is a ready-made time series, and the Apify dataset export turns it into a spreadsheet with no extra code. The task Download NVDA stock price history to CSV is a preconfigured run you can copy.
Get NSE quotes like Reliance
Google Finance covers far more than US tickers. Symbols like RELIANCE:NSE return Indian market quotes with the same JSON shape, shown in the task Get NSE stock quotes by API.
Feed a market dashboard
Every run also carries a market overview: US, European, and Asian indices, major currencies, and top cryptocurrencies. The task Market data for a finance dashboard shows the input that powers a dashboard backend.
Monitor a portfolio on a schedule
Save your queries list as a task, attach a schedule, and each run appends fresh quotes with timestamps, which builds a price record you own. Start from Monitor a stock portfolio with Google Finance.
Ask Claude for a live quote over MCP
Apify exposes the Actor through the Model Context Protocol, so Claude, Claude Code, and Cursor can fetch a live quote mid-conversation instead of guessing from training data. The task Get live stock quotes in Claude via MCP has the setup, and you can read more about Claude at claude.ai.
FAQ about scraping Google Finance
Does Google Finance have an official API, or do I need a scraper?
There is no official Google Finance API today; the old one was retired without a successor. A hosted scraper like this one is the practical replacement: same public data, delivered as JSON.
How much does the Google Finance scraper cost to run?
Billing is per event: $0.02 to start a run, then $0.02 per symbol fetched. One symbol costs $0.04 total and a ten-symbol portfolio costs $0.22. New Apify accounts include free platform credit, so first runs usually cost nothing out of pocket.
How do I use the Google Finance scraper in Python?
Install apify-client, call johnvc/google-finance-api with a queries list, and iterate the dataset items as shown above. Each item is one symbol with its quote, graph, stats, and news.
Can Claude call the Google Finance scraper through MCP?
Yes. Connect the Apify MCP server and the Actor shows up as a callable tool, so a prompt like "what did AAPL close at" triggers a real fetch instead of a stale answer.
Can I schedule the scraper to pull quotes every morning?
Yes. Save a task with your symbols, attach an Apify schedule with a cron expression, and runs append to your dataset automatically. That is the whole portfolio-monitoring recipe behind the Google Finance API.
What will the scraper miss?
Whatever Google Finance itself does not show. Financial statements are not available for every symbol, some instruments carry thin knowledge-graph data, and quotes reflect what the page displays rather than a direct exchange feed. If a field is empty on the site, it will be empty in the JSON.
More from Truffle Pig Data
A finance pipeline rarely stops at quotes. The Earnings Call Transcript API adds the qualitative context behind the numbers, the Google News API widens news coverage beyond a single ticker's feed, and the Congress Financial Disclosures API tracks political stock trades you can cross-reference against prices.
Wrapping up
Google Finance never got its API back, but the data is still one JSON call away. Point the Google Finance API at your watchlist and see what comes back.
Top comments (0)