Finviz Stock Screener & Fundamentals | 83 fields | from $2/1K avatar

Finviz Stock Screener & Fundamentals | 83 fields | from $2/1K

Pricing

from $9.17 / 1,000 quote records

Go to Apify Store
Finviz Stock Screener & Fundamentals | 83 fields | from $2/1K

Finviz Stock Screener & Fundamentals | 83 fields | from $2/1K

Scrape stock fundamentals and technicals from Finviz.com. Quote mode: 83 fields per ticker (valuation, margins, performance, ownership, technicals). Screener mode: preset signal screens (gainers/losers, new highs/lows, unusual volume, insider trades, up/downgrades). No API key required.

Pricing

from $9.17 / 1,000 quote records

Rating

0.0

(0)

Developer

Vitalii Bondarev

Vitalii Bondarev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Finviz Stock Screener & Fundamentals | 83 fields | No API key

For quant analysts, screeners, and AI agents that want Finviz.com's fundamentals and technicals table as structured data — without copy-pasting from the site or paying for Finviz Elite.

No API key required. No login. $2.00/1,000 quote records · $1.00/1,000 screener rows (Pay Per Event). Every record includes parse_confidence (0.0–1.0) and warnings.


What data you get

Quote mode — 83-field fundamentals/technicals snapshot per ticker

One record per symbol, lifted from Finviz's snapshot-table2 (the same table shown on finviz.com/quote.ashx?t=<SYMBOL>):

  • Identity: symbol, name, sector, industry, country
  • Valuation: market_cap, enterprise_value, p_e, forward_p_e, peg, p_s, p_b, p_fcf, ev_ebitda, ev_sales
  • Profitability: roa, roe, roic, gross_margin, oper_margin, profit_margin
  • Growth: eps_this_y, eps_next_y, eps_next_5y, eps_past_3_5y, sales_past_3_5y, eps_q_q, sales_q_q
  • Ownership: insider_own, insider_trans, inst_own, inst_trans, short_float, short_ratio
  • Technicals: beta, rsi_14, atr_14, sma20, sma50, sma200, 52w_high, 52w_low, rel_volume, avg_volume, volume
  • Performance: perf_weekperf_10y
  • Price: price, prev_close, change, target_price, recom
  • …and ~40 more (dividends, EPS surprise, debt ratios, employees, IPO date). See src/normalize.py::SNAPSHOT_FIELDS for the full canonical list.

Screener mode — preset signal screens

One record per matching ticker: symbol, name, sector, industry, country, market_cap_screener, pe_screener, price_screener, change_screener, volume_screener, rank, signal.


Access path & compliance (read this before using filters)

Both endpoints are server-rendered HTML, no Cloudflare/JS challenge — fetched with curl_cffi browser-TLS impersonation, no browser or residential proxy required (verified live 2026-07-15).

  • quote.ashx (quote mode) is fully clean: finviz.com/robots.txt does not restrict it at all.
  • screener.ashx (screener mode) is restricted: robots.txt has a blanket Disallow: /screener?*, but then explicitly Allow:-lists ~32 named preset "signal" screens (top gainers/losers, new highs/lows, overbought/oversold, unusual volume, chart patterns, insider trades, analyst up/downgrades, earnings timing, major news). This actor's signal input uses exactly that allow-listed set — screener mode with signal set is 100% robots.txt-compliant.
  • The filters input (raw Finviz filter string, e.g. sec_technology,cap_large) is exposed as an opt-in advanced option. It is technically served by the site (HTTP 200) but falls outside the robots.txt allow-list for /screener. The actor logs a warning when used. Left blank by default — you must explicitly set it.

This is a deliberate, disclosed trade-off: rather than silently building an unrestricted custom-filter screener (matching some competing Finviz scrapers) or refusing to build screener mode at all, the default path (signal) stays inside the site's own declared policy, and the wider capability is there for buyers who choose to use it.


Input

FieldModeDescription
modebothquote or screener
symbolsquoteTicker list, e.g. ["AAPL","MSFT"]
signalscreenerOne of 32 robots.txt-allowed presets, e.g. ta_topgainers
filtersscreenerAdvanced, opt-in raw filter string — see compliance note above
viewscreenerFinviz view id (default 111 Overview); ignored when signal is set
maxItemsscreenerMax rows to return, paginated 20/page

Output example (quote mode, abridged)

{
"symbol": "AAPL",
"name": "Apple Inc",
"sector": "Technology",
"industry": "Consumer Electronics",
"country": "USA",
"price": 314.86,
"market_cap": 4624460000000.0,
"p_e": 38.09,
"eps_ttm": 8.27,
"roe": 141.47,
"mode": "quote",
"scraped_at": "2026-07-15T10:00:00Z",
"parse_confidence": 1.0,
"warnings": []
}

Edge cases

  • Unknown/delisted ticker: the record is still pushed with warnings: ["fetch_failed"], parse_confidence: 0.0, all data fields null. Not charged for failed quote fetches beyond the base record.
  • ETF / fund tickers: many equity-only fields (P/E, EPS, margins) are legitimately absent on Finviz for ETFs — those come back as null, not an error.
  • Empty screener result: returns zero rows with totalItems: 0 in OUTPUT, not an error.
  • Rate limiting (HTTP 429): retried with exponential backoff (up to 3–4 attempts); persistent 429 surfaces as a run-level error in OUTPUT.

Known limitations

  • Screener mode's field set (11 columns: ticker/company/sector/industry/country/market cap/P-E/price/change/volume) is the Overview view only — Finviz has richer views (Valuation, Financial, Ownership, Technical) selectable via view, but only Overview's column layout is currently parsed. Switch to quote mode on the resulting tickers for the full 83-field detail.
  • No historical/intraday price data (that's Yahoo Finance Scraper's history mode in this fleet, not Finviz's).