# 🇧🇷 B3 Brasil Stock Screener — Bovespa Quotes & Fundamentals (`nexgendata/b3-brasil-stock-screener`) Actor

B3 / Bovespa Brazilian stock screener API — Ibovespa live quotes, market cap (BRL), P/E, P/B, dividend yield, ROE, sector. Petrobras, Vale, Itaú, Ambev universe. Bloomberg Terminal / FactSet / Refinitiv Eikon LATAM equity-data alternative for hedge funds & quants. Pay-per-result.

- **URL**: https://apify.com/nexgendata/b3-brasil-stock-screener.md
- **Developed by:** [Stephan Corbeil](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 b3 stock records

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

## 🇧🇷 B3 Brasil Stock Screener — Bovespa Quotes & Fundamentals

A **Bloomberg Terminal alternative for Brazilian equities**, packaged as a single Apify actor. Pull every stock listed on **B3 (Brasil, Bolsa, Balcão)** — Brazil's only stock exchange, formerly known as **Bovespa** — with prices in BRL, P/L (P/E), P/VP (P/B), dividend yield, ROE, ROIC, EV/EBITDA, net debt to equity, 5-year revenue growth, and 2-month average traded value (liquidity proxy). One run returns the entire B3 universe of roughly 700–900 papers (common stocks ON, preferred shares PN/PNA/PNB, units, BDRs) ready to drop into your value-screen, dividend-strategy, or quant pipeline.

Run a single API call. Get clean JSON. Push it into Snowflake, Databricks, BigQuery, your local Postgres, or a Google Sheet. No browser, no Selenium, no JavaScript rendering — just one HTTP fetch against a server-rendered page, parsed with BeautifulSoup, sorted by liquidity, and returned as a flat list of stock objects.

---

### Why this actor exists

Brazilian retail investors and quant funds run into the same wall foreign-market screeners face: every commercial provider (Economática, ProfitChart, Status Invest Premium, TradingView Pro) charges R$ 50–500/month for what is, fundamentally, public data published by listed companies and aggregated by free Brazilian sites. If you need a programmatic feed — even just for a Sunday-night dividend report or a backtest of an Ibovespa value strategy — you are paying for human-friendly UIs you don't use.

This actor replaces that subscription with a **per-record Apify charge of $0.02 per stock**. A full 100-stock pull (the entire Ibovespa-tradeable universe sorted by liquidity) costs $2.005 — roughly **R$ 10**. A monthly auto-refresh of the same universe costs about $24/year. Compare to R$ 50/month × 12 = R$ 600 for any commercial Brazilian quote provider.

---

### Quick start

#### Run from the Apify UI

1. Click **Try this actor**.
2. Leave the inputs at defaults (`limit: 100`) for the most-liquid 100 B3 stocks sorted by 2-month average traded value.
3. Click **Run**. The actor returns in 5–10 seconds (one HTTP call to Fundamentus + parse + filter + push).
4. Browse the dataset in the **Storage** tab, or export as CSV / JSON / Excel from the **Output** tab.

#### Run from the API (cURL)

```bash
curl -X POST "https://api.apify.com/v2/acts/nexgendata~b3-brasil-stock-screener/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"limit": 50, "min_dividend_yield": 6}'
````

#### Run from Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("nexgendata/b3-brasil-stock-screener").call(run_input={
    "limit": 200,
    "min_liquidity_2m_brl": 1_000_000,   ## at least 1M BRL/day traded
    "min_dividend_yield": 5,             ## at least 5% trailing yield
    "max_pe_ratio": 15,                  ## cheap on earnings
})
for stock in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(stock["symbol"], stock["company_name_pt"], stock["price_brl"], stock["dividend_yield_pct"])
```

***

### Output schema

Every stock object includes the following fields (BRL = Brazilian Real, percentages are unit-less floats — `8.31` means 8.31%):

| Field | Type | Description |
|---|---|---|
| `symbol` | string | B3 ticker, e.g. `PETR4`, `VALE3`, `ITUB4`, `BBDC4`. |
| `yahoo_symbol` | string | Yahoo Finance form: `PETR4.SA`. |
| `company_name_pt` | string | Full Brazilian-Portuguese corporate name (e.g. `PETROLEO BRASILEIRO S.A. - PETROBRAS`). |
| `root_ticker` | string | Ticker with class digits stripped (e.g. `PETR4` → `PETR`). |
| `share_class` | string | `ON (Ordinária / common, voting)`, `PN (Preferencial / preferred)`, `PNA`, `PNB`, `UNT`, etc., inferred from suffix digit. |
| `market` | string | Always `B3`. |
| `exchange_full_name` | string | `Brasil, Bolsa, Balcão (Bovespa)`. |
| `country` | string | `Brazil`. |
| `currency` | string | `BRL`. |
| `price_brl` | number | Last closing price in BRL. |
| `pe_ratio` | number | P/L (Preço/Lucro). |
| `pvp_ratio` | number | P/VP (Preço/Valor Patrimonial = P/B). |
| `psr` | number | Price / Sales. |
| `dividend_yield_pct` | number | Trailing 12-month dividend yield, in percent. |
| `p_ativo` | number | Price / Total Assets. |
| `p_cap_giro` | number | Price / Working Capital. |
| `p_ebit` | number | Price / EBIT. |
| `p_ativ_circ_liq` | number | Price / Net Current Asset Value (Graham metric). |
| `ev_ebit` | number | Enterprise Value / EBIT. |
| `ev_ebitda` | number | Enterprise Value / EBITDA. |
| `gross_margin_pct` | number | Gross margin, in percent. |
| `ebit_margin_pct` | number | EBIT margin, in percent. |
| `net_margin_pct` | number | Net (líquida) margin, in percent. |
| `current_ratio` | number | Liquidez Corrente. |
| `roic_pct` | number | Return on Invested Capital, in percent. |
| `roe_pct` | number | Return on Equity, in percent. |
| `liquidity_2m_brl` | number | 2-month average daily traded value, in BRL. |
| `book_equity_brl` | number | Patrimônio Líquido (book equity), in BRL. |
| `net_debt_to_equity` | number | Dívida Líquida / Patrimônio Líquido. |
| `revenue_growth_5y_pct` | number | 5-year revenue CAGR, in percent. |
| `fundamentus_url` | string | Direct link to the Fundamentus detail page. |
| `b3_url` | string | Direct link to the official B3 listed-company page. |
| `yahoo_finance_url` | string | Direct link to Yahoo Finance quote page. |
| `scraped_at` | string | ISO-8601 UTC timestamp of the fetch. |

***

### Input filters

| Field | Type | Default | What it does |
|---|---|---|---|
| `limit` | integer | 100 | Maximum stocks returned, sorted by 2-month liquidity desc. |
| `min_market_cap_brl` | integer | 0 | Filter by patrimônio líquido (book equity, BRL) — proxy for size. |
| `min_liquidity_2m_brl` | integer | 0 | Filter by 2-month avg daily traded value (BRL). 1M+ = tradeable, 10M+ = institutional. |
| `max_pe_ratio` | number | 0 | Cap on P/L (P/E). Set 15 for Graham-style value screen. 0 disables. |
| `max_pvp_ratio` | number | 0 | Cap on P/VP (P/B). Set 1 for "below book" screen. 0 disables. |
| `min_dividend_yield` | number | 0 | Floor on trailing dividend yield, in %. Brazilian utilities/banks routinely yield 8–15%. |
| `min_roe_pct` | number | 0 | Floor on Return on Equity, in %. Set 15 for quality screen. |
| `sector` | string | `""` | Substring filter against ticker + company name. e.g. `BANCO`, `PETR`, `VALE`. |
| `proxyConfiguration` | object | Apify Proxy ON | Datacenter is fine for Fundamentus. RESIDENTIAL only if you hit a rate limit. |

***

### How B3 ticker conventions work

If you've never traded Brazilian equities, the suffix digits encode share class:

- **`3`** — ON, *ordinária*: voting common stock (e.g. `VALE3`, `PETR3`, `BBAS3`).
- **`4`** — PN, *preferencial*: preferred non-voting, usually higher dividend (e.g. `PETR4`, `ITUB4`, `BBDC4`).
- **`5` / `6` / `7` / `8`** — Preferred classes A/B/C/D.
- **`11`** — Unit (a basket of ON+PN trading as one paper, e.g. `SANB11`, `TAEE11`) or BDR (Brazilian Depositary Receipt of a foreign listing).

Petrobras has both `PETR3` (voting) and `PETR4` (preferred); most Brazilian dividend strategies favor `PETR4` for the higher payout. The actor returns both.

***

### Data source

The actor fetches a single server-rendered HTML page from **[Fundamentus.com.br](https://www.fundamentus.com.br/resultado.php)**, a long-running independent Brazilian fundamentals aggregator. Fundamentus pulls quarterly filings (DFP / ITR) directly from CVM (Brazil's SEC) and computes ratios on its servers — meaning the data is the same as what shows up in Economática and other commercial terminals, just a few hours later. Prices are end-of-day (last close, not real-time intraday).

For real-time intraday quotes you would need a paid B3 market-data feed; for fundamentals + close-of-day prices (the inputs to virtually every value, dividend, and quality strategy), Fundamentus is the canonical free source.

***

### Common use cases

- **Brazilian dividend portfolio** — `min_dividend_yield: 8, min_liquidity_2m_brl: 5_000_000` returns the high-yield subset of tradeable B3 stocks.
- **Magic Formula Brasil** — pull all stocks, sort offline by `(roic_pct desc, ev_ebit asc)` after filtering `liquidity_2m_brl > 1_000_000`.
- **Graham deep-value screen** — `max_pvp_ratio: 1, max_pe_ratio: 10, min_roe_pct: 5` — classic margin-of-safety filter.
- **Sector backtest** — `sector: "BANCO"` returns every Brazilian bank (Itaú, Bradesco, Santander Brasil, Banco do Brasil, Banrisul, ABC Brasil…).
- **Daily ETL job** — schedule a 1× / day run with `limit: 500` and stream the dataset into your warehouse for time-series tracking.

***

### Cost

Pay-per-event pricing:

- **$0.005** per actor start.
- **$0.02** per stock returned.

A 10-stock smoke test = $0.205. A 100-stock daily refresh = $2.005 (~R$ 10 at current USD/BRL). 100 stocks × 30 days/month = $60.15/month, **versus R$ 50–500/month for a commercial Brazilian terminal**.

***

### Sister actors in the NexGenData fleet

If you're screening Brazilian equities, you probably want global coverage too:

- 🇨🇳 [Eastmoney China A-Share Screener](https://apify.com/nexgendata/eastmoney) — Shanghai + Shenzhen + STAR, full A-share fundamentals.
- 🇺🇸 [Finviz Stock Screener](https://apify.com/nexgendata/finviz-stock-screener) — US equities with 70+ filter combinations.
- 🌍 [Finance MCP Server](https://apify.com/nexgendata/finance-mcp-server) — drop-in Model Context Protocol server that exposes all our finance actors to Claude Desktop, Cursor, and other MCP-aware LLM clients.
- 🇹🇼 [TWSE Stock Screener](https://apify.com/nexgendata/twse-stock-screener) — Taiwan Stock Exchange fundamentals.
- 🇰🇷 [KOSPI Stock Screener](https://apify.com/nexgendata/kospi-stock-screener) — Korea Composite Stock Price Index fundamentals.

***

### About NexGenData

NexGenData ships ~50 specialized data actors on Apify covering global equities, real estate, jobs, contact discovery, SEO, and SaaS-stack mapping. Every actor is built on the same playbook: find a public-but-painful-to-extract data source, wrap one HTTP call in clean JSON, charge per record. No subscriptions, no minimums, transparent pricing.

If you want to build with the same toolkit, [Apify offers a generous free tier and our affiliate link gives you bonus credits → https://apify.com/nexgendata?fpr=2ayu9b](https://apify.com/nexgendata?fpr=2ayu9b)

# Actor input Schema

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

Maximum number of B3 (Brasil, Bolsa, Balcão / Bovespa) listed stocks to return. The Brazilian exchange has roughly 400-450 listed common stocks plus preferred shares (PETR4, VALE3, ITUB4, BBDC4, etc.). Use 10 for a smoke test, 100 for the most-liquid Ibovespa universe, or 500 to pull every listed paper. Records are returned sorted by 2-month liquidity (Liq.2meses) descending — a good proxy for tradeable mid-large caps.

## `min_market_cap_brl` (type: `integer`):

Filter to stocks with patrimônio líquido (book equity, in BRL) at or above this threshold. Used as a market-cap proxy from Fundamentus. Examples: 1000000000 = 1bn BRL (mid-cap floor), 10000000000 = 10bn BRL (large-cap, Ibovespa-heavy). Leave at 0 for no filter.

## `min_liquidity_2m_brl` (type: `integer`):

Filter to stocks with Liq.2meses (mean daily traded value over the last 2 months in BRL) at or above this threshold. Excellent for excluding illiquid micro-caps. Examples: 1000000 = 1M BRL/day (tradeable), 10000000 = 10M BRL/day (institutional-grade). Leave at 0 for no filter.

## `max_pe_ratio` (type: `number`):

Filter to stocks with P/L (Preço/Lucro, P/E) at or below this value (value-investor screen). Examples: 8 = deep value typical of Brazilian banks/utilities, 15 = classic Graham value, 25 = GARP. Stocks with no reported earnings (P/L = 0 in Fundamentus) are excluded when this filter is set. Leave at 0 to disable.

## `max_pvp_ratio` (type: `number`):

Filter to stocks with P/VP (Preço/Valor Patrimonial, P/B) at or below this value. Brazilian banks often trade at 0.8-1.5 P/VP. Examples: 1 = trading below book, 2 = reasonable. Leave at 0 to disable.

## `min_dividend_yield` (type: `number`):

Filter to stocks with trailing dividend yield at or above this value (in percent). Brazil is famous for its high-yield equity culture — utilities (TAEE11, ENBR3), banks (ITSA4, BBAS3), and oil (PETR4) routinely yield 8-15%. Examples: 5 = solid income, 10 = top-decile dividend payer. Leave at 0 for no filter.

## `min_roe_pct` (type: `number`):

Filter to stocks with Return on Equity at or above this value (in percent). Quality-investor screen. Examples: 15 = good quality, 20 = top-tier (Itaú, WEG, Localiza historically). Leave at 0 for no filter.

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

Optional case-insensitive substring filter applied to the ticker (Papel) and company name. Examples: 'PETR' (Petrobras family — PETR3/PETR4), 'BANCO' (banks), 'VALE', 'ITAU', 'ENERGIA', 'BBDC'. Leave blank for no filter. B3 ticker conventions: digit 3 = ON (ordinary/voting), digit 4 = PN (preferred), 5/6 = preferred classes, 11 = unit/BDR.

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

Apify proxy configuration. Fundamentus.com.br is a public Brazilian server-rendered site and accepts datacenter proxies fine. Switch to RESIDENTIAL only if you hit rate limits.

## Actor input object example

```json
{
  "limit": 100,
  "min_market_cap_brl": 0,
  "min_liquidity_2m_brl": 0,
  "max_pe_ratio": 0,
  "max_pvp_ratio": 0,
  "min_dividend_yield": 0,
  "min_roe_pct": 0,
  "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 = {
    "limit": 100,
    "min_market_cap_brl": 0,
    "min_liquidity_2m_brl": 0,
    "max_pe_ratio": 0,
    "max_pvp_ratio": 0,
    "min_dividend_yield": 0,
    "min_roe_pct": 0,
    "sector": "",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nexgendata/b3-brasil-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 = {
    "limit": 100,
    "min_market_cap_brl": 0,
    "min_liquidity_2m_brl": 0,
    "max_pe_ratio": 0,
    "max_pvp_ratio": 0,
    "min_dividend_yield": 0,
    "min_roe_pct": 0,
    "sector": "",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("nexgendata/b3-brasil-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 '{
  "limit": 100,
  "min_market_cap_brl": 0,
  "min_liquidity_2m_brl": 0,
  "max_pe_ratio": 0,
  "max_pvp_ratio": 0,
  "min_dividend_yield": 0,
  "min_roe_pct": 0,
  "sector": "",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call nexgendata/b3-brasil-stock-screener --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🇧🇷 B3 Brasil Stock Screener — Bovespa Quotes & Fundamentals",
        "description": "B3 / Bovespa Brazilian stock screener API — Ibovespa live quotes, market cap (BRL), P/E, P/B, dividend yield, ROE, sector. Petrobras, Vale, Itaú, Ambev universe. Bloomberg Terminal / FactSet / Refinitiv Eikon LATAM equity-data alternative for hedge funds & quants. Pay-per-result.",
        "version": "0.0",
        "x-build-id": "rGa63t5eW6mWCVZNu"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nexgendata~b3-brasil-stock-screener/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nexgendata-b3-brasil-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~b3-brasil-stock-screener/runs": {
            "post": {
                "operationId": "runs-sync-nexgendata-b3-brasil-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~b3-brasil-stock-screener/run-sync": {
            "post": {
                "operationId": "run-sync-nexgendata-b3-brasil-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": {
                    "limit": {
                        "title": "Limit",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of B3 (Brasil, Bolsa, Balcão / Bovespa) listed stocks to return. The Brazilian exchange has roughly 400-450 listed common stocks plus preferred shares (PETR4, VALE3, ITUB4, BBDC4, etc.). Use 10 for a smoke test, 100 for the most-liquid Ibovespa universe, or 500 to pull every listed paper. Records are returned sorted by 2-month liquidity (Liq.2meses) descending — a good proxy for tradeable mid-large caps.",
                        "default": 100
                    },
                    "min_market_cap_brl": {
                        "title": "Min market cap / patrimônio líquido (BRL)",
                        "minimum": 0,
                        "maximum": 10000000000000,
                        "type": "integer",
                        "description": "Filter to stocks with patrimônio líquido (book equity, in BRL) at or above this threshold. Used as a market-cap proxy from Fundamentus. Examples: 1000000000 = 1bn BRL (mid-cap floor), 10000000000 = 10bn BRL (large-cap, Ibovespa-heavy). Leave at 0 for no filter.",
                        "default": 0
                    },
                    "min_liquidity_2m_brl": {
                        "title": "Min 2-month avg volume (BRL)",
                        "minimum": 0,
                        "maximum": 100000000000,
                        "type": "integer",
                        "description": "Filter to stocks with Liq.2meses (mean daily traded value over the last 2 months in BRL) at or above this threshold. Excellent for excluding illiquid micro-caps. Examples: 1000000 = 1M BRL/day (tradeable), 10000000 = 10M BRL/day (institutional-grade). Leave at 0 for no filter.",
                        "default": 0
                    },
                    "max_pe_ratio": {
                        "title": "Max P/L (P/E) ratio",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "number",
                        "description": "Filter to stocks with P/L (Preço/Lucro, P/E) at or below this value (value-investor screen). Examples: 8 = deep value typical of Brazilian banks/utilities, 15 = classic Graham value, 25 = GARP. Stocks with no reported earnings (P/L = 0 in Fundamentus) are excluded when this filter is set. Leave at 0 to disable.",
                        "default": 0
                    },
                    "max_pvp_ratio": {
                        "title": "Max P/VP (P/B) ratio",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "number",
                        "description": "Filter to stocks with P/VP (Preço/Valor Patrimonial, P/B) at or below this value. Brazilian banks often trade at 0.8-1.5 P/VP. Examples: 1 = trading below book, 2 = reasonable. Leave at 0 to disable.",
                        "default": 0
                    },
                    "min_dividend_yield": {
                        "title": "Min dividend yield (%)",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "number",
                        "description": "Filter to stocks with trailing dividend yield at or above this value (in percent). Brazil is famous for its high-yield equity culture — utilities (TAEE11, ENBR3), banks (ITSA4, BBAS3), and oil (PETR4) routinely yield 8-15%. Examples: 5 = solid income, 10 = top-decile dividend payer. Leave at 0 for no filter.",
                        "default": 0
                    },
                    "min_roe_pct": {
                        "title": "Min ROE (%)",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "number",
                        "description": "Filter to stocks with Return on Equity at or above this value (in percent). Quality-investor screen. Examples: 15 = good quality, 20 = top-tier (Itaú, WEG, Localiza historically). Leave at 0 for no filter.",
                        "default": 0
                    },
                    "sector": {
                        "title": "Ticker / company name keyword",
                        "type": "string",
                        "description": "Optional case-insensitive substring filter applied to the ticker (Papel) and company name. Examples: 'PETR' (Petrobras family — PETR3/PETR4), 'BANCO' (banks), 'VALE', 'ITAU', 'ENERGIA', 'BBDC'. Leave blank for no filter. B3 ticker conventions: digit 3 = ON (ordinary/voting), digit 4 = PN (preferred), 5/6 = preferred classes, 11 = unit/BDR."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy configuration. Fundamentus.com.br is a public Brazilian server-rendered site and accepts datacenter proxies fine. Switch to RESIDENTIAL only 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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
