# Finviz Scraper - Stock Screener, Fundamentals & Insider Trading (`scrapesage/finviz-scraper`) Actor

Scrape Finviz: stock screener with 70+ fundamental & technical fields, full per-ticker fundamentals, analyst ratings, insider trading, news & sector/industry performance. Filter by any criteria or signal, monitor new insider buys & screener matches.

- **URL**: https://apify.com/scrapesage/finviz-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Lead generation, Agents, Integrations
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 screener stocks

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

## Finviz Scraper — Stock Screener, Fundamentals, Insider Trading & News

Extract everything that matters from **[Finviz](https://finviz.com)** in clean, structured JSON: the **stock screener** with **70+ fundamental and technical fields per stock**, full **per-ticker fundamentals** (80+ metrics, analyst ratings & price targets, insider trades, news), the **market-wide insider-trading feed**, the **news & blogs feed**, and **sector / industry / country performance**.

No login, no API key, no browser — fast, reliable, datacenter-friendly extraction. Filter the entire US market by any criteria, watch a signal, or monitor for **new insider buys and fresh screener matches**.

### Why this Finviz scraper?

Most Finviz scrapers grab a thin row — ticker, price, a couple of ratios. This actor reads the **custom screener view with every column enabled** and, per ticker, merges the full fundamentals snapshot, analyst ratings, insider transactions and news into one record — the **richest Finviz dataset on Apify**.

| Data | Thin scrapers | This actor |
|---|---|---|
| Screener: ticker, price, % change | ✅ | ✅ |
| Screener: **70+ fields** (valuation, growth, margins, performance, SMAs, RSI, short float, target price…) | ❌ | ✅ |
| Total matches + full pagination | partial | ✅ |
| Filter by signal (top gainers, unusual volume, insider buying…) | partial | ✅ |
| Per-ticker **fundamentals snapshot** (80+ metrics) | ❌ | ✅ |
| **Analyst ratings & price targets** | ❌ | ✅ |
| **Insider transactions** (per ticker + market-wide feed) | ❌ | ✅ |
| News with real publisher URLs | partial | ✅ |
| Company website, description, peers & ETF holders | ❌ | ✅ |
| Sector / industry / country **performance** | ❌ | ✅ |
| SEC Form 4 link on every insider trade | ❌ | ✅ |
| **Monitor mode** — only new insider buys / screener matches / news | ❌ | ✅ |

### Use cases

- **Stock screening at scale** — run any Finviz screen (your saved URL or structured filters) and export the full 70-field table for hundreds or thousands of matching stocks.
- **Insider-trading signals** — pull the latest insider buys/sales market-wide, or per ticker, with shares, value and a direct link to the SEC Form 4 filing. Monitor for **new insider buying** automatically.
- **Fundamental analysis** — get a complete fundamentals snapshot, analyst ratings and price targets for any watchlist of tickers in one run.
- **Quant & backtesting inputs** — clean numeric fields (market cap, P/E, growth, margins, performance, RSI, beta, SMAs) ready for a model or spreadsheet.
- **Market & sector dashboards** — sector / industry / country performance and the market news feed to power a dashboard or newsletter.
- **Alerting** — combine monitor mode with Apify Schedules to get notified the moment a stock enters your screen, an insider buys, or a rating changes.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Finviz Scraper**, choose a **mode** (Screener, Ticker fundamentals, Insider trading, News, or Group performance).
3. For the screener, either **paste a Finviz screener URL** (build it on [finviz.com/screener.ashx](https://finviz.com/screener.ashx)) or set the **filters / signal / sort** fields. For ticker mode, list your **symbols**.
4. Click **Start** and watch results stream into the dataset.
5. **Export** as JSON, CSV, Excel, XML or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "screener",
    "filters": ["cap_largeover", "sec_technology", "fa_pe_u30"],
    "order": "-marketcap",
    "maxResults": 100
}
```

Screen by pasting a URL instead:

```json
{ "mode": "screener", "screenerUrl": "https://finviz.com/screener.ashx?v=111&f=cap_largeover,fa_div_o3&s=ta_topgainers" }
```

Full fundamentals for a watchlist:

```json
{ "mode": "ticker", "tickers": ["AAPL", "MSFT", "NVDA", "TSLA"] }
```

Latest insider buys, only new ones each run:

```json
{ "mode": "insider", "insiderTab": "latestBuys", "monitorMode": true }
```

- **mode** — `screener`, `ticker`, `insider`, `news` or `groups`.
- **screenerUrl** — paste any Finviz screener URL; every filter & signal is honored (overrides the fields below).
- **filters** — raw Finviz filter codes (e.g. `cap_largeover`, `sec_technology`, `fa_pe_u30`, `fa_div_o3`, `sh_avgvol_o500`), combined with AND.
- **signal** — a Finviz signal preset (Top Gainers, Unusual Volume, Recent Insider Buying, New High…).
- **order** — sort code, e.g. `-marketcap`, `-change`, `pe`.
- **includeTickerDetails** — enrich every screened stock with the full fundamentals report (one extra request per stock).
- **tickers** — symbols for `ticker` mode.
- **insiderTab** — `latest`, `latestBuys`, `latestSales`, `topWeek`, `topOwnerWeek`.
- **groupType / groupView** — `sector` / `industry` / `country` / `capitalization`, viewed as `performance` / `valuation` / `overview`.
- **startUrls** — paste any Finviz URLs (screener, quote, insider, news, groups); each is auto-routed.
- **maxResults** — cap per run (0 = no limit).
- **monitorMode** — output only records not seen on previous runs (see below).
- **proxyConfiguration** — Apify proxy (datacenter recommended).

### Output

Each record carries a `recordType` so you can filter the dataset. A **screener stock** (`recordType: "screenerStock"`):

```json
{
    "recordType": "screenerStock",
    "ticker": "NVDA",
    "company": "NVIDIA Corp",
    "sector": "Technology",
    "industry": "Semiconductors",
    "country": "USA",
    "marketCap": 4951970000000,
    "peRatio": 31.34,
    "forwardPE": 28.1,
    "eps": 6.53,
    "dividendYield": 0.02,
    "roe": 91.87,
    "profitMargin": 52.41,
    "perfYtd": 18.4,
    "rsi": 54.2,
    "price": 204.63,
    "change": -1.12,
    "volume": 215430000,
    "targetPrice": 245.6,
    "tickerUrl": "https://finviz.com/quote.ashx?t=NVDA",
    "scrapedAt": "2026-06-17T16:00:00.000Z"
}
```

A **ticker report** (`recordType: "tickerReport"`) adds `website`, `description`, `marketCapClass`, `exchange`, a full `snapshot` object (80+ metrics), `ratings` (date, action, analyst, rating, price target), `insiderTrades` (with SEC Form 4 links), `news`, `peers` and `heldBy` (ETFs). An **insider transaction** (`recordType: "insiderTransaction"`) carries `ticker`, `insider`, `relationship`, `date`, `transaction`, `cost`, `shares`, `value`, `sharesTotal` and `secForm4Url`. A **news item** (`recordType: "newsItem"`) carries `time`, `title`, `source` and `url`. A **group row** (`recordType: "groupRow"`) carries `groupType`, `name` and performance/valuation metrics.

#### What to expect (field coverage)

Finviz publishes a field only when it has a value for that stock, so some columns are blank for some tickers (e.g. dividend yield for non-dividend payers, forward P/E for unprofitable companies). Nothing is dropped — every available field is included. Numeric cells are parsed to numbers (percent values as their numeric percent; `35.04B` → `35040000000`), so the dataset is sort- and filter-ready.

### Automate & schedule

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run the screener or insider feed every hour/day to capture changes.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (alert, CRM, database) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/finviz-scraper').call({
    mode: 'insider',
    insiderTab: 'latestBuys',
    monitorMode: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} new insider buys`);
```

#### Monitor mode vs. Schedules

**Monitor mode** remembers the records it has already returned (in a named key-value store) and outputs **only new ones** on the next run — new insider buys, fresh screener matches, or new articles. It is **complementary** to Apify **Schedules**: a Schedule decides *when* the actor runs; monitor mode decides *what* is new since last time. Use them together for hands-off alerting, or use monitor mode on its own and run it manually.

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new insider buys or screener hits into Slack, Sheets or your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get alerted when a monitored screen or insider feed changes.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "screen large-cap tech stocks with a P/E under 30 and list recent insider buys" and let it run the scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **market-data & financial-intelligence stack**:

- **[Yahoo Finance Scraper](https://apify.com/scrapesage/yahoo-finance-scraper)** — quotes, financial statements, analyst targets, holders, earnings & historical prices.
- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — US company filings, XBRL financials & insider ownership from official data.
- **[CoinGecko Crypto Scraper](https://apify.com/scrapesage/coingecko-crypto-scraper)** — full crypto market data, coins, exchanges, NFTs & trending.
- **[DeFiLlama Scraper](https://apify.com/scrapesage/defillama-scraper)** — DeFi protocol TVL, yields, fees & chain analytics.
- **[Prediction Markets Scraper](https://apify.com/scrapesage/prediction-markets-scraper)** — Polymarket & Kalshi odds, volume & arbitrage.
- **[FEC Campaign Finance Scraper](https://apify.com/scrapesage/fec-campaign-finance-scraper)** — political donors, committees & lobbying.
- **[Google Trends Scraper](https://apify.com/scrapesage/google-trends-scraper)** — search-demand intelligence and trending topics.

### Tips

- **Build your screen on Finviz first**, copy the URL, and paste it into `screenerUrl` — every filter and signal is preserved exactly.
- **Use `includeTickerDetails` sparingly** on big screens — it adds one request per stock. For a quick rich table, the 70 screener fields are usually enough.
- **For insider alerts**, set `mode: insider`, `insiderTab: latestBuys` and `monitorMode: true`, then add a daily [Schedule](https://docs.apify.com/platform/schedules).
- **Datacenter proxy** is fast and cheap for Finviz; no residential proxy needed.

### FAQ

**Do I need a Finviz Elite account or API key?** No. This actor reads Finviz's public pages — no login, key or Elite subscription required.

**How many stocks can the screener return?** As many as match your filter (the actor reports the total and paginates 20 per page). Use `maxResults` to cap a run.

**Can I use my own Finviz screener URL?** Yes — paste it into `screenerUrl`. The actor always requests the all-columns custom view so you get 70+ fields regardless of the view in your URL.

**Where do insider trades come from?** Finviz's insider-trading pages, sourced from SEC Form 4 filings — each record includes a direct link to the filing on SEC.gov.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**A field is empty — why?** Finviz only shows a metric when it applies (e.g. no dividend yield for a non-payer). Blanks mean the source has no value there — never that scraping failed.

**Is scraping Finviz legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws and Finviz's terms. This is not investment advice.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `mode` (type: `string`):

<b>Screener</b> = filter the whole US market (70+ fields per stock). <b>Ticker fundamentals</b> = full report per symbol (fundamentals + analyst ratings + insider trades + news). <b>Insider trading</b> = the market-wide insider transaction feed. <b>News</b> = the market news & blogs feed. <b>Group performance</b> = sector / industry / country / cap performance.

## `screenerUrl` (type: `string`):

Build a screen on <a href='https://finviz.com/screener.ashx'>finviz.com/screener.ashx</a>, copy the URL and paste it here — every filter & signal is honored. Overrides the filter fields below. Example: <code>https://finviz.com/screener.ashx?v=111\&f=cap\_largeover,sec\_technology,fa\_pe\_u30</code>

## `filters` (type: `array`):

Raw Finviz filter codes, combined with AND. Examples: <code>cap\_largeover</code> (large cap+), <code>sec\_technology</code> (sector), <code>fa\_pe\_u30</code> (P/E < 30), <code>fa\_div\_o3</code> (dividend > 3%), <code>sh\_avgvol\_o500</code> (avg volume > 500K), <code>geo\_usa</code>. See the Finviz screener filter bar for all codes.

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

A Finviz signal list — the 'what's moving' screens traders watch. Leave as None to use filters only.

## `order` (type: `string`):

Finviz sort code, e.g. <code>-marketcap</code> (largest first), <code>-change</code> (top % change), <code>-volume</code>, <code>pe</code> (lowest P/E first), <code>-dividendyield</code>. Prefix with <code>-</code> for descending.

## `tickersFilter` (type: `string`):

Optional comma-separated ticker list to restrict the screen to, e.g. <code>AAPL,MSFT,NVDA</code>.

## `includeTickerDetails` (type: `boolean`):

Open each screened stock's quote page to add the full fundamentals snapshot, analyst ratings, insider trades & news (one extra request per stock — slower, charged as a ticker report).

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

Stock symbols to pull full fundamentals for, e.g. <code>AAPL</code>, <code>MSFT</code>, <code>TSLA</code>. Used when mode = Ticker fundamentals.

## `insiderTab` (type: `string`):

Which insider-trading feed to pull. Used when mode = Insider trading.

## `includeBlogs` (type: `boolean`):

Include financial blog posts alongside news articles. Used when mode = News.

## `groupType` (type: `string`):

Which market grouping to report performance for. Used when mode = Group performance.

## `groupView` (type: `string`):

Performance (price changes), Valuation (P/E, P/S…) or Overview.

## `startUrls` (type: `array`):

Paste any Finviz URLs — screener, quote (<code>quote.ashx?t=AAPL</code>), insider, news or groups pages. Each is auto-routed to the right scraper. Used in addition to the mode above.

## `maxResults` (type: `integer`):

Maximum number of records to return for this run (0 = no limit). For the screener, results are fetched 20 per page.

## `monitorMode` (type: `boolean`):

Remember records seen on previous runs (in a named key-value store) and output only NEW ones — perfect for alerting on new insider buys, fresh screener matches or new articles. Combine with Apify <a href='https://docs.apify.com/platform/schedules'>Schedules</a> to poll automatically.

## `monitorStoreName` (type: `string`):

Name of the key-value store that holds the 'seen' fingerprints for monitor mode. Use different names to track different watchlists/screens independently.

## `proxyConfiguration` (type: `object`):

Finviz works on Apify's datacenter proxy. Datacenter is recommended (fast & cheap).

## Actor input object example

```json
{
  "mode": "screener",
  "filters": [
    "cap_largeover",
    "sec_technology"
  ],
  "signal": "",
  "includeTickerDetails": false,
  "tickers": [
    "AAPL",
    "MSFT"
  ],
  "insiderTab": "latest",
  "includeBlogs": true,
  "groupType": "sector",
  "groupView": "performance",
  "maxResults": 100,
  "monitorMode": false,
  "monitorStoreName": "finviz-monitor",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped Finviz records as JSON items in the default dataset.

# 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 = {
    "filters": [
        "cap_largeover",
        "sec_technology"
    ],
    "tickers": [
        "AAPL",
        "MSFT"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/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 = {
    "filters": [
        "cap_largeover",
        "sec_technology",
    ],
    "tickers": [
        "AAPL",
        "MSFT",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/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 '{
  "filters": [
    "cap_largeover",
    "sec_technology"
  ],
  "tickers": [
    "AAPL",
    "MSFT"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/finviz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/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/ol8sOTX2wa688Flnc/builds/VnP6kagA5Mg6kvQNj/openapi.json
