# US Stock Screener — Finviz Alternative (`khadinakbar/finviz-alternative-stock-screener`) Actor

Screen US stocks by sector, price, market cap, volume, P/E, RSI, and daily change. Export one record per equity with market metrics, source URLs, and retrieval times for research, spreadsheets, or dashboards.

- **URL**: https://apify.com/khadinakbar/finviz-alternative-stock-screener.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 screened stocks

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?

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

## US Stock Screener — Finviz Alternative

Screen US stocks by sector, price, market cap, volume, P/E, RSI, and daily change. Export one record per equity with market metrics, source URLs, and retrieval times for research, spreadsheets, or dashboards. For market researchers, each dataset row represents one equity that matched the selected screen.

### Workflow: put the results to work

Choose a screening preset or set your own valuation, liquidity, and technical filters. Export the matching symbols with their retrieval times, then investigate selected equities in your market-research workflow. A screen is a current data selection, not an investment recommendation.

### Best fit for this Actor

- You need a programmatic US stock screen with a defined result cap and one JSON record per symbol.
- You want source URLs, retrieved-at timestamps, valuation fields, and a technical snapshot in the same dataset.
- You need a bounded batch for API or Apify MCP use, then want to pass selected tickers to the related Google Finance stock and news workflow for ticker-level news and quote details.

This Actor is designed for bounded US-equity discovery and export. Pair it with a licensed market-data, charting, portfolio, or brokerage product when your workflow calls for those specialized capabilities.

### How this workflow compares with Finviz

This is a focused alternative for the **programmatic export step**: filter a US-equity universe and receive structured rows with price, volume, market cap, P/E, RSI, moving averages, sector, industry, source URL, and retrieval time. Finviz remains the broader choice when you need its interactive dashboard, charts, saved screens, backtests, alerts, extended market views, or other product features outside this Actor's read-only JSON contract.

| Decision | This Actor | Finviz | Best fit |
|---|---|---|---|
| Scope | Bounded US-equity screen exported as JSON | Broader market-research product | Use this Actor for a data step; use Finviz for its dashboard workflow. |
| Billing | Pay per event plus platform usage; see the Pricing tab for current rates. | Subscription product with broader product access | Use event billing for a bounded programmatic run; evaluate Finviz for recurring suite use. |
| Same-job input | JSON filters, sort, and a 1–100 result cap | Interactive filters and views | Choose the interface that fits the operator's workflow. |
| Output | Typed dataset rows with explicit nulls, source URLs, and terminal outcomes | Rich interactive views and exports | Choose JSON for downstream automation; choose the dashboard for visual research. |
| Automation | API-run input and dataset readback | Broader product features remain outside this Actor's scope | Use this Actor when the output must enter an Apify data workflow. |

Finviz is a trademark of its owner. This independent Actor is not affiliated, associated, or endorsed by Finviz.

### Practical scenario: a large-cap semiconductor screen

Review the Pricing tab for current event rates. Total run cost includes the events actually charged and Apify platform usage; any separately billed provider access is described in the input and data-access guidance.

### Quick start input

```json
{
  "screenPreset": "large_cap",
  "industries": ["Semiconductors"],
  "minMarketCapUsd": 10000000000,
  "minVolume": 1000000,
  "sortBy": "market_cap",
  "sortOrder": "desc",
  "maxResults": 25
}
```

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `screenPreset` | enum | Broad market, movers, activity, large-cap, value, growth-technology, or RSI starting screen. |
| `sectors`, `industries` | string arrays | Exact source scanner labels to include; use values observed in prior output. |
| numeric `min*` / `max*` filters | numbers | Market cap, price, change, volume, RSI (14), and trailing P/E bounds. |
| `sortBy`, `sortOrder` | enums | One supported field and direction used before the result limit. |
| `maxResults` | integer | 1–100 validated rows; this is the billable event cap. |

### What data you receive

Each dataset item is one US-listed equity from the returned market scanner snapshot. Missing source fields stay `null`; the Actor does not invent values.

```json
{
  "symbol": "NVDA",
  "exchange": "NASDAQ",
  "companyName": "NVIDIA Corporation",
  "priceUsd": 230.36,
  "marketCapUsd": 5551676014709,
  "sector": "Electronic Technology",
  "industry": "Semiconductors",
  "peRatioTtm": 29.12,
  "rsi14": 60.39,
  "source": "tradingview-public-scanner",
  "sourceUrl": "https://www.tradingview.com/symbols/NVDA/",
  "retrievedAt": "2026-09-07T12:15:00.000Z"
}
```

