# Finviz Stock Screener Scraper (`parseforge/finviz-scraper`) Actor

Scrapes Finviz stock screener results by ticker, signal, or any filter combination. Returns each stock as a flat row with price, valuation, fundamentals, technicals, and ownership data. Optional enrichment adds 70+ fields per ticker.

- **URL**: https://apify.com/parseforge/finviz-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Business
- **Stats:** 38 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $18.75 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

### Finviz Stock Screener Scraper

**Scrape Finviz stock screener results for any filter combination, up to a million rows per run.** Each stock comes with its price, valuation, fundamentals, technicals, and ownership data. No login or API key. Export to CSV, JSON, Excel, or XML.

Finviz's stock screener is the fastest way to scan the US market, but the website limits you to 20 rows per page and manual exports. This Actor reads the public screener directly, applies your filters, and returns every match in one flat dataset. You can screen by ticker, exchange, index, sector, industry, country, market cap, or any raw Finviz filter expression.

| Who uses it | What they scrape Finviz for |
|---|---|
| Quantitative analysts | Building a daily universe of stocks that meet strict fundamental and technical criteria |
| Retail traders | Finding stocks with unusual volume, insider buying, or earnings catalysts before the open |
| Financial data engineers | Feeding a clean, structured dataset of US equities into a pipeline or model |
| Portfolio managers | Screening for value, growth, or dividend candidates across the entire market |

### What it does

This Actor collects Finviz stock screener results for any filter combination and returns each stock as a flat row with price, valuation, fundamentals, technicals, and ownership data.

- 📊 **Computed signals:** apply Finviz built-in presets like Top Gainers, Oversold, or Recent Insider Buying in one click.
- 🔍 **Granular filters:** combine exchange, index, sector, industry, country, and market cap with raw Finviz expressions.
- 📈 **Full quote enrichment:** optionally fetch each ticker's dedicated quote page and merge 70+ extra fundamentals, technicals, ownership, and analyst fields.
- 🗂️ **Flexible output:** sort by any column, cap the number of rows, and export to CSV, JSON, Excel, or XML.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with Finviz data

**📈 Build a daily momentum watchlist.**

A retail trader runs the Actor each morning with the Top Gainers preset and Relative Volume sort to see which stocks are breaking out before the open.

**🔎 Screen for undervalued dividend payers.**

A portfolio manager filters for large-cap stocks with a dividend yield above 3% and a P/E below 15, then exports the list to CSV for further analysis.

**🧪 Backtest a quantitative strategy.**

A quant analyst pulls the full S\&P 500 with 70+ enriched fields every day and feeds the dataset into a backtesting engine to validate a factor model.

**📊 Monitor insider activity.**

A financial data engineer schedules the Actor to collect stocks with Recent Insider Buying and merges the results into a company-wide dashboard.

### Why choose this scraper

| | What you get |
|---|---|
| **No Finviz API key** | Reads the public screener directly, no registration or rate limits |
| **Full market coverage** | Scan all 11,000+ US-listed stocks, not the first page |
| **70+ fields per stock** | Price, valuation, fundamentals, technicals, ownership, and analyst data |
| **One-click presets** | Top Gainers, Oversold, Insider Buying, Earnings Tonight, and 30+ more |

### How it compares

This Actor competes directly with the two other Finviz scrapers on Apify. It offers the same core screener data but adds one-click signal presets, full market coverage, and optional per-ticker enrichment with 70+ extra fields.

| Feature | ParseForge | FinViz Stock Screener | Finviz Stock Screener - US Market Data API |
|---|---|---|---|
| One-click signal presets (Top Gainers, Oversold, Insider Buying, etc.) | Yes, 30+ built-in presets | Not listed | Not listed |
| Full market coverage (11,000+ stocks) | Yes, up to 1,000,000 rows per run | Not listed | Not listed |
| Optional enrichment with 70+ extra fields per ticker | Yes, fetches dedicated quote page | Not listed | Not listed |
| Raw Finviz filter expression support | Yes, custom raw filters field | Not listed | Not listed |
| Sort by any screener column | Yes, 40+ sort options | Not listed | Not listed |
| Export to CSV, JSON, Excel, XML | Yes | Not listed | Not listed |

### Configure the run

