Google Finance Scraper - Google Finance API & Stock Quotes
Pricing
from $2.00 / 1,000 per-run start fees
Google Finance Scraper - Google Finance API & Stock Quotes
Google Finance scraper for traders, analysts and dashboards that need quotes as data: live price, change, day range, market cap, volume, dividend, P/E, 52-week range, EPS, beta, shares and headcount. One row per ticker with sortable numbers and the text Google shows.
Pricing
from $2.00 / 1,000 per-run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 days ago
Last modified
Categories
Share
Google Finance Scraper — Google Finance API for live stock quotes
A google finance scraper that returns the live quote and the whole key-statistics block Google Finance shows beside it. One dataset row per ticker: price, absolute and percentage change, direction, open, day high and low, market cap, average volume, volume, dividend and yield, quarterly dividend, ex-dividend date, P/E, the 52-week range, EPS, beta, shares outstanding and headcount. Send a watchlist, get JSON you can sort, chart or pipe into a report.
Pass AAPL or AAPL:NASDAQ. A ticker that names its exchange keeps it; one
that does not falls back to Default exchange, which starts at NASDAQ. For
anything outside US tech, name the market: ASML:AMS, SHEL:LON, SAP:ETR,
7203:TYO. ASML on NASDAQ and ASML on AMS are different listings at
different prices in different currencies.
What this Google Finance scraper returns per quote
Every large figure comes back twice. market_cap is 4910000000000 and
market_cap_text is "4.91T". The same holds for volume, average volume,
shares outstanding and headcount. A market cap of "4.91T" is unsortable in a
spreadsheet; a market cap of 4910000000000 is unreadable in a report. You get
both and pick per column.
currency is read off the page rather than inferred from the exchange, because
a listing can quote in a currency the exchange's country does not use. London
names in pence come back as GBX with the figures Google shows.
as_of carries the timestamp exactly as the page states it, including the
market's own timezone (Oct 7, 4:00:01 PM GMT-4). Outside trading hours that
is the closing price; the after-hours figure is a different number on the same
page and is not reported as the price.
fetched_at is the ISO 8601 UTC moment this row was pulled.
Where a cell is empty
Google writes - where it has no figure, and those arrive as null rather than
zero. A P/E of null means the company has no meaningful one, usually because
it has no earnings; a P/E of 0 would be a claim nobody made. previous_close
and cdp_score appear on some listings and not others.
Input
| field | type | default | notes |
|---|---|---|---|
tickers | array | required | AAPL or AAPL:NASDAQ, one per entry |
exchange | string | NASDAQ | Fallback market for bare tickers |
language | string | en | Two-letter interface language |
country | string | us | Two-letter market code for the request |
concurrency | integer | 3 | Parallel quotes, 1–10 |
attempts | integer | 8 | Tries per ticker with a fresh session, 1–30 |
Output
One row per input ticker, with found, attempts, duration_seconds,
error, position and url on every row. summary repeats the run counts
(tickers, quoted, withMarketCap, withPeRatio, defaultExchange,
sessionsInPool, proxyConfigured, proxyPinnable, fetchedInSeconds,
errorCount). errors lists not_parsed and blocked per ticker.
A real run, {"tickers": ["AAPL:NASDAQ", "MSFT:NASDAQ"]} with everything else
at its default, pulled 8 October 2026 — the first row and the summary of that
two-row run, as examples/prefill.json records them:
{"items": [{"symbol": "AAPL","exchange": "NASDAQ","name": "Apple Inc","currency_symbol": "$","currency": "USD","price": 336.67,"change": 3.04,"change_percent": 0.91,"direction": "up","as_of": "Oct 7, 4:00:01 PM GMT-4","open": 336.96,"day_high": 338.67,"day_low": 332.78,"previous_close": null,"market_cap": 4910000000000,"average_volume": 40200000,"volume": 34150000,"dividend_yield": 0.32,"quarterly_dividend": 0.27,"ex_dividend_date": "Aug 10, 2026","pe_ratio": 38.59,"week52_high": 345.34,"week52_low": 243.42,"eps": 8.72,"beta": 1.07,"shares_outstanding": 14590000000,"employees": 166000,"cdp_score": null,"url": "https://www.google.com/finance/quote/AAPL:NASDAQ?hl=en&gl=us","found": true,"attempts": 1,"duration_seconds": 2.57,"error": null,"position": 1,"fetched_at": "2026-10-08T03:15:11.823Z","market_cap_text": "4.91T","average_volume_text": "40.20M","volume_text": "34.15M","shares_outstanding_text": "14.59B","employees_text": "166K"}],"errors": [],"summary": {"tickers": 2,"quoted": 2,"withMarketCap": 2,"withPeRatio": 2,"defaultExchange": "NASDAQ","language": "en","sessionsInPool": 60,"proxyConfigured": true,"proxyPinnable": true,"fetchedInSeconds": 4.9,"errorCount": 0}}
The second row of the same run is MSFT at 529.76, pe_ratio 29.52,
week52_low 349.2, duration_seconds 1.08. Prices and volumes move every
minute: the row above is what the page said at that moment, not a figure the
Actor rounds or caches.
Errors
| Code | Meaning |
|---|---|
blocked | No attempt got a quote page back |
not_parsed | A quote page arrived with no price on it |
bad_input | No ticker was given |
crash | Unexpected error inside the run; the run itself fails |
blocked and not_parsed are different problems. The first is worth retrying
(raise Attempts per ticker); the second means the page came back but the
headline moved. crash is not a parse problem: something broke that the actor
did not expect.
Use cases for the Google Finance scraper
Watch a portfolio
Put every holding in tickers, run once a day, keep price, change,
change_percent, direction and as_of. A row per position, in the order you
sent them (position), so a diff against yesterday's run is a one-line join on
symbol.
Screen a sector
Send a whole list — every member of an index, every supplier you track — and
sort on pe_ratio, week52_low / week52_high, dividend_yield or
change_percent. The numeric fields are numbers, so a spreadsheet or a SQL
ORDER BY works without a cleanup pass first.
Feed a dashboard
market_cap, volume, eps and beta arrive typed, and the *_text
variants arrive as Google displayed them, so a dashboard can show 4.91T
next to a chart axis that needs 4910000000000. fetched_at is the freshness
stamp to print in the corner of the panel.
Enrich a table you already have
You have ISINs, or a list of suppliers, or tickers out of a filing. Resolve
them to symbol + exchange yourself, then use the run to attach price, name,
currency and the key-statistics block as extra columns.
How this Google Finance scraper compares
Search for a Google Finance scraper and you get three kinds of answer: the page itself, a script you run yourself, and a hosted Google Finance API — SerpApi, SearchAPI and ScrapeBadger all publish one. This Actor sits in a fourth spot: hosted, but priced per event instead of per credit pack.
| Google Finance in a browser | Open-source script | Hosted Google Finance API | This Google Finance scraper | |
|---|---|---|---|---|
| Returns rows you can store | No, it is a page | Yes, once it runs | Yes | Yes |
| Works without writing code | Yes | No | Yes | Yes, via the run form |
| Separate API key and credit plan | No | No | Yes | No, pay per event |
| Key statistics block beside the price | Yes | Depends on the script | Varies by vendor | Yes, every field, as number and as text |
| Many tickers in one request | No | Depends on the script | Varies by vendor | Yes, one row per ticker |
| A ticker that fails still returns a row | n/a | Usually stops | Usually an error | Yes, found: false with a code |
The hosted APIs win on exotic coverage: other pages, other exchanges, longer history. This Actor is deliberately narrow — the Google Finance quote page and its key-statistics block, for a list of tickers, at $0.002 a quoted ticker.
FAQ
Is this a Google Finance API replacement?
It is a scraper and an API for the same public quote page: you send tickers, you get JSON rows with price and key statistics. Use it where you would otherwise poll a paid stock price API and still want the Google Finance figures and the displayed text beside them.
Which exchanges are supported?
Any listing Google Finance serves, written as SYMBOL:EXCHANGE — AAPL:NASDAQ,
ASML:AMS, SHEL:LON, SAP:ETR. Bare tickers use your default exchange. The
currency is taken from the page, so a LSE name in pence returns GBX, not an
assumed GBP.
How fresh is the quote?
The row carries as_of exactly as the page states it and fetched_at in UTC.
During market hours that is the live print; outside them it is the official
close. After-hours prints on the same page are not reported as the price.
What happens when a ticker cannot be read?
You still get one row per ticker with found: false and a clear error or a
not_parsed note in errors. Only quoted tickers are billed, so a bad symbol
or a blocked attempt does not cost a quote event.
Can I use this as a share price API for a watchlist?
Yes. Send the whole list in tickers, set exchange once if it is one market,
and read price, change, change_percent, direction and as_of per row.
Numbers are sortable; *_text keeps the form Google displayed.
Pricing
Pay-per-event, the same model as before:
| event | price | when |
|---|---|---|
run_start | $0.002 | once at the start of every run |
quote | $0.002 | per ticker that was actually quoted (found: true) |
Empty results are free: a ticker with no price is not a quote event. The start
fee still stands. Free-plan runs deliver at most 10 rows per run and are only
charged for what you receive; upgrade to remove the cap or split the work across
runs.