The `overview`, `valuation`, and `technical` dataset views keep the Console preview useful without changing the underlying record contract.

### Use through the API

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/finviz-alternative-stock-screener').call({
  screenPreset: 'large_cap',
  minMarketCapUsd: 10000000000,
  maxResults: 25
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Use with AI agents through Apify MCP

Review the Pricing tab for current event rates. Total run cost includes the events actually charged and Apify platform usage; any separately billed provider access is described in the input and data-access guidance.

Use the current Apify MCP setup flow for your chosen client, then inspect the `OUTPUT` record and dataset after the run. The output names the completed outcome, records the returned item count, and gives a practical next action for source availability, a zero-match screen, or input adjustments.

### Best results

- Start with a 10–25 row screen to confirm the exact industry labels and field availability you need.
- Use `overview` for a concise result table, `valuation` for P/E and book-value work, or `technical` for RSI and moving-average fields.
- Treat the data as a time-stamped market snapshot. Exchange timing, source availability, and coverage can vary by symbol and market session.

### Builder's note

I designed the Actor around one bounded scanner call rather than a browser-table workflow. That keeps the input-to-output contract narrow, makes record-level billing auditable, and makes source availability visible in the terminal output.

### Responsible use

This Actor is read-only and intended for public or authorized market-research workflows. It is not investment advice. Verify market data and any investment decision through your own licensed sources and process.

### Pricing and run costs

This Actor uses **Pay per event plus Apify platform usage**. The [Pricing tab](https://apify.com/khadinakbar/finviz-alternative-stock-screener/pricing) lists the current event rates and billing terms.

| Event | Billing unit | When it applies |
|---|---|---|
| `apify-actor-start` | Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). |
| `stock-screened` | Screened stock | Charged once for each validated US equity row persisted to the dataset. |

Run cost combines the charged events and Apify platform usage. Review the run charge limit and requested result count before starting.

### Connect an AI agent

