StockAnalysis Scraper avatar

StockAnalysis Scraper

Pricing

from $1.00 / 1,000 records

Go to Apify Store
StockAnalysis Scraper

StockAnalysis Scraper

Extract StockAnalysis overviews for US tickers: market cap, trailing revenue and net income, EPS, PE and forward PE, dividend and yield, shares outstanding, beta and the next earnings date. Export data, run via API, schedule and monitor runs, or integrate with other tools.

Pricing

from $1.00 / 1,000 records

Rating

5.0

(1)

Developer

Public Money

Public Money

Maintained by Apify

Actor stats

1

Bookmarked

4

Total users

3

Monthly active users

21 hours ago

Last modified

Categories

Share

Most quote sources give you a price and a PE and stop before the income statement. StockAnalysis publishes trailing twelve month revenue and net income right on the overview page, and this Actor returns them as structured fields alongside market cap, EPS, PE and forward PE, dividend and yield, shares outstanding, beta, the 52-week range and the next earnings date.

What it does

  • Returns one record per ticker, in order. A ticker StockAnalysis does not cover comes back with status: "failed" and a reason.
  • Carries trailing twelve month revenue and net income, which is the pair most free quote sources omit and which you need to compute your own margins.
  • Reports PE and forward PE side by side, so the market's expectation is visible next to the trailing number.
  • Gives the key figures twice: as StockAnalysis prints them (marketCap reads 4.67T) and as numbers you can sort on (marketCapNumeric).
  • Carries shares outstanding, so you can compute per-share figures the source does not publish directly.
  • Reports the next earnings date, so a screen can avoid or target a results week.

Use cases

You need toHow this Actor does it
Compute your own marginsDivide netIncomeTtmNumeric by revenueTtmNumeric
Compare trailing against forward valuationRead peRatioNumeric next to forwardPeNumeric
Build a per-share figureUse sharesOutstanding with any total from the record
Screen for dividend incomeSort on dividendYieldPercent and read dividend
Avoid an earnings weekFilter a watchlist on earningsDate
Feed a finance agentCall the Actor over MCP and let the model ask for the symbol it needs

Quick start

  1. Click Try for free.
  2. Add your tickers, one per line: AAPL, MSFT, NVDA. StockAnalysis covers US listings.
  3. Click Start. Rows appear within seconds.
  4. Export as JSON, CSV, Excel or XML, or read the dataset over the API.

Input

FieldTypeDefaultWhat it controls
tickersarrayAAPLUS-listed tickers to read
maxItemsinteger0Caps how many tickers are read. 0 reads them all
{
"tickers": [
"AAPL",
"MSFT",
"NVDA"
],
"maxItems": 0
}

Output

One dataset item per ticker. Fields StockAnalysis does not publish are dropped rather than returned as null, so a company with no dividend carries no dividend fields.

Field groupFields
Identitystatus, tickerSymbol, name, exchange, currency, url
Pricevalue, change, changePercent, fiftyTwoWeekLow, fiftyTwoWeekHigh, volume
SizemarketCap, marketCapNumeric, sharesOutstanding, enterpriseValue
Income statementrevenueTtm, revenueTtmNumeric, netIncomeTtm, netIncomeTtmNumeric
ValuationpeRatio, peRatioNumeric, forwardPe, forwardPeNumeric, eps, epsNumeric
Dividenddividend, dividendYieldPercent, exDividendDate
Otherbeta, earningsDate
TimingvalidFrom, scrapedAt
{
"status": "ok",
"tickerSymbol": "AAPL",
"name": "Apple Inc.",
"exchange": "NASDAQ",
"currency": "USD",
"value": 319.97,
"changePercent": -2.51,
"marketCap": "4.67T",
"marketCapNumeric": 4670000000000,
"sharesOutstanding": 14595000000,
"revenueTtm": "416.16B",
"revenueTtmNumeric": 416160000000,
"netIncomeTtm": "109.43B",
"netIncomeTtmNumeric": 109430000000,
"peRatio": "36.65",
"peRatioNumeric": 36.65,
"forwardPe": "31.20",
"epsNumeric": 8.73,
"dividend": 1.08,
"dividendYieldPercent": 0.33,
"beta": 1.09,
"earningsDate": "Oct 29, 2026",
"validFrom": "2026-09-04T20:00:01.000Z",
"url": "https://stockanalysis.com/stocks/aapl/"
}

