# 🇨🇦 TSX Canada Stock Screener — TSX 60 Quotes (`nexgendata/tsx-canada-stock-screener`) Actor

TSX Canada stock screener API — Toronto Stock Exchange TSX 60 / S\&P TSX Composite live quotes, market cap (CAD), P/E, P/B, dividend yield, ROE, sector. Royal Bank, Shopify, Enbridge universe. Bloomberg / FactSet / Refinitiv Eikon alternative for hedge funds & quants. Pay-per-result.

- **URL**: https://apify.com/nexgendata/tsx-canada-stock-screener.md
- **Developed by:** [NexGenData](https://apify.com/nexgendata) (community)
- **Categories:** Business, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## 🇨🇦 TSX Canada Stock Screener — TSX 60 Quotes & Fundamentals

Track the Toronto Stock Exchange (TSX) and the S&P/TSX 60 — Canada's premier blue-chip index — with prices, market cap (CAD), P/E ratio, P/B ratio, dividend yield, EPS, beta, RSI, 52-week range, sector and industry classification. A Bloomberg Terminal alternative for North American institutional research, hedge fund equity desks, family offices, retail brokers, robo-advisors and quant pipelines focused on Canada's roughly CAD $4 trillion equity market.

### 📊 Sample Output

[![🇨🇦 TSX Canada Stock Screener — TSX 60 Quotes sample output — 🇨🇦 TSX Canada Stock Screener — TSX 60 Quotes, premium API, JSON output, NexGenData premium dataset for analysts, hedge funds, compliance, a](https://api.apify.com/v2/key-value-stores/8gLgXMBveEI1tTz1z/records/tsx-canada-stock-screener-output.png)](https://apify.com/nexgendata/tsx-canada-stock-screener)

If you cover North American equities, you already know the TSX 60 is the second-most-important blue-chip benchmark on the continent and Canada is the EAFE's largest single-country allocation outside the United States. This actor turns that universe into clean JSON in seconds: Royal Bank `RY`, TD Bank `TD`, Bank of Nova Scotia `BNS`, Bank of Montreal `BMO`, CIBC `CM`, National Bank `NA`, Manulife `MFC`, Sun Life `SLF`, Intact `IFC`, Brookfield Corporation `BN`, Brookfield Asset Management `BAM`, Enbridge `ENB`, TC Energy `TRP`, Suncor `SU`, Canadian Natural `CNQ`, Cenovus `CVE`, Imperial Oil `IMO`, Pembina `PPL`, Tourmaline `TOU`, Canadian National Rail `CNR`, Canadian Pacific `CP`, Waste Connections `WCN`, CGI `GIB.A`, Shopify `SHOP`, Constellation Software `CSU`, Open Text `OTEX`, Loblaw `L`, Metro `MRU`, Alimentation Couche-Tard `ATD`, Dollarama `DOL`, Restaurant Brands `QSR`, Magna `MG`, Gildan `GIL`, BCE, TELUS `T`, Rogers `RCI.B`, Thomson Reuters `TRI`, Fortis `FTS`, Emera `EMA`, Hydro One `H`, Algonquin Power `AQN`, Barrick Mining `ABX`, Agnico Eagle `AEM`, Franco-Nevada `FNV`, Wheaton Precious Metals `WPM`, Kinross `K`, Nutrien `NTR`, Teck `TECK.B`, First Quantum `FM`, Cameco `CCO`, Saputo `SAP`, Canadian Tire `CTC.A`, WSP `WSP`, TFI International `TFII`, GFL Environmental `GFL`, Parkland `PKI`, Fairfax `FFH`, TMX Group `X` — every name you'd ever need to model, hedge, pair-trade, or replicate.

---

### What you get per stock

```json
{
  "symbol": "RY",
  "name": "Royal Bank of Canada",
  "ticker_yahoo": "RY.TO",
  "exchange": "TSX",
  "exchange_name": "Toronto Stock Exchange",
  "country": "Canada",
  "currency": "CAD",
  "price_cad": 245.41,
  "previous_close_cad": 246.13,
  "open_cad": 245.80,
  "pct_change": -0.29,
  "market_cap_cad": 347460000000.0,
  "market_cap_billion_cad": 347.46,
  "market_cap_display": "347.46B",
  "pe_ratio": 14.18,
  "forward_pe": 13.05,
  "pb_ratio": 2.04,
  "eps_cad": 17.30,
  "dividend_cad": 6.16,
  "dividend_yield_pct": 2.51,
  "ex_dividend_date": "Apr 24, 2026",
  "shares_outstanding": 1416000000,
  "net_income_cad": 24590000000,
  "volume": 3128440,
  "avg_volume": 3450000,
  "week52_low_cad": 161.27,
  "week52_high_cad": 252.93,
  "day_low_cad": 244.20,
  "day_high_cad": 246.50,
  "beta": 0.91,
  "rsi": 56.14,
  "sector": "Financial Services",
  "industry": "Banks Diversified",
  "is_tsx60": true,
  "is_tsx_composite": true,
  "stockanalysis_url": "https://stockanalysis.com/quote/tsx/RY/",
  "yahoo_finance_url": "https://finance.yahoo.com/quote/RY.TO",
  "scraped_at": "2026-05-10T18:42:00Z",
  "earnings_date": "May 29, 2026"
}
````

***

### Why this actor exists

The Toronto Stock Exchange listing on most data aggregators is a *trap*. It mashes together native Canadian Big Six banks, energy majors and real-estate trusts with thousands of US inter-listed names that happen to trade in Toronto in CAD — NVIDIA, Alphabet, Microsoft, Berkshire Hathaway — none of which you actually want when you screen "Canadian equities." Because aggregators sort by global market cap, the *top* of the Toronto list is dominated by these US giants, pushing Royal Bank, TD and Enbridge below the fold. Worse, the same ticker on TSX vs. NYSE often points at different securities (cross-listings, dual-class structures, REIT trust units with the `.UN` suffix, dual-class voting shares like `RCI.B`, `CTC.A`, `GIB.A`, `TECK.B`).

This actor solves that by hitting TSX-specific detail pages (`stockanalysis.com/quote/tsx/{ticker}/`) for every S\&P/TSX 60 and S\&P/TSX Composite constituent we hardcode. That guarantees `RY = Royal Bank of Canada`, `TD = Toronto-Dominion Bank`, `ENB = Enbridge`, `BN = Brookfield Corporation` (the Canadian parent, not a US ADR), `SHOP = Shopify`, `CNR = Canadian National Railway`. The Yahoo Finance `.TO` ticker is included in every record so you can join straight back to your existing data lake. For TSX-all mode the actor walks the raw Toronto listing and tags every row with `is_tsx60` and `is_tsx_composite` boolean flags so you can filter to the native blue-chip universe in post-processing.

***

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `index` | enum | `TSX60` | `TSX60` (60 blue-chips), `TSX-composite` (~230 large/mid-cap names), `all` (entire TSX main board including US inter-listings). |
| `limit` | int | `60` | Maximum stocks returned, sorted by market cap desc. |
| `min_market_cap_cad` | int | `0` | Filter to caps ≥ this threshold (CAD billions). |
| `sector` | string | `""` | Case-insensitive substring filter on sector / industry / company name. |
| `enrich_fundamentals` | bool | `true` | Pull each stock's TSX detail page for P/E, EPS, dividend, 52-week range, beta, sector. |
| `proxyConfiguration` | object | Apify default | Proxy config (datacenter by default; switch to RESIDENTIAL if rate-limited). |

#### Example inputs

TSX 60 quick scan — top 10 by market cap:

```json
{"index": "TSX60", "limit": 10}
```

All 60 TSX 60 constituents with full fundamentals:

```json
{"index": "TSX60", "limit": 60, "enrich_fundamentals": true}
```

Canadian banks only (Big Six + EQB + insurers):

```json
{"index": "TSX-composite", "limit": 100, "sector": "bank", "enrich_fundamentals": true}
```

Canadian energy mega-caps (≥ CAD$30B market cap, oil & gas + pipelines):

```json
{"index": "TSX-composite", "limit": 50, "min_market_cap_cad": 30, "sector": "energy", "enrich_fundamentals": true}
```

Canadian gold and precious-metals basket (Barrick, Agnico Eagle, Franco-Nevada, Wheaton, Kinross, Alamos, Pan American Silver, Eldorado, IAMGOLD):

```json
{"index": "TSX-composite", "limit": 30, "sector": "gold", "enrich_fundamentals": true}
```

Canadian REITs (`.UN` trust units — Riocan, Choice Properties, CAPREIT, SmartCentres, Granite, First Capital, InterRent):

```json
{"index": "TSX-composite", "limit": 30, "sector": "reit", "enrich_fundamentals": true}
```

Canadian tech compounders (Constellation Software, Shopify, OpenText, CGI, Descartes, Kinaxis, Lightspeed, Nuvei):

```json
{"index": "TSX-composite", "limit": 30, "sector": "tech", "enrich_fundamentals": true}
```

Full S\&P/TSX Composite (60 blue-chips + Composite extras):

```json
{"index": "TSX-composite", "limit": 230, "enrich_fundamentals": true}
```

***

### Use cases

**Hedge fund equity desks** — daily snapshot of every TSX 60 + TSX Composite name with PE/PB/dividend yield piped straight into your factor models. No more paying CAD $30K/seat/year for Bloomberg just to pull the Canadian large-cap universe.

**North American long-short funds** — pair-trade Royal Bank vs JPMorgan, TD vs Bank of America, Suncor vs ExxonMobil, Enbridge vs Kinder Morgan, Canadian National vs Union Pacific, Shopify vs Square, Barrick vs Newmont. This actor gives you the Canadian half of every cross-border pair in clean JSON.

**Quant pipelines** — build mean-reversion, momentum or sector-rotation strategies on the TSX universe. RSI, beta, 52-week range and pct-change come pre-extracted; merge with your fundamental data lake in seconds. The `is_tsx60` and `is_tsx_composite` flags let you toggle index membership filters without external lookups.

**Retail brokers and robo-advisors** — populate Canadian user dashboards with live TSX quotes plus fundamentals for every Canadian listed name without paying for TMX Group market-data licensing.

**Family offices and Canadian wealth managers** — keep tabs on Canadian banks (RY, TD, BNS, BMO, CM, NA), Canadian energy (Enbridge, Suncor, Canadian Natural, Cenovus, Imperial Oil, TC Energy, Pembina), Canadian rails (Canadian National, Canadian Pacific), Canadian utilities (Fortis, Emera, Hydro One, Algonquin), Canadian gold (Barrick, Agnico Eagle, Franco-Nevada, Wheaton), Canadian tech (Shopify, Constellation, OpenText) — all in one dataset.

**Equity research analysts** — pre-screen the TSX 230 by P/E, dividend yield, market cap before deep-diving into annual filings. Sector filter lets you carve out gold (ABX, AEM, FNV, WPM, K, AGI, PAAS, ELD, IMG, OGC, FVI), energy (CNQ, SU, IMO, CVE, ENB, TRP, PPL, MEG, ARX, TOU, ALA, KEY), or REITs (REI.UN, CHP.UN, CAR.UN, SRU.UN, GRT.UN, FCR.UN, IIP.UN) in one call.

**ETF builders / replication desks** — generate the constituent list and weights basis for your TSX 60 / TSX Composite tracking products (XIU, XIC, ZCN, VCN, HXT). The `is_tsx60` and `is_tsx_composite` flags identify index membership without external lookup.

**Macro and FX research** — track loonie-sensitive financials (Big Six banks, lifecos), Canadian oil-sands names (Suncor, Canadian Natural, Cenovus, Imperial), pipeline majors (Enbridge, TC Energy, Pembina), and commodity-export bellwethers (gold miners, copper miners, potash via Nutrien, lithium plays) in one run for CAD macro pieces.

**Dividend / income investors** — Canadian large-caps are famous for their high-payout culture. The Big Six banks alone yield 3-5%, BCE and TELUS yield 4-7%, the utilities (Fortis, Emera, Hydro One, Algonquin) yield 4-6%, the pipelines (Enbridge, TC Energy, Pembina) yield 6-8%. Sort the output by `dividend_yield_pct` to build an instant Canadian dividend-aristocrat screen.

**Sustainability / ESG research** — Canadian listed companies include some of the world's largest renewable-energy and mining ESG names (Brookfield Renewable BEP.UN, Northland Power NPI, Innergex INE, Boralex BLX, Algonquin AQN). Pull the universe and overlay your ESG scores in one batch.

**Cannabis and pharma** — Canada is the home market for global cannabis listings (Canopy WEED, Aurora ACB) and several specialty pharma names (Bausch BHC, Knight Therapeutics GUD).

***

### Pricing — Pay Per Result

- **Actor start**: $0.01 per run
- **Per stock returned**: $0.25

A full TSX 60 pull = $0.01 + (60 × $0.25) = **$15.01 per run**. The full S\&P/TSX Composite extras (~110 names with `index=TSX-composite`) ≈ $27.51. A `limit=10` smoke test ≈ $2.51. **Free tier ($5/month Apify credit) covers ~2 smoke tests or one TSX 60 snapshot per month.** Pay-as-you-go means no commitment; cancel anytime.

Compare to a Bloomberg Terminal subscription (CAD $30,000/year) or Refinitiv Eikon (CAD $24,000/year) just to access the same TSX universe — this actor lets you run on-demand for the price of a coffee.

***

### How it works

For `TSX60` and `TSX-composite` modes the actor iterates a curated, hand-verified ticker map (`RY` → Royal Bank of Canada, `TD` → Toronto-Dominion Bank, `ENB` → Enbridge Inc., `BN` → Brookfield Corporation, etc.) and fetches each constituent's TSX detail page on stockanalysis.com (`https://stockanalysis.com/quote/tsx/{TICKER}/`). That page is server-rendered, so we parse it directly with BeautifulSoup — no Playwright, no JS execution, low latency. CAD market cap, PE, dividend yield, EPS, 52-week range, RSI, beta, sector and industry classification all come out of the same page.

For `all` mode we walk the merged Toronto listing (`stockanalysis.com/list/toronto-stock-exchange/`) page-by-page and dedupe by symbol. Because that listing is sorted by global market cap, US inter-listings like NVDA and GOOG appear at the top — we surface them too in this mode (the `is_tsx60` and `is_tsx_composite` flags let you filter them out post-hoc). With `enrich_fundamentals=true` we then fetch the detail page for each row to fill in PE/dividend/sector etc.

All requests go through Apify proxy by default (datacenter group, North America exit nodes). Switch to RESIDENTIAL if you hit a rate limit. Concurrency is throttled to 6 with 120ms jitter.

Dual-class voting shares with a class suffix (e.g. `RCI.B`, `CTC.A`, `GIB.A`, `TECK.B`, `BBD.B`, `EMP.A`) and income-trust units (e.g. `BIP.UN`, `BEP.UN`, `REI.UN`, `CAR.UN`, `CHP.UN`, `GRT.UN`, `SRU.UN`, `IIP.UN`) are handled natively — the actor maps them to their Yahoo Finance equivalent (`RCI-B.TO`, `BIP-UN.TO`, etc.) in `ticker_yahoo`.

***

### Related actors in the NexGenData equity-screener fleet

The Canadian market doesn't trade in a vacuum. We maintain a coordinated set of single-country / single-region equity-screener actors so you can build cross-listed pairs, ADR arbitrage strategies, North American long-short pairs, or global thematic baskets with one consistent JSON schema:

- 🇩🇪 [Xetra Germany Stock Screener](https://apify.com/nexgendata/xetra-germany-stock-screener) — DAX 40 / MDAX / Frankfurt Xetra. EUR prices, dividend yield, sector. Same schema, native German names only. Pair Canadian autos (Magna `MG`, Linamar) with German autos (BMW, MBG, VOW3, P911).
- 🇬🇧 [LSE UK Stock Screener](https://apify.com/nexgendata/lse-uk-stock-screener) — FTSE 100 / FTSE 250 / LSE main market. GBP prices, dividend yield, sector. Same schema, native UK names only. Useful for Commonwealth dual-listed pairs (Canadian Natural vs Shell, Barrick vs Glencore, Manulife vs Prudential).
- 🇰🇷 [KOSPI Korea Stock Screener](https://apify.com/nexgendata/kospi-stock-screener) — Korea Exchange (KOSPI + KOSDAQ) with KRW pricing — Samsung, SK Hynix, LG, Hyundai. Useful for Korean tech vs Canadian compounders (Shopify, Constellation).
- 🇹🇼 [TWSE Taiwan Stock Screener](https://apify.com/nexgendata/twse-stock-screener) — Taiwan Stock Exchange — TSMC, Foxconn, MediaTek, the semiconductor supply chain.

All of these share the same input pattern (`index`, `limit`, `min_market_cap_*`, `sector`, `enrich_fundamentals`) so you can wire them together in a single orchestration step.

***

### Output schema reference

Every record contains (when available):

| Field | Type | Notes |
|---|---|---|
| `symbol` | string | TSX ticker (e.g. `RY`, `TD`, `ENB`, `RCI.B`, `BIP.UN`). |
| `name` | string | Full legal name. |
| `ticker_yahoo` | string | Yahoo Finance ticker (suffix `.TO`; `.` in symbol becomes `-`). |
| `exchange` | string | Always `TSX`. |
| `currency` | string | Always `CAD`. |
| `price_cad` | float | Latest available price. |
| `previous_close_cad` | float | Prior session close. |
| `open_cad` | float | Today's open. |
| `pct_change` | float | Day-on-day % move. |
| `market_cap_cad` | float | CAD market cap (absolute). |
| `market_cap_billion_cad` | float | CAD market cap in billions. |
| `pe_ratio` | float | Trailing P/E. |
| `forward_pe` | float | Forward P/E. |
| `pb_ratio` | float | Price-to-book. |
| `eps_cad` | float | EPS. |
| `dividend_cad` | float | Annual dividend per share. |
| `dividend_yield_pct` | float | Dividend yield %. |
| `shares_outstanding` | float | Shares outstanding (absolute). |
| `net_income_cad` | float | TTM net income. |
| `volume` | float | Today's share volume. |
| `week52_low_cad` / `week52_high_cad` | float | 52-week range. |
| `beta` | float | 5y beta vs S\&P/TSX Composite. |
| `rsi` | float | 14-day RSI. |
| `sector` | string | GICS-style sector. |
| `industry` | string | GICS-style industry. |
| `is_tsx60` / `is_tsx_composite` | bool | Index membership flags. |

***

### Disclaimer

Data is sourced from public, web-rendered pages on stockanalysis.com (Toronto and TSX detail). It is delayed quote data, not exchange-real-time, and is intended for research, screening and back-testing — NOT for live trade execution. For real-time TMX Group market data with millisecond latency, license the official TSX market-data feed via TMX Datalinx.

***

### Get started

Run the actor with `{"index": "TSX60", "limit": 10}` for a 10-stock smoke test. Pull the full TSX 60 with `{"index": "TSX60", "limit": 60}`. For a wider universe use `{"index": "TSX-composite", "limit": 230}`.

**Want the full NexGenData fleet?** We run 100+ private and public actors for institutional equity research, alternative data, scraping infrastructure, and Bloomberg-alternative pricing. Browse the catalog and try a few — start with the free Apify tier ($5/month credit).

👉 **[Browse all NexGenData actors on Apify](https://apify.com/nexgendata?fpr=2ayu9b)**

***

### Explore the NexGenData Equity Data Suite

This actor is part of NexGenData's global equity data fleet. Whether you cover a single region or a multi-asset macro book, we have a screener for every major market:

#### Regional sisters

- 🔗 **[Finviz Stock Screener (US)](https://apify.com/nexgendata/finviz-stock-screener)** — US equities (NYSE / NASDAQ / AMEX) with 70+ filters — market cap, P/E, sector, technicals, insider activity.
- 🔗 **[LSE UK Stock Screener](https://apify.com/nexgendata/lse-uk-stock-screener)** — London Stock Exchange (FTSE 100 / 250) fundamentals, market cap (GBP), P/E, dividend yield, sector — UK equity data.
- 🔗 **[ASX Australia Stock Screener](https://apify.com/nexgendata/asx-australia-stock-screener)** — ASX 200 / All Ordinaries fundamentals, market cap (AUD), P/E, dividend yield, sector — Australian equity data.

#### Cross-region peers

- 🔗 **[B3 Brasil Stock Screener](https://apify.com/nexgendata/b3-brasil-stock-screener)** — Bovespa / B3 fundamentals, market cap (BRL), P/E, P/B, dividend yield, sector — Petrobras, Vale, Itaú, Ambev universe.
- 🔗 **[BMV Mexico Stock Screener](https://apify.com/nexgendata/bmv-mexico-stock-screener)** — Bolsa Mexicana de Valores (IPC) fundamentals, market cap (MXN), P/E, dividend yield, sector — Mexican equity data.

#### Multi-asset / specialty

- 🔗 **[Finance MCP Server](https://apify.com/nexgendata/finance-mcp-server)** — Unified Model Context Protocol server exposing the full NexGenData equity fleet to Claude, Cursor & MCP-aware LLMs.

#### Browse the full NexGenData catalog

**[→ See all 220+ NexGenData actors at apify.com/nexgendata](https://apify.com/nexgendata?fpr=2ayu9b)** — equity screeners across 25+ markets, lead generation, SEC filings, B2B intelligence, MCP servers, and more.

***

### Why NexGenData vs. paid alternatives

| Tool | Annual cost | API access | Coverage |
|------|-------------|------------|----------|
| Bloomberg Terminal | ~$24,000/seat | Limited | Global |
| FactSet | ~$15,000/seat | Paid add-on | Global |
| Refinitiv Eikon | ~$22,000/seat | Paid add-on | Global |
| S\&P Capital IQ | ~$20,000/seat | Paid add-on | Global |
| **NexGenData Canada Screener** | **Pay-per-result** | **Native** | **Canada**          |

Run this actor once per day for a typical institutional-scale workflow (~200 records/day) and your annual cost is approximately **$1,800–2,000** — a 90-95% discount vs. the major paid alternatives, with no seat licensing, no minimum commitment, and full programmatic access.

# Actor input Schema

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

Which Canadian market scope to screen: TSX60 (S\&P/TSX 60 constituents — Canada's premier blue-chip index, e.g. Royal Bank RY, TD Bank TD, Enbridge ENB, Brookfield BN, Canadian National Rail CNR, Shopify SHOP, Suncor SU, Barrick Gold ABX), TSX-composite (S\&P/TSX Composite index — ~230 mid-and-large-cap Canadian names), or all (entire Toronto Stock Exchange main board including small-caps and income trusts).

## `limit` (type: `integer`):

Maximum number of TSX-listed stocks to return. Stocks are returned in descending market-cap order. Use 10 for a quick smoke test, 60 for the full TSX 60 index, 230 for full S\&P/TSX Composite, 500+ for broader TSX main-board coverage.

## `min_market_cap_cad` (type: `integer`):

Filter to stocks with market cap above this threshold, in BILLIONS of CAD. Examples: 1 = CAD$1B (small-cap floor), 10 = CAD$10B (large-cap, TSX 60 floor is roughly CAD$8-15B), 50 = CAD$50B (Canadian mega-cap like Royal Bank, TD, Enbridge, Brookfield, CNR), 100 = CAD$100B (top 5 Canadian companies — RY, TD, Shopify, Brookfield, Enbridge). Leave at 0 for no filter.

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

Optional case-insensitive substring filter applied to sector, industry, and company name. Examples: 'bank' (Royal Bank, TD, BMO, Scotia BNS, CIBC CM, National Bank NA), 'energy' (Enbridge ENB, Suncor SU, Canadian Natural CNQ, Cenovus CVE, Imperial Oil IMO, TC Energy TRP, Pembina PPL), 'gold' (Barrick ABX, Agnico Eagle AEM, Franco-Nevada FNV, Wheaton WPM, Kinross K), 'rail' (Canadian National CNR, Canadian Pacific CP), 'utility' (Fortis FTS, Emera EMA, Hydro One H, Algonquin AQN), 'tech' (Shopify SHOP, Constellation Software CSU, OpenText OTEX, CGI GIB.A), 'reit' (Riocan REI.UN, Choice Properties CHP.UN, CAPREIT CAR.UN), 'insurance' (Manulife MFC, Sun Life SLF, Intact IFC, Fairfax FFH). Leave blank for no filter.

## `enrich_fundamentals` (type: `boolean`):

If true, fetch each stock's TSX detail page on stockanalysis.com to extract P/E ratio, EPS, dividend yield, shares outstanding, beta, RSI, 52-week range, sector and industry classification. Adds ~1 HTTP request per stock and roughly doubles runtime. Required if you want to filter by sector. Recommended ON for TSX60 (only 60 stocks).

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

Apify proxy configuration. Defaults to Apify datacenter proxy for reliable access to stockanalysis.com. Use RESIDENTIAL group if you hit rate limits.

## Actor input object example

```json
{
  "index": "TSX60",
  "limit": 60,
  "min_market_cap_cad": 0,
  "enrich_fundamentals": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "index": "TSX60",
    "limit": 60,
    "min_market_cap_cad": 0,
    "sector": "",
    "enrich_fundamentals": true,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/tsx-canada-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 = {
    "index": "TSX60",
    "limit": 60,
    "min_market_cap_cad": 0,
    "sector": "",
    "enrich_fundamentals": True,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/tsx-canada-stock-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 '{
  "index": "TSX60",
  "limit": 60,
  "min_market_cap_cad": 0,
  "sector": "",
  "enrich_fundamentals": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nexgendata/tsx-canada-stock-screener --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🇨🇦 TSX Canada Stock Screener — TSX 60 Quotes",
        "description": "TSX Canada stock screener API — Toronto Stock Exchange TSX 60 / S&P TSX Composite live quotes, market cap (CAD), P/E, P/B, dividend yield, ROE, sector. Royal Bank, Shopify, Enbridge universe. Bloomberg / FactSet / Refinitiv Eikon alternative for hedge funds & quants. Pay-per-result.",
        "version": "0.0",
        "x-build-id": "ginkevCVDiNinwGQ8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~tsx-canada-stock-screener/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-tsx-canada-stock-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/nexgendata~tsx-canada-stock-screener/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-tsx-canada-stock-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/nexgendata~tsx-canada-stock-screener/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-tsx-canada-stock-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",
                "properties": {
                    "index": {
                        "title": "Index / Market",
                        "enum": [
                            "TSX60",
                            "TSX-composite",
                            "all"
                        ],
                        "type": "string",
                        "description": "Which Canadian market scope to screen: TSX60 (S&P/TSX 60 constituents — Canada's premier blue-chip index, e.g. Royal Bank RY, TD Bank TD, Enbridge ENB, Brookfield BN, Canadian National Rail CNR, Shopify SHOP, Suncor SU, Barrick Gold ABX), TSX-composite (S&P/TSX Composite index — ~230 mid-and-large-cap Canadian names), or all (entire Toronto Stock Exchange main board including small-caps and income trusts).",
                        "default": "TSX60"
                    },
                    "limit": {
                        "title": "Limit (stocks returned)",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of TSX-listed stocks to return. Stocks are returned in descending market-cap order. Use 10 for a quick smoke test, 60 for the full TSX 60 index, 230 for full S&P/TSX Composite, 500+ for broader TSX main-board coverage.",
                        "default": 60
                    },
                    "min_market_cap_cad": {
                        "title": "Min market cap (billion CAD)",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Filter to stocks with market cap above this threshold, in BILLIONS of CAD. Examples: 1 = CAD$1B (small-cap floor), 10 = CAD$10B (large-cap, TSX 60 floor is roughly CAD$8-15B), 50 = CAD$50B (Canadian mega-cap like Royal Bank, TD, Enbridge, Brookfield, CNR), 100 = CAD$100B (top 5 Canadian companies — RY, TD, Shopify, Brookfield, Enbridge). Leave at 0 for no filter.",
                        "default": 0
                    },
                    "sector": {
                        "title": "Sector / industry / name keyword",
                        "type": "string",
                        "description": "Optional case-insensitive substring filter applied to sector, industry, and company name. Examples: 'bank' (Royal Bank, TD, BMO, Scotia BNS, CIBC CM, National Bank NA), 'energy' (Enbridge ENB, Suncor SU, Canadian Natural CNQ, Cenovus CVE, Imperial Oil IMO, TC Energy TRP, Pembina PPL), 'gold' (Barrick ABX, Agnico Eagle AEM, Franco-Nevada FNV, Wheaton WPM, Kinross K), 'rail' (Canadian National CNR, Canadian Pacific CP), 'utility' (Fortis FTS, Emera EMA, Hydro One H, Algonquin AQN), 'tech' (Shopify SHOP, Constellation Software CSU, OpenText OTEX, CGI GIB.A), 'reit' (Riocan REI.UN, Choice Properties CHP.UN, CAPREIT CAR.UN), 'insurance' (Manulife MFC, Sun Life SLF, Intact IFC, Fairfax FFH). Leave blank for no filter."
                    },
                    "enrich_fundamentals": {
                        "title": "Enrich with fundamentals (slower)",
                        "type": "boolean",
                        "description": "If true, fetch each stock's TSX detail page on stockanalysis.com to extract P/E ratio, EPS, dividend yield, shares outstanding, beta, RSI, 52-week range, sector and industry classification. Adds ~1 HTTP request per stock and roughly doubles runtime. Required if you want to filter by sector. Recommended ON for TSX60 (only 60 stocks).",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. Defaults to Apify datacenter proxy for reliable access to stockanalysis.com. Use RESIDENTIAL group if you hit rate limits.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