Drive the Actor from tickers, signal presets, and any combination of exchange, index, sector, industry, country, market cap, or raw Finviz filters. Filters run as the screener is read, so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
 "tickers": [
 "AAPL",
 "MSFT",
 "NVDA",
 "TSLA",
 "META"
 ],
 "maxItems": 10
}
```

A larger pull:

```json
{
 "tickers": [
 "AAPL",
 "MSFT",
 "NVDA",
 "TSLA",
 "META"
 ],
 "maxItems": 200
}
```

### Pricing

Pay-per-result: **$0.025 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $2.50 |
| 1,000 results | $25.00 |
| 10,000 results | $250.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [Finviz Stock Screener Scraper](https://apify.com/parseforge/finviz-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to Finviz through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/finviz-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Your filters may be too restrictive. Try removing some filters or using a broader signal preset. Also check that your tickers are valid US symbols and that the market cap bucket matches your expectations.

**The run is slow when I enable enrichment.**

Enrichment fetches one additional page per ticker, so a run with 500 tickers will take longer. Reduce the number of tickers or disable enrichment if you only need the screener columns.

**Some tickers are missing from the enriched output.**

Finviz may not have a dedicated quote page for every symbol, especially delisted or very new stocks. The Actor skips those and returns the basic screener data for the rest.

**My custom raw filter is not working.**

Make sure the expression is comma-separated and does not include the leading 'f='. For example, use 'fa\_pe\_low20,ta\_sma200\_pa' not 'f=fa\_pe\_low20,ta\_sma200\_pa'.

**The output has fewer rows than I expected.**

Check the 'Maximum stocks' setting. It defaults to 10, so if you want the full screen, set it to a higher number, up to 1,000,000.

### FAQ

| Question | Answer |
|---|---|
| Does this Actor require a Finviz API key? | No. It reads the public Finviz screener directly, so there is no registration, API key, or rate limit to manage. |
| How many stocks can I scrape in one run? | You can collect up to 1,000,000 stocks per run. The Finviz universe is about 11,000 US-listed stocks, so one run can cover the entire market. |
| Can I use my own Finviz screener URL? | This Actor does not accept a screener URL. Instead, you build the equivalent screen with the input fields: tickers, signal preset, exchange, index, sector, industry, country, market cap, and raw custom filters. |
| What is the difference between the basic and enriched output? | The basic output returns the screener's standard columns: ticker, company, sector, industry, country, market cap, price, volume, and key ratios. If you enable 'Enrich with full quote data', the Actor also fetches each ticker's dedicated Finviz quote page and merges 70+ additional fields, including detailed fundamentals, technicals, ownership, and analyst ratings. |
| Can I filter by technical indicators like RSI or moving averages? | Yes. Use the 'Custom raw filters' field to append any Finviz filter expression, such as ta\_rsi\_oversold or ta\_sma200\_pa. These are combined with the dropdown filters using AND logic. |
| How do I sort the results? | Use the 'Sort by' dropdown to choose from 40+ columns, including market cap, P/E, RSI, performance, volume, and more. Set the sort direction to ascending or descending. |
| Can I restrict the screen to a specific list of tickers? | Yes. Enter up to about 500 tickers in the 'Tickers' field. The Actor will only return those symbols, with all other filters still applied. |
| Does this Actor work for non-US stocks? | Finviz primarily covers US-listed stocks. You can filter by country of headquarters, but the screener universe is US exchanges (NYSE, NASDAQ, AMEX, CBOE). |
| What output formats are supported? | The Actor exports to CSV, JSON, Excel, and XML. You can also use the Apify API to get the data as JSON directly. |
| Is the data real-time? | Finviz screener data is delayed by up to 15 minutes during market hours. The Actor returns the latest available snapshot at the time of the run. |
| Can I schedule this Actor to run daily? | Yes. Use Apify's scheduler to run the Actor at any interval, such as every morning before market open, and store the results in a dataset or push them to a webhook. |

### Related actors

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by Finviz. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

## `tickers` (type: `array`):

Restrict the screen to a specific list of tickers. Up to ~500 symbols. Leave empty to scan the full 11,000+ universe with the filters below.

## `maxItems` (type: `integer`):

How many stocks to collect per run.

## `signal` (type: `string`):

Top gainers, latest insider buys, oversold, earnings tonight, etc. Apply a Finviz built-in scan in one click.

## `exchange` (type: `string`):

Stock exchange.

## `index` (type: `string`):

Only include constituents of a major index.

## `sector` (type: `string`):

GICS-style sector grouping.

## `industry` (type: `string`):

Specific industry. Use Stocks only / Stocks only ex-Funds to exclude ETFs.

## `country` (type: `string`):

Country of company headquarters.

## `marketCap` (type: `string`):

Market capitalization bucket.

## `customFilters` (type: `string`):

Advanced: raw Finviz filter expression to append, comma separated, without the leading f= (e.g. fa\_pe\_low20,ta\_sma200\_pa). Combined AND with the dropdowns above.

## `sortBy` (type: `string`):

Column used to order results.

## `sortDirection` (type: `string`):

Ascending or descending.

## `enrich` (type: `boolean`):

For each ticker, also fetch the dedicated Finviz quote page and merge 70+ extra fundamentals, technicals, ownership, and analyst fields. Adds one HTTP request per ticker.

## Actor input object example

```json
{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA",
    "TSLA",
    "META"
  ],
  "maxItems": 10,
  "signal": "",
  "exchange": "",
  "index": "",
  "sector": "",
  "industry": "",
  "country": "",
  "marketCap": "",
  "sortBy": "",
  "sortDirection": "desc",
  "enrich": true
}
```

# Actor output Schema

## `overview` (type: `string`):

Table view with the most-used fields across the dataset.

## `fullData` (type: `string`):

Complete dataset with every extracted field.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA",
        "TSLA",
        "META"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/finviz-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "tickers": [
        "AAPL",
        "MSFT",
        "NVDA",
        "TSLA",
        "META",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/finviz-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "tickers": [
    "AAPL",
    "MSFT",
    "NVDA",
    "TSLA",
    "META"
  ],
  "maxItems": 10
}' |
apify call parseforge/finviz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/finviz-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qyGz6HJ4uOqXNNTix/builds/pqmyQFmytM8JhalMS/openapi.json