Integrations

Run it over the API and get the rows back in one call:

curl -X POST "https://api.apify.com/v2/acts/publicmoney~stockanalysis-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"tickers": ["AAPL", "MSFT", "NVDA"], "maxItems": 0}'

From Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("publicmoney/stockanalysis-scraper").call(run_input={"tickers": ["AAPL", "MSFT", "NVDA"], "maxItems": 0})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["tickerSymbol"], item["name"], item["value"])

Give an AI agent the Actor over MCP:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?actors=publicmoney/stockanalysis-scraper"
}
}
}

Schedules run it on any cron, webhooks fire when a run finishes, and platform integrations push the dataset to Google Sheets, Slack, Airtable, Zapier or your own endpoint.

Cost

Pay per event, so you pay for records rather than compute time.

EventFree tierTop volume tier
Record with data$0.002$0.0007
Actor start$0.00005 per GBSame

A record that returned no data is published as a failure row and is never charged. Six volume tiers apply, so the per-record price falls with monthly volume.

Troubleshooting

IssueSolution
A ticker returns failedStockAnalysis covers US listings. For international instruments use the FT Markets Actor in this fleet.
netIncomeTtm is negativeThe company is loss-making over the trailing twelve months. That is the source, not a parse error.
forwardPe is missingStockAnalysis publishes it only where analysts have supplied forward estimates.
No dividend fields at allThe company pays no dividend, so the source publishes nothing to read.
I want to sort and the value is a stringUse the Numeric twin. revenueTtm is 416.16B for display and revenueTtmNumeric is the number.

FAQ

Does StockAnalysis have an API?

No. StockAnalysis publishes no documented public API for this data. The endpoints that libraries reach for are internal and unsupported, and they change without notice. This Actor reads the public overview page, which is why it keeps working.

Why use this over a plain quote scraper?

The income statement. Trailing twelve month revenue and net income are on the overview page here, so you can compute margins and price-to-sales yourself instead of pulling a separate fundamentals source.

Why are there two versions of each figure?

The source prints values for humans, so revenue reads 416.16B. Every key field also comes back with a Numeric twin holding the plain number, so you can sort and compute without parsing.

Does it return historical prices or past filings?

No. Each record is the current overview. For filings use the SEC Filings Actor in this fleet, and to build a price series schedule this Actor and let the dataset accumulate.

Which tickers are covered?

US listings. For international instruments use the FT Markets Actor in this fleet.

Do I need a StockAnalysis API key?

No. You need an Apify token to call the Actor over the API. No StockAnalysis credential is involved anywhere.

Can I get this data in Python?

Yes, with the apify-client package as shown above. It returns parsed JSON, so there is no HTML or response handling on your side.

Can I get the data into Excel or Google Sheets?

Yes. Export the dataset as XLSX or CSV, or connect the Google Sheets integration so each run appends to a sheet.

Can an AI agent call this Actor?

Yes. Add it to an MCP client with the config above and the model can request what it needs on its own. Every record is flat JSON with named fields, so no post-processing is needed.

This Actor reads public StockAnalysis data that needs no login and collects no personal data. Scraping public data is generally lawful, and how you store, redistribute or act on market data is governed by your own agreements and local rules. Take your own legal advice for your use case.

Changelog

  • 0.0.2 Added trailing revenue and net income, forward PE and the numeric twins.
  • 0.0.1 First release. The StockAnalysis overview per ticker.

Feedback

Found a field StockAnalysis publishes that this Actor misses, or an input it rejects? Open an issue on the Issues tab with the input and what you expected. A daily test runs every Actor in the fleet against live sources, so parser fixes ship fast.