Yahoo Finance API endpoint
Runs a custom Yahoo Finance screen from a JSON body. `query` is a tree of `operator` and `operands`: combine conditions with `AND` or `OR`, and compare a field to a value with operators such as `EQ` or `GT`. Screen equities (default), ETFs or mutual funds with `quote_type`, and page and sort with `count`, `offset`, `sort_field` and `sort_asc`. Returns the matching quotes and the total.
/yahoo-finance/screenerJSON body: query is required. It is a recursive operator/operands tree; combine conditions with AND or OR, and express a leaf as an operator such as EQ or GT over a field and value. Accepted fields depend on quote_type. Optional fields are quote_type, count, offset, sort_field, and sort_asc. quote_type accepts EQUITY (default), ETF, or MUTUALFUND — use ETF to screen exchange-traded funds (the equivalent of yfinance's ETFQuery).
Example request body:
{"query":{"operator":"AND","operands":[{"operator":"GT","operands":["dayvolume",1000000]},{"operator":"EQ","operands":["region","us"]}]},"quote_type":"EQUITY","count":25}
| Field | Filled in, of 25 checked | Values in the sample |
|---|---|---|
| ask | 23 | 0 to 1,005,000, median 13.74 |
| askSize | 23 | 0 to 1,200, median 100 |
| bid | 23 | 0 to 995,000, median 10.57 |
| bidSize | 22 | 0 to 10,000, median 100 |
| corporateActions | 0 | |
| cryptoTradeable | 25 | true in 0 of 25 |
| currency | 25 | USD in all 25 |
| customPriceAlertConfidence | 25 | LOW (21), HIGH (4) |
| esgPopulated | 25 | true in 0 of 25 |
| exchange | 25 | PNK (9), ASE (5), NMS (4) and 4 more |
| exchangeDataDelayedBy | 25 | 0 to 20, median 15 |
| exchangeTimezoneName | 25 | America/New_York in all 25 |
| exchangeTimezoneShortName | 25 | EDT in all 25 |
| fiftyTwoWeekHigh | 23 | 6.05 to 1,000,000, median 38.71 |
| fiftyTwoWeekHighChange | 23 | -768 to 0, median -5.53 |
| fiftyTwoWeekHighChangePercent | 23 | -0.89 to 0, median -0.21 |
| fiftyTwoWeekLow | 23 | 0.03 to 1,000,000, median 16 |
| fiftyTwoWeekLowChange | 23 | 0 to 251.97, median 1.76 |
| fiftyTwoWeekLowChangePercent | 23 | 0 to 8,399, median 0.09 |
| fiftyTwoWeekRange | 23 | “500.0 - 500.0” and 22 other values |
| fullExchangeName | 25 | OTC Markets OTCPK (9), NYSE American (5), NasdaqGS (4) and 4 more |
| fulldayChange | 25 | -0.81 to 7.45, median 0 |
| fulldayChangePercent | 25 | -7.2 to 3.3, median 0 |
| fulldayPrice | 25 | 5.46 to 1,000,000, median 25.15 |
| gmtOffSetMilliseconds | 25 | -14,400,000 |
| hasPrePostMarketData | 25 | true in 15 of 25 |
| language | 25 | en-US in all 25 |
| market | 25 | us_market in all 25 |
| marketState | 25 | REGULAR in all 25 |
| priceHint | 25 | 2 |
| quoteSourceName | 25 | Delayed Quote (13), Nasdaq Real Time Price (12) |
| quoteType | 25 | EQUITY (24), ETF (1) |
| region | 25 | US in all 25 |
| regularMarketChange | 25 | -0.81 to 7.45, median 0 |
| regularMarketChangePercent | 25 | -7.2 to 3.3, median 0 |
| regularMarketDayHigh | 21 | 0.03 to 1,000,000, median 20.72 |
| regularMarketDayLow | 21 | 0.03 to 1,000,000, median 20.58 |
| regularMarketDayRange | 21 | “500.0 - 500.0” and 20 other values |
| regularMarketOpen | 23 | 0 to 1,000,000, median 20.7 |
| regularMarketPreviousClose | 25 | 5.5 to 1,000,000, median 25.33 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| request (body) | object | Yes | Custom screener request | ||
| x-api-key (header) | string | Yes | API key required |
curl -X POST "https://api.crawlora.net/api/v1/yahoo-finance/screener" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"count":1,"offset":1,"query":{},"quote_type":"string","sort_asc":true,"sort_field":"string"}'{
"count": 1,
"offset": 1,
"query": {},
"quote_type": "string",
"sort_asc": true,
"sort_field": "string"
}{
"code": 200,
"msg": "OK",
"data": {
"id": "custom",
"quotes": [
{
"symbol": "AAPL"
}
]
}
}Request schema
#/definitions/yahoofinance.ScreenerRequest
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| count | integer | No | ||||
| offset | integer | No | ||||
| query | object | Yes | ||||
| quote_type | string | No | ||||
| sort_asc | boolean | No | ||||
| sort_field | string | No |
Response schema
#/definitions/yahoofinance.screenerResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | yahoofinance.ScreenerResponse | No | ||||
| data.description | string | No | Description of the screener. | |||
| data.id | string | No | day_gainers | Identifier of the screener, for example `day_gainers`. | ||
| data.meta | object | No | Screener metadata: its canonical name and criteria details. | |||
| data.quotes | array | No | Instruments that match the screener. | |||
| data.title | string | No | Day Gainers | Display title of the screener, for example `Day Gainers`. | ||
| data.total | integer | No | 25 | Total number of instruments that match the screener. | ||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X POST "https://api.crawlora.net/api/v1/yahoo-finance/screener" \
-H "x-api-key: $CRAWLORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"count":1,"offset":1,"query":{},"quote_type":"string","sort_asc":true,"sort_field":"string"}'