Use the [Apify MCP configurator](https://mcp.apify.com) to choose an available client connection. Inspect this Actor’s current input schema and required credentials before running it.

#### Example agent request

> Screen US stocks by sector, price, market cap, volume, P/E, RSI, and daily change. Use the inputs I supply, confirm the result limit, and return the available results with their source context and any partial or missing-data outcome.

# Actor input Schema

## `screenPreset` (type: `string`):

Starting US-equity screen applied before your numeric filters. Choose large\_cap for a stable broad screen, or a named momentum, value, activity, or RSI preset. Defaults to large\_cap. This is not a saved Finviz URL or an investment recommendation.

## `sectors` (type: `array`):

Optional scanner-sector names to include, such as Electronic Technology. The names must match the source scanner's displayed sector vocabulary. Leave empty to include every sector. This is not an exchange or a free-text company search.

## `industries` (type: `array`):

Optional scanner-industry names to include, such as Semiconductors. Use exact industry labels returned by a prior run for dependable matching. Leave empty to include every industry. This is not a ticker list.

## `minMarketCapUsd` (type: `number`):

Optional minimum market capitalization in US dollars, such as 10000000000 for ten billion. The bound is applied to the live scanner result before sorting. Leave empty for no lower bound. This is not a share price.

## `maxMarketCapUsd` (type: `number`):

Optional maximum market capitalization in US dollars, such as 50000000000 for fifty billion. It must be greater than or equal to the minimum market cap. Leave empty for no upper bound. This is not a result limit.

## `minPriceUsd` (type: `number`):

Optional minimum quoted price in US dollars, such as 20. The source may show delayed exchange data depending on the symbol and market session. Leave empty for no lower bound. This is not a market-cap filter.

## `maxPriceUsd` (type: `number`):

Optional maximum quoted price in US dollars, such as 500. It must be greater than or equal to the minimum price. Leave empty for no upper bound. This is not a target-price forecast.

## `minChangePercent` (type: `number`):

Optional minimum percentage price change for the scanner snapshot, such as 2 for two percent. Negative values are allowed for screens that include declines. Leave empty for no lower bound. This is not historical performance.

## `maxChangePercent` (type: `number`):

Optional maximum percentage price change for the scanner snapshot, such as 10. It must be greater than or equal to the minimum change. Leave empty for no upper bound. This is not a stop-loss setting.

## `minVolume` (type: `number`):

Optional minimum trading volume from the scanner snapshot, such as 1000000. Use it to remove thinly traded symbols from a screen. Leave empty for no volume floor. This is not average daily volume.

## `minRsi14` (type: `number`):

Optional minimum RSI value on the source's 14-period indicator, such as 50. Valid values are normally between zero and one hundred. Leave empty for no lower bound. This is not an investment signal.

## `maxRsi14` (type: `number`):

Optional maximum RSI value on the source's 14-period indicator, such as 70. It must be greater than or equal to the minimum RSI. Leave empty for no upper bound. This is not a backtest parameter.

## `minPeRatio` (type: `number`):

Optional minimum trailing price-to-earnings ratio, such as 1. The source provides this only when the metric is available for a symbol. Leave empty for no lower bound. This is not forward P/E.

## `maxPeRatio` (type: `number`):

Optional maximum trailing price-to-earnings ratio, such as 25. It must be greater than or equal to the minimum P/E. Leave empty for no upper bound. This is not a valuation recommendation.

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

Metric used to order results before the result cap, such as market\_cap or volume. Choose recommendation only when you want the source's aggregate technical score ordering. Defaults to market\_cap. This is not a user-defined formula.

## `sortOrder` (type: `string`):

Direction used for the selected sort metric. Use desc for the largest values first or asc for the smallest values first. Defaults to desc. This is not a market-direction prediction.

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

Maximum validated stock rows to write, from 1 to 100. Each persisted row is one billable stock-screened event at $0.005, plus Apify platform usage. Defaults to 25 for a bounded first run. This is not the total number of matching stocks.

## Actor input object example

```json
{
  "screenPreset": "large_cap",
  "sectors": [
    "Electronic Technology"
  ],
  "industries": [
    "Semiconductors"
  ],
  "minMarketCapUsd": 10000000000,
  "maxMarketCapUsd": 50000000000,
  "minPriceUsd": 20,
  "maxPriceUsd": 500,
  "minChangePercent": 2,
  "maxChangePercent": 10,
  "minVolume": 1000000,
  "minRsi14": 50,
  "maxRsi14": 70,
  "minPeRatio": 1,
  "maxPeRatio": 25,
  "sortBy": "market_cap",
  "sortOrder": "desc",
  "maxResults": 25
}
```

# Actor output Schema

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

One typed, source-linked row per screened US equity.

## `summary` (type: `string`):

OUTPUT record containing terminal outcome, result count, charge counts, and warnings.

## `runSummary` (type: `string`):

RUN\_SUMMARY record containing provider attempts, latency, output count, and terminal outcome.

# 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 = {
    "screenPreset": "large_cap",
    "sectors": [
        "Electronic Technology"
    ],
    "industries": [
        "Semiconductors"
    ],
    "minMarketCapUsd": 10000000000,
    "minPriceUsd": 20,
    "minChangePercent": 0,
    "minVolume": 1000000,
    "minRsi14": 40,
    "maxRsi14": 70,
    "minPeRatio": 1,
    "maxPeRatio": 25,
    "sortBy": "market_cap",
    "sortOrder": "desc",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/finviz-alternative-stock-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 = {
    "screenPreset": "large_cap",
    "sectors": ["Electronic Technology"],
    "industries": ["Semiconductors"],
    "minMarketCapUsd": 10000000000,
    "minPriceUsd": 20,
    "minChangePercent": 0,
    "minVolume": 1000000,
    "minRsi14": 40,
    "maxRsi14": 70,
    "minPeRatio": 1,
    "maxPeRatio": 25,
    "sortBy": "market_cap",
    "sortOrder": "desc",
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/finviz-alternative-stock-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 '{
  "screenPreset": "large_cap",
  "sectors": [
    "Electronic Technology"
  ],
  "industries": [
    "Semiconductors"
  ],
  "minMarketCapUsd": 10000000000,
  "minPriceUsd": 20,
  "minChangePercent": 0,
  "minVolume": 1000000,
  "minRsi14": 40,
  "maxRsi14": 70,
  "minPeRatio": 1,
  "maxPeRatio": 25,
  "sortBy": "market_cap",
  "sortOrder": "desc",
  "maxResults": 25
}' |
apify call khadinakbar/finviz-alternative-stock-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/finviz-alternative-stock-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/Y2AwSagHWtHcrbcDV/builds/Y2HzPHLrga3LWnWdE/openapi.json
