# TradingView Stock Screener — Multi-Market Scanner (`leorochasantos/tradingview-screener`) Actor

Screen stocks, crypto, forex across 24 global markets via the TradingView Scanner API. Pick a market, choose columns (price, technicals, fundamentals, performance), and get flat typed JSON. Every field named and documented. Built for LLM/MCP, quant pipelines, and finance dashboards.

- **URL**: https://apify.com/leorochasantos/tradingview-screener.md
- **Developed by:** [Leonardo Santos](https://apify.com/leorochasantos) (community)
- **Categories:** Automation, Developer tools, Business
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.39 / 1,000 stock results

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/platform/actors/running/actors-in-store#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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## TradingView Stock Screener — Multi-Market Scanner

Screen stocks, crypto, forex, and more across 24 global markets via the TradingView Scanner API. Choose a market, pick your columns (price, technicals, fundamentals, performance), add optional filters and sorting, and receive flat, typed JSON — every field named and documented. Built for LLM/MCP consumers, quant pipelines, and finance dashboards. Pure HTTP, no auth, no rate limits. 256MB, seconds per run.

### Why this actor?

- **Typed flat schema** — the raw TradingView API returns positional arrays (`[326.59, 53468000]`). We map every column to a named, typed JSON field (`{"close": 326.59, "volume": 53468000}`). Ready for LLM/MCP consumption.
- **24 markets, 49+ columns** — US stocks, crypto, forex, Brazil, India, UK, Germany, Japan, and 16 more. Price, technicals (RSI, MACD, Bollinger), fundamentals (PE, EPS, market cap), performance, extended hours, analyst ratings.
- **Filters + sort + pagination** — the full TradingView screener grammar: filter by market cap, sector, exchange; sort by any column; paginate large scans.
- **256MB, seconds per run** — lightweight HTTP-only design. Competitors run at 2048–4096MB for the same free API.
- **Error items are free** — invalid markets, empty results, and upstream errors produce typed error items without charge.

### Input

```json
{
  "market": "america",
  "columns": ["name", "close", "volume", "change", "market_cap_basic", "sector"],
  "tickers": ["NASDAQ:AAPL", "NYSE:IBM"],
  "sort": {"sortBy": "volume", "sortOrder": "desc"},
  "range": [0, 10]
}
````

All parameters (markets, columns, filters, sort, range, maxItems) documented in the input schema. See the Console UI for guided input with autocomplete.

### Output

One item per stock returned by the scanner:

```json
{
  "type": "stock",
  "symbol": "NASDAQ:AAPL",
  "market": "america",
  "name": "APPLE INC",
  "close": 326.59,
  "volume": 53468000,
  "changePct": 1.23,
  "marketCap": 3200000000000,
  "sector": "Technology Services",
  "error": null,
  "scraped_at": "2026-07-21T01:00:00.000Z"
}
```

Only the columns you request appear in the output. Recognised columns get typed, friendly field names
(`close`, `changePct`, `marketCap`, `rsi`, …); any other column you request comes back verbatim under its
TradingView name, so the full screener vocabulary is available. Error items have `type: "error"` with an
`error` message.

**Note on price change:** TradingView's `change` column is the **percent** move and `change_abs` is the
absolute one. The output follows the names rather than the upstream quirk — request `change` to get
`changePct`, request `change_abs` to get `change`.

### Pricing

Pay per result: **$0.50 per 1,000 results**. Error items are always free. No monthly fees, no API keys to manage.

### Use cases

- **LLM agents and MCP servers** — typed, predictable JSON output for tool-calling and function integration. Every field named and documented.
- **Quantitative pipelines** — pull technical indicators (RSI, MACD, Bollinger Bands), fundamentals, and performance metrics across markets.
- **Finance dashboards** — scheduled market scans, sector watchlists, and stock screener output into spreadsheets or BI tools.
- **Multi-market research** — compare stocks across US, Europe, Asia, and emerging markets from a single API.

### FAQ

**Do I need a TradingView account or API key?** No. The Scanner API is public, no auth required. The same endpoint powers TradingView's own web screener.

**Is there rate limiting?** We observed zero rate limits during testing (30/30 burst from a single IP, 0 429s). The endpoint is unusually open for a financial data API.

**What markets are available?** 24 markets: america (19K stocks), crypto (59K pairs), germany, uk, canada, india, china, forex, japan, korea, france, mexico, hongkong, taiwan, brazil, australia, italy, sweden, indonesia, netherlands, turkey, singapore, russia, spain.

**How do I know which columns to request?** The input schema has presets for common groups (price, technicals, fundamentals, performance, extended hours). You can also use any column name from TradingView's screener.

**What happens if a ticker doesn't exist?** TradingView returns an empty result set (HTTP 200, `totalCount: 0`) — no error. Invalid markets return a typed error item.

***

*This Actor is an independent tool. Not affiliated with TradingView.*

# Actor input Schema

## `market` (type: `string`):

TradingView market slug. 24 markets available: america (19K stocks), crypto (59K pairs), germany, uk, canada, india, china, forex, japan, korea, france, mexico, hongkong, taiwan, brazil, australia, italy, sweden, indonesia, netherlands, turkey, singapore, russia, spain.

## `columns` (type: `array`):

TradingView column names to request and return as named JSON fields. Recognised columns get typed, friendly field names (close, changePct, marketCap...); any other column you request is returned verbatim under its TradingView name.

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

Specific tickers to query (e.g. "NASDAQ:AAPL", "NYSE:IBM"). Leave empty for a full market scan.

## `filter` (type: `array`):

TradingView screener filter clauses. Each is {left: column, operation: string, right: value}. Example: \[{"left":"market\_cap\_basic","operation":"greater","right":1000000000000}]

## `sort` (type: `object`):

Sort specification. Example: {"sortBy": "volume", "sortOrder": "desc"}

## `range` (type: `array`):

Pagination range as \[offset, count]. Defaults to \[0, maxItems]. Set it explicitly only to page past an offset; count is capped at 200.

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

Maximum number of stock results to return. Default 100. Also sets the upstream scan size unless you pin "range" explicitly.

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

Proxy to use for outgoing requests.

## Actor input object example

```json
{
  "market": "america",
  "columns": [
    "name",
    "close",
    "volume",
    "change",
    "market_cap_basic",
    "sector"
  ],
  "tickers": [
    "NASDAQ:AAPL"
  ],
  "range": [
    0,
    100
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "columns": [
        "name",
        "close",
        "volume",
        "change",
        "market_cap_basic",
        "sector"
    ],
    "tickers": [
        "NASDAQ:AAPL"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leorochasantos/tradingview-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 = {
    "columns": [
        "name",
        "close",
        "volume",
        "change",
        "market_cap_basic",
        "sector",
    ],
    "tickers": ["NASDAQ:AAPL"],
}

# Run the Actor and wait for it to finish
run = client.actor("leorochasantos/tradingview-screener").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "columns": [
    "name",
    "close",
    "volume",
    "change",
    "market_cap_basic",
    "sector"
  ],
  "tickers": [
    "NASDAQ:AAPL"
  ]
}' |
apify call leorochasantos/tradingview-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=leorochasantos/tradingview-screener",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TradingView Stock Screener — Multi-Market Scanner",
        "description": "Screen stocks, crypto, forex across 24 global markets via the TradingView Scanner API. Pick a market, choose columns (price, technicals, fundamentals, performance), and get flat typed JSON. Every field named and documented. Built for LLM/MCP, quant pipelines, and finance dashboards.",
        "version": "0.1",
        "x-build-id": "PbqLrLJ9ZHCZ2fZSM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/leorochasantos~tradingview-screener/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-leorochasantos-tradingview-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/leorochasantos~tradingview-screener/runs": {
            "post": {
                "operationId": "runs-sync-leorochasantos-tradingview-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/leorochasantos~tradingview-screener/run-sync": {
            "post": {
                "operationId": "run-sync-leorochasantos-tradingview-screener",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "market",
                    "columns"
                ],
                "properties": {
                    "market": {
                        "title": "Market",
                        "enum": [
                            "america",
                            "crypto",
                            "germany",
                            "uk",
                            "canada",
                            "india",
                            "china",
                            "forex",
                            "japan",
                            "korea",
                            "france",
                            "mexico",
                            "hongkong",
                            "taiwan",
                            "brazil",
                            "australia",
                            "italy",
                            "sweden",
                            "indonesia",
                            "netherlands",
                            "turkey",
                            "singapore",
                            "russia",
                            "spain",
                            "saudiarabia",
                            "southafrica"
                        ],
                        "type": "string",
                        "description": "TradingView market slug. 24 markets available: america (19K stocks), crypto (59K pairs), germany, uk, canada, india, china, forex, japan, korea, france, mexico, hongkong, taiwan, brazil, australia, italy, sweden, indonesia, netherlands, turkey, singapore, russia, spain.",
                        "default": "america"
                    },
                    "columns": {
                        "title": "Columns",
                        "type": "array",
                        "description": "TradingView column names to request and return as named JSON fields. Recognised columns get typed, friendly field names (close, changePct, marketCap...); any other column you request is returned verbatim under its TradingView name.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "tickers": {
                        "title": "Tickers (optional)",
                        "type": "array",
                        "description": "Specific tickers to query (e.g. \"NASDAQ:AAPL\", \"NYSE:IBM\"). Leave empty for a full market scan.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "filter": {
                        "title": "Filters (optional)",
                        "type": "array",
                        "description": "TradingView screener filter clauses. Each is {left: column, operation: string, right: value}. Example: [{\"left\":\"market_cap_basic\",\"operation\":\"greater\",\"right\":1000000000000}]"
                    },
                    "sort": {
                        "title": "Sort (optional)",
                        "type": "object",
                        "description": "Sort specification. Example: {\"sortBy\": \"volume\", \"sortOrder\": \"desc\"}"
                    },
                    "range": {
                        "title": "Range (pagination)",
                        "type": "array",
                        "description": "Pagination range as [offset, count]. Defaults to [0, maxItems]. Set it explicitly only to page past an offset; count is capped at 200.",
                        "default": [
                            0,
                            100
                        ]
                    },
                    "maxItems": {
                        "title": "Max output items",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of stock results to return. Default 100. Also sets the upstream scan size unless you pin \"range\" explicitly.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy to use for outgoing requests.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
