Finviz Stock Screener Scraper avatar

Finviz Stock Screener Scraper

Pricing

Pay per event

Go to Apify Store
Finviz Stock Screener Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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

  1. Open the public Finviz screener.
  2. Choose filters, view, and sorting.
  3. Copy the resulting https://finviz.com/screener.ashx?... URL.
  4. Add the URL to Finviz screener URLs.
  5. Set a small maxItems value for your first run.
  6. Run the Actor.
  7. 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.

FieldTypeRequiredDefaultDescription
startUrlsarrayyestechnology screenPublic Finviz screener URLs
maxItemsintegerno100Global maximum records across all screens
maxPagesPerUrlintegerno20Pagination 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.

FieldTypeMeaning
rankintegerFinviz result rank
tickerstringStock ticker
companystringCompany name
sectorstringFinviz sector
industrystringFinviz industry
countrystringIssuer country
marketCapnumber or nullNormalized market cap in USD
marketCapRawstringOriginal display value
peRationumber or nullNormalized P/E ratio
peRatioRawstringOriginal display value
pricenumber or nullNormalized quoted price
priceRawstringOriginal display value
dailyChangePercentnumber or nullChange in percentage points
dailyChangeRawstringOriginal percentage text
volumenumber or nullNormalized trading volume
volumeRawstringOriginal display value
detailUrlstringAbsolute Finviz quote URL
sourceUrlstringExact paginated page URL
screenerUrlstringCanonical screen without page offset
scrapedAtstringUTC 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:

  • K becomes thousands
  • M becomes millions
  • B becomes billions
  • T becomes 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 os
from apify_client import ApifyClient
client = 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().items
print(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=111 overview view when you need all documented fields.
  • Test with 20 records before requesting a large universe.
  • Preserve your preferred Finviz o sorting 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.

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.

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.