Finviz Stock Screener Scraper
Pricing
Pay per event
Finviz Stock Screener Scraper
📊 Export any public Finviz stock screen as typed, analysis-ready data. Preserve filters and sorting, paginate automatically, and retain source values.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Turn any public Finviz stock screen into clean, typed data for watchlists, research notebooks, dashboards, and recurring market pipelines.
Paste the URL created by the Finviz screener UI. The Actor keeps its filter, view, and sort parameters, paginates the result set, and returns one dataset row per stock.
- 📊 Extract filtered stock universes, not just individual ticker pages
- 🔎 Keep arbitrary public Finviz filter and sorting parameters
- 🔁 Follow result pagination automatically
- 🧮 Receive normalized numbers plus the original Finviz display values
- 🔗 Trace every row to its quote page and source screen
- 🛡️ Detect challenge pages instead of returning them as fake records
What does Finviz Stock Screener Scraper do?
Finviz Stock Screener Scraper reads public finviz.com/screener.ashx pages.
It extracts the overview fields used in common equity-screening workflows:
- result rank
- ticker symbol
- company name
- sector and industry
- issuer country
- market capitalization
- P/E ratio
- quoted price
- daily percentage change
- trading volume
The Actor supports screens built with Finviz filters such as sector, industry, country, valuation, growth, performance, liquidity, and technical criteria.
It also preserves Finviz sorting parameters, so a screen ordered by market cap or volume remains ordered the same way in the dataset.
Who is it for?
Quantitative researchers
Refresh candidate universes before factor calculations, backtests, or deeper enrichment.
Investors and analysts
Export filtered watchlists without copying tables into spreadsheets by hand.
Financial-data teams
Feed structured stock-screen results into warehouses, notebooks, and internal APIs.
Market researchers
Compare sectors, countries, industries, valuation bands, or performance cohorts over time.
AI and agent builders
Give an AI workflow a bounded set of relevant tickers with readable company context and source provenance.
Why use this Finviz scraper?
The useful unit is the filtered universe, not a single quote page.
A Finviz screen can represent a repeatable research rule such as:
- US technology companies sorted by market cap
- software stocks with high historical sales growth
- low-P/E companies with sufficient trading volume
- healthcare stocks matching a daily performance threshold
- country-specific stocks in a chosen industry
The Actor lets you save that rule as a URL and refresh it on a schedule.
Typed values remove common spreadsheet cleanup steps. Raw values remain available when exact source formatting matters.
How to scrape a Finviz stock screen
- Open the public Finviz screener.
- Choose filters, view, and sorting.
- Copy the resulting
https://finviz.com/screener.ashx?...URL. - Add the URL to Finviz screener URLs.
- Set a small
maxItemsvalue for your first run. - Run the Actor.
- Export the default dataset as JSON, CSV, Excel, XML, or RSS.
For a scheduled monitor, save the input as an Apify task and attach a schedule or webhook integration.
Input
The Actor accepts the following fields.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | yes | technology screen | Public Finviz screener URLs |
maxItems | integer | no | 100 | Global maximum records across all screens |
maxPagesPerUrl | integer | no | 20 | Pagination safety limit per screen |
Only HTTPS URLs on finviz.com or www.finviz.com with the /screener.ashx path are accepted.
Non-Finviz URLs, quote pages, news pages, and malformed URLs fail closed before extraction.
Small input example
{"startUrls": [{"url": "https://finviz.com/screener.ashx?v=111&f=sec_technology&o=-marketcap"}],"maxItems": 20,"maxPagesPerUrl": 2}
Multiple-screen example
{"startUrls": [{"url": "https://finviz.com/screener.ashx?v=111&f=fa_pe_u15,geo_usa&o=-marketcap"},{"url": "https://finviz.com/screener.ashx?v=111&f=fa_sales5years_o15,geo_usa&o=-volume"}],"maxItems": 500,"maxPagesPerUrl": 15}
Output data
Each dataset item represents one stock in one canonical input screen.
| Field | Type | Meaning |
|---|---|---|
rank | integer | Finviz result rank |
ticker | string | Stock ticker |
company | string | Company name |
sector | string | Finviz sector |
industry | string | Finviz industry |
country | string | Issuer country |
marketCap | number or null | Normalized market cap in USD |
marketCapRaw | string | Original display value |
peRatio | number or null | Normalized P/E ratio |
peRatioRaw | string | Original display value |
price | number or null | Normalized quoted price |
priceRaw | string | Original display value |
dailyChangePercent | number or null | Change in percentage points |
dailyChangeRaw | string | Original percentage text |
volume | number or null | Normalized trading volume |
volumeRaw | string | Original display value |
detailUrl | string | Absolute Finviz quote URL |
sourceUrl | string | Exact paginated page URL |
screenerUrl | string | Canonical screen without page offset |
scrapedAt | string | UTC extraction timestamp |
Output example
{"rank": 1,"ticker": "AAPL","company": "Apple Inc.","sector": "Technology","industry": "Consumer Electronics","country": "USA","marketCap": 3000000000000,"marketCapRaw": "3.00T","peRatio": 31.42,"peRatioRaw": "31.42","price": 210.15,"priceRaw": "210.15","dailyChangePercent": 0.82,"dailyChangeRaw": "0.82%","volume": 48100200,"volumeRaw": "48,100,200","detailUrl": "https://finviz.com/quote.ashx?t=AAPL","sourceUrl": "https://finviz.com/screener.ashx?v=111&f=sec_technology&o=-marketcap","screenerUrl": "https://finviz.com/screener.ashx?f=sec_technology&o=-marketcap&v=111","scrapedAt": "2026-07-23T12:00:00.000Z"}
Values in this example are illustrative. Market data changes continuously.
Pagination and limits
Finviz overview screens normally show 20 stocks per page.
The Actor advances the Finviz r result-offset parameter while rows continue to appear.
maxItems is global across all input URLs.
maxPagesPerUrl protects against unexpectedly large screens and malformed pagination behavior.
The same ticker can appear once per materially different canonical input screen. Duplicate pages within the same screen do not create duplicate ticker rows.
Numeric normalization
Market-cap suffixes are converted to USD magnitudes:
Kbecomes thousandsMbecomes millionsBbecomes billionsTbecomes trillions
Commas, percent signs, and currency symbols are removed from normalized numeric fields.
A dash or unavailable source value becomes null, while its companion Raw field keeps the source text.
This makes numeric filtering and aggregation easier without losing auditability.
How much does it cost to scrape Finviz stock screens?
The Actor uses pay-per-event pricing.
- A small start charge covers run initialization.
- A stock-record event is charged for each saved dataset row.
- Subscription tiers receive decreasing per-record prices.
The exact active prices are shown on the Actor page before every run.
Start with maxItems: 20 to verify your screen at low cost, then scale only after reviewing the output.
Residential proxy traffic and compute are included in the event pricing; you do not configure a separate proxy bill for ordinary Actor runs.
Scheduling a Finviz stock monitor
Create an Apify task with your stable screener URL.
Then choose a schedule appropriate for the workflow:
- before US market open
- after market close
- hourly during trading sessions
- weekly for broad universe reviews
Send the resulting dataset to a webhook, cloud function, spreadsheet workflow, or warehouse loader.
Use screenerUrl as the screen identity and ticker as the stock identity when comparing snapshots.
Integrations
Google Sheets
Use an Apify integration or automation platform to append each scheduled dataset to a dated worksheet.
Data warehouses
Load JSON or CSV exports into BigQuery, Snowflake, Redshift, or PostgreSQL for longitudinal analysis.
Slack and email alerts
Compare the current ticker set with the prior snapshot, then notify a channel when stocks enter or leave a screen.
AI enrichment
Pass the filtered ticker list to a news, filings, quote, or company-intelligence workflow instead of asking an AI model to discover the universe itself.
Webhooks
Trigger a downstream process when a run succeeds and use the run's default dataset URL to fetch records.
JavaScript API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/finviz-stock-screener-scraper').call({startUrls: [{ url: 'https://finviz.com/screener.ashx?v=111&f=sec_technology&o=-marketcap' }],maxItems: 100,maxPagesPerUrl: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python API example
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('automation-lab/finviz-stock-screener-scraper').call(run_input={'startUrls': [{'url': 'https://finviz.com/screener.ashx?v=111&f=sec_technology&o=-marketcap'}],'maxItems': 100,'maxPagesPerUrl': 5,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL API example
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~finviz-stock-screener-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls": [{"url": "https://finviz.com/screener.ashx?v=111&f=sec_technology&o=-marketcap"}],"maxItems": 100,"maxPagesPerUrl": 5}'
Poll the returned run ID or use an Apify client that waits for completion.
Use with Apify MCP
Connect AI clients to the Apify MCP server and expose this Actor as a tool.
Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/finviz-stock-screener-scraper"
Claude Desktop, Cursor, and VS Code
Use this MCP configuration in Claude Desktop, Cursor, or VS Code. Add authentication according to your client's current remote-MCP instructions.
{"mcpServers": {"apify-finviz-screener": {"url": "https://mcp.apify.com?tools=automation-lab/finviz-stock-screener-scraper"}}}
Example prompts:
- “Run my US technology Finviz screen and summarize the largest companies.”
- “Export the tickers and P/E ratios from this Finviz screener URL.”
- “Refresh these two screens and identify tickers appearing in both.”
- “Build a CSV of software stocks sorted by market capitalization.”
Tips for reliable runs
- Copy the final URL from the Finviz screener after filters are applied.
- Keep the
v=111overview view when you need all documented fields. - Test with 20 records before requesting a large universe.
- Preserve your preferred Finviz
osorting parameter. - Use separate input URLs for separate business rules.
- Schedule repeated screens rather than launching manual duplicate runs.
- Inspect raw fields when validating a source-format change.
The Actor manages residential proxy sessions automatically. A custom proxy field is intentionally not exposed because Finviz access depends on a controlled strategy.
Error handling
The Actor retries Cloudflare-style blocks with a rotated residential session.
It fails rather than returning a challenge page as market data.
A malformed or out-of-scope URL fails input processing.
If one of several screens fails, the Actor logs that screen and continues with the others.
If no screen can be parsed, the run exits non-zero so schedules and integrations can detect the failure.
A valid screen with naturally zero matching stocks is not treated as an extraction failure.
Limitations
- The source is public Finviz HTML, not an exchange-certified market-data feed.
- Prices, volume, and daily changes reflect the freshness shown by Finviz.
- The initial output contract targets the Finviz overview columns.
- Other Finviz views may contain extra columns that are not emitted yet.
- Finviz can change its layout or anti-bot controls without notice.
- The Actor does not provide investment advice or trading execution.
- Historical screen membership is available only if you schedule and retain snapshots.
For real-time trading decisions, verify values against a licensed market-data source.
Is scraping Finviz legal?
This Actor extracts publicly accessible screener pages without logging into a private account.
You are responsible for your use case, requested volume, data retention, and compliance with applicable laws, contracts, and Finviz terms.
Do not use the Actor to overload the source, evade access controls, redistribute data unlawfully, or make misleading financial claims.
Financial data may be licensed or delayed. Confirm downstream redistribution rights for your jurisdiction and product.
Troubleshooting
Why did my URL fail validation?
Confirm that it starts with https://finviz.com/screener.ashx or https://www.finviz.com/screener.ashx.
Quote URLs such as quote.ashx?t=AAPL belong to ticker-detail workflows and are intentionally rejected.
Why are some numeric fields null?
Finviz may display - or another unavailable value. Check the matching raw field to see the exact source text.
Why did I receive fewer rows than maxItems?
The filtered screen may contain fewer stocks, maxPagesPerUrl may be reached, or duplicate rows may have been removed.
Why did the run fail instead of returning an empty dataset?
The Actor distinguishes a real zero-result screen from an unparseable or challenged page. Extraction failures exit non-zero to protect automated pipelines.
Related Automation Lab actors
- Finviz Stock Quote & News Scraper for known ticker detail pages and related news
- Nasdaq Stock Screener Scraper for a comparable universe from Nasdaq public data
- TradingView Stock Screener for TradingView-based screening workflows
Choose this Actor when your selection rules already exist as a public Finviz screener URL.
FAQ
Does it support arbitrary Finviz filters?
Yes. The Actor preserves public query parameters supplied in each validated screener URL and controls only the pagination offset.
Can I scrape multiple screens in one run?
Yes. Add multiple entries to startUrls; maxItems remains a global cap.
Are normalized numbers guaranteed to be non-null?
No. Unavailable or unparseable display values become null, while the raw text is retained.
Does it require Finviz login credentials?
No. The supported scope is the public stock screener.
Does it scrape individual quote details or news?
It returns each quote URL, but detailed quote and news extraction belongs to the related Finviz quote/news Actor.
Can I export to Excel?
Yes. Open the default dataset and choose Excel, CSV, JSON, XML, or another supported Apify export format.
Can I run it every day?
Yes. Save the input as an Apify task and attach a schedule.
Is this investment advice?
No. It is a data-extraction tool. Validate data and make investment decisions independently.