# Finviz Stock Screener Scraper - Any Filters, Any View (`aolmo/finviz-screener`) Actor

Results of any Finviz stock screener by URL, without login: every filter, order and view (Overview, Valuation, Financial, Ownership, Performance, Technical, Custom), paginated automatically with numbers normalised. Scheduled runs flag the stocks that enter the screen. $0.0005 per stock.

- **URL**: https://apify.com/aolmo/finviz-screener.md
- **Developed by:** [Antonio del Olmo Tena](https://apify.com/aolmo) (community)
- **Categories:** Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 stock scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Export any Finviz stock screener to JSON, CSV or Excel. Build the screen on finviz.com with the filters, order and view you want, copy the URL and the Actor reads every page and returns one row per stock with the columns of that view (Overview, Valuation, Financial, Ownership, Performance, Technical or Custom), with numbers normalised so that 5.08T, 1.21% and 1,234,567 become plain numbers. Schedule it and stocks that enter the screen since the previous run are flagged. Watchlists, quantitative research, backtesting universes, dividend and value screens, breakout alerts and portfolio dashboards at $0.0005 per stock.

### What you get

**Stock** (one row each): `ticker`, `url` (Finviz quote page), `company`, `sector`, `industry`, `country`, `marketCap`, `pe`, `price`, `changePercent`, `volume`, `position`, and `values`, an object with every column of the chosen view by its label (P/S, P/B, EPS, Dividend %, ROE, Debt/Eq, Perf Week, RSI, 52W High...).

**Screener** on every row: `screener` (the URL you gave), `view` and `totalCount` (stocks the screener reports).

**Changes** on scheduled runs: `isNew` is true for stocks that were not in the screener in the previous run of the same URL.

Screens without results return nothing and are not charged.

### How to use it

1. Open the Finviz screener, set filters, order and view, and copy the URL, for example `https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap`.
2. Open the **Input** tab and paste the URLs, one per line (up to 50 per run). Views: `v=111` Overview, `121` Valuation, `161` Financial, `171` Ownership, `141` Performance, `131` Technical, `152` Custom (with your column set in `c=`).
3. Set **Max stocks per screener** (20 per page, up to 1,000).
4. Click **Start** and export the rows.
5. Schedule the Actor to get an alert when a stock enters your screen.

### Input

```json
{
  "screenerUrls": [
    "https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap",
    "https://finviz.com/screener.ashx?v=121&f=cap_midover,fa_pe_u15&o=pe"
  ],
  "maxRows": 200
}
```

### Output

```json
{
  "screener": "https://finviz.com/screener?v=111&f=cap_largeover%2Csec_technology&o=-marketcap",
  "view": "Overview",
  "totalCount": 925,
  "position": 3,
  "ticker": "AAPL",
  "url": "https://finviz.com/quote.ashx?t=AAPL",
  "company": "Apple Inc",
  "sector": "Technology",
  "industry": "Consumer Electronics",
  "country": "USA",
  "marketCap": 5078410000000,
  "pe": 39.89,
  "price": 347.98,
  "changePercent": 1.21,
  "volume": 107074,
  "values": {
    "Ticker": "AAPL",
    "Company": "Apple Inc",
    "Sector": "Technology",
    "Industry": "Consumer Electronics",
    "Country": "USA",
    "Market Cap": 5078410000000,
    "P/E": 39.89,
    "Price": 347.98,
    "Change %": 1.21,
    "Volume": 107074
  },
  "isNew": false,
  "timestamp": "2026-10-29T10:00:00.000Z"
}
```

### Pricing

Pay per event: **$0.0005 per stock** and **$0.001 per stock entering the screen** on a scheduled run. Empty screens are free. A 925-stock screen costs $0.46.

### Limits and notes

- Only the free Finviz screener is read; Elite-only filters, intraday data and export features are not available.
- Prices and volumes are the delayed figures Finviz shows to visitors.
- `marketCap`, `pe`, `price`, `changePercent` and `volume` are filled when the view includes those columns (Overview does); every other column is in `values`.
- Large screens need one request per 20 stocks; 1,000 stocks take about a minute.

### Related Actors

- **Yahoo Finance**: live quotes and price history of the tickers you find here.
- **News Article Scraper**: the news behind a move.
- **RSS Feed Monitor**: company press releases.

# Actor input Schema

## `screenerUrls` (type: `array`):

One per line, copied from finviz.com after setting filters, order and view: https://finviz.com/screener.ashx?v=111\&f=cap_largeover,sec_technology\&o=-marketcap. v=111 Overview, 121 Valuation, 161 Financial, 171 Ownership, 141 Performance, 131 Technical, 152 Custom. Up to 50 per run.

## `maxRows` (type: `integer`):

Finviz shows 20 stocks per page; the Actor follows the pages until this number.

## `product` (type: `string`):

Internal. Leave as is.

## Actor input object example

```json
{
  "screenerUrls": [
    "https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap",
    "https://finviz.com/screener.ashx?v=121&f=cap_midover,fa_pe_u15&o=pe"
  ],
  "maxRows": 200,
  "product": "finviz-screener"
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset items: url, changed, events, data, timestamp and error (when the target failed).

# 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 = {
    "screenerUrls": [
        "https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap",
        "https://finviz.com/screener.ashx?v=121&f=cap_midover,fa_pe_u15&o=pe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aolmo/finviz-screener").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 = { "screenerUrls": [
        "https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap",
        "https://finviz.com/screener.ashx?v=121&f=cap_midover,fa_pe_u15&o=pe",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("aolmo/finviz-screener").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 '{
  "screenerUrls": [
    "https://finviz.com/screener.ashx?v=111&f=cap_largeover,sec_technology&o=-marketcap",
    "https://finviz.com/screener.ashx?v=121&f=cap_midover,fa_pe_u15&o=pe"
  ]
}' |
apify call aolmo/finviz-screener --silent --output-dataset

```

## MCP server setup

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

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/od9q1HbM5JCkMMKFv/builds/nloArn0LMcBEeNmTr/openapi.json
