> **For coding agents and LLMs:** This is one Social Fetch marketing page (markdown export). For API orientation start with [`/llms.txt`](https://www.socialfetch.dev/llms.txt); for auth and crawl rules use [`/agents.txt`](https://www.socialfetch.dev/agents.txt); for every operation use [`/llms-endpoints.txt`](https://www.socialfetch.dev/llms-endpoints.txt).

## This page

- **On-site (HTML):** <https://www.socialfetch.dev/platforms/yahoo-finance/screener>
- **Markdown (.mdx) URL:** <https://www.socialfetch.dev/platforms/yahoo-finance/screener.mdx>

---

# Yahoo Finance Custom Screener API

Your own filters over a screened universe, one page at a time.

`POST /v1/yahoo-finance/screener` takes `instrumentType`, `filters`, `query`, `sort`, `order`, `limit`, `offset` and `cursor` in a JSON body and returns `data.instrumentType`, `data.total`, `data.start`, `data.count`, `data.quotes`, `data.page` and `data.windowClamped`. `instrumentType` is one of `equity`, `etf`, `mutualfund`, `crypto`, `index`, `future`, `currency` or `option`.

Each filter is `{ field, operator, value }` or `{ field, operator, values }`, and filters combine with AND. Operators are `EQ`, `GT`, `GTE`, `LT`, `LTE`, `BTWN`, `GTELT`, `MATCH_PHRASE`, `MATCH_ANY`, `MATCH_ALL` and `MUST_NOT`; the operator defaults to `EQ`. Up to 20 filters are accepted. When no filter sets `region` or `exchange`, the screen is limited to US instruments; crypto and currency screens have no US default, and currency screens have no exchange filter. The default sort is `intradaymarketcap` for equity and crypto and `ticker` for the other types. Add a `region` or `exchange` filter to screen another market and it is sent as your filters alone. A raw `query` is sent as-is and no US default is added. An unknown filter or sort field is refused with a 400 before anything is fetched on equity and ETF screens, the types whose fields are listed at `/v1/yahoo-finance/screener/fields`; other instrument types pass fields through as given. Premium-flagged fields are refused the same way. Page with `offset` or the opaque `cursor` from `data.page.nextCursor`; only the first 10,000 rows are available.

## Request

- **Endpoint:** `POST /v1/yahoo-finance/screener`
- **Credits:** 1 credit
Failed requests are free
- **Input:** by filters
- **Full reference:** [docs](https://www.socialfetch.dev/docs/api/v1/yahoo-finance/screener/post)
- **Platform page:** [/platforms/yahoo-finance](https://www.socialfetch.dev/platforms/yahoo-finance)

## FAQ

### How do I build a filter?

Send filters as an array of objects with field, operator and value or values. For example { field: "intradaymarketcap", operator: "GT", value: 1000000 }. Filters combine with AND.

### Which operators are supported?

EQ, GT, GTE, LT, LTE, BTWN, GTELT, MATCH_PHRASE, MATCH_ANY, MATCH_ALL and MUST_NOT. EQ is the default when operator is omitted.

### Can I sort by any field?

Only fields the screener supports and that are not premium-flagged. A premium sort field is refused before any request, so no credits are spent on it.

### How do I page the result?

Read data.page.nextCursor and post again with cursor and the same filters while data.page.hasMore is true. A page past the 10,000-row limit reports windowClamped: true.

### How many credits does this route cost?

Pricing is documented on the operation in the API registry (shown on this page). Confirm on every response with meta.creditsCharged: that field is the billing source of truth.
