Bank balance sheets and fundamentals

API TraderAPI QuantAPI Developer

Bank balance sheets from the prudential regulators, per institution: quarterly call reports from every FDIC-insured bank in the United States, and the monthly returns every Australian deposit-taker files with APRA and every Canadian bank files with OSFI. Assets, deposits, loans, net income and returns for the US; housing loans split owner-occupied against investor, credit cards, lending and household deposits for Australia; insured against uninsured mortgages, personal and business lending and personal deposits for Canada.

For a listed bank, that is the balance sheet ahead of the balance sheet. The US call report lands about 30 days after quarter end, before the holding company's earnings release describes the same quarter. The Australian and Canadian majors report twice a year and quarterly respectively, and their regulators publish the months in between: mortgage share, deposit growth and the investor lending mix are public weeks before a results presentation.

Institutions map to the listed group that owns them, so a request for one ticker returns every filing entity ORTEX attributes to it. Read a bank's own book directly, or read its unlisted competitors' books, which is what tells you whether a move was idiosyncratic or the whole market.

Available Data Points:

  • Period Date: The period the value describes — what the number is about (the valid clock).
  • Published At: When the value first became knowable — when the publisher released it (the knowledge clock). Filter on this for anything where look-ahead bias would matter.
  • Value: The numeric value, where the series has one.
  • Value Text: The textual value, for categorical series such as a trial's status or phase.
  • Unit: Unit of the value, e.g. vehicles, percent, USD.
  • Value Type: number, percent, currency, count or text.
  • Frequency: How often the publisher releases the series.
  • Market: The market the reading describes — an ISO-3166 alpha-2 code (DE), a sub-national one (US-CA), a supranational aggregate (EA, EU) or GLOBAL.
  • Series Slug: Which series the reading belongs to. Unique within a publisher, not globally.
  • Series Name: Human-readable name of the series.
  • Source Slug: Publisher/feed identifier, e.g. kba_registrations.
  • Source Name: Human-readable name of the publisher or feed.
  • Publisher: Who publishes the underlying data.
  • Entity Ref: The publisher's own identifier for what the reading is about — a manufacturer name, a securitisation trust, a reactor unit, a country code. Kept so any value can be traced back to the row it was parsed from.

Coverage

Three regulators. The FDIC: all roughly 4,300 insured US charters, quarterly, about 30 days after quarter end. APRA: about 120 authorized deposit-taking institutions, monthly from March 2019, published on the last business day of the following month. OSFI: the Big Six plus Equitable Bank and Laurentian Bank alongside OSFI's all-banks total, monthly back to January 1996, about six weeks after the month closes.

The filing entity is not always the listed company. A US holding company may own several charters and most charters belong to no listed company at all; most Australian deposit-takers are mutuals or foreign branches with no ticker. Only a minority of rows carry a listing, by construction rather than through incomplete mapping.

What to look for

Ratios travel across banks; balance-sheet levels do not. return_on_assets and return_on_equity are comparable between institutions of any size; a loan or deposit balance is only meaningful against the same institution's own history, or as a share of the regulator's industry total, which APRA and OSFI publish beside every series.

In Canada the uninsured mortgage book is the line to watch: insured lending carries government-backed credit risk, uninsured is the bank's own, and a housing downturn shows there first. In Australia the owner-occupied against investor split is where the argument usually is.

Currencies differ by regulator (USD, AUD, CAD) and so do period lengths, so never add a US quarter to an Australian month. total_assets is published under that slug by both the FDIC and OSFI; pair it with market or source.

Two dates on every reading, and the difference is the edge

periodDate is what the number is about. publishedAt is when it first became knowable. The gap between them is the whole point of alternative data — and it is also the trap. A Form 10-D describing July is filed in mid-August, so a backtest that treats the period as the knowledge date reads a document six weeks before it existed.

from_date and to_date filter on periodDate, because that is the axis you plot against. Join on publishedAt when you are joining against returns.

Filtering: one market or all of them

Called with no filters, the endpoint returns every series in the dataset, for every market ORTEX covers it in. Each row names its own market, seriesSlug and sourceSlug, so a single request is enough to chart the whole dataset.

Narrow it with any combination of market (one market), series (one measure) and source (one publisher). Filter values that are each valid but select nothing together return 400 invalidSelection rather than a misleading empty result.

Raw readings here; comparable ones next door

This endpoint serves the publisher's numbers. Raw values are frequently not comparable — receivables of $10.9bn against $4.9bn say nothing without each book's size, and a 5.3% charge-off rate means something different on a subprime book than a prime one. The Alt Data signals endpoint serves the same series as percentiles and z-scores against a stated comparison set, which is the form a screen or a backtest wants.

Why a company you expect may be missing

Three reasons, and none of them is a bug:

  • The dataset is a window, not a census: Several of these publishers release a rolling window rather than a complete history.
  • The filer is not the listed company: Registers name a marque, a charter or a trust. ORTEX maps those to the listed parent where the link is defensible and leaves them unmapped where it is not — a wrong mapping silently attributes another company's data to your ticker.
  • The population is genuinely narrow: Not every listed company appears in every register, and no amount of mapping changes that.

A series slug identifies a series within a publisher, not globally

unemployment_rate is published under that exact slug by the US Bureau of Labor Statistics, the UK Office for National Statistics and Statistics Canada. Where a slug names more than one series in a dataset, passing it alone returns 400 invalidSeries listing the alternatives — pair it with market or source. ORTEX would rather refuse than hand you one country's print labelled as another's.

How much history there is

Several of these publishers overwrite their own pages and keep no archive. Where that is so, the series begins on the day ORTEX started capturing it and lengthens from there — nobody, including the publisher, can supply the days before that. Everything ORTEX has ever fetched is archived on capture, so the series only ever grows.

Try it out! You can test the API with the trial key TEST. Simply include it in your request headers; either here, or add the header "Ortex-Api-Key": "TEST" to your http request.

Trial key restrictions: Trial keys may be limited to a specific date range and set of regions. Requests outside the allowed regions or entirely outside the allowed date range are rejected; a date window that partially overlaps the allowed range is trimmed to it, reported in meta.restriction.

Get full access! Get a key at app.ortex.com/apis

Path Params
string
required

Where to find the instrument: a venue (exchange symbol, MIC or ISO-2 country) or an identifier scheme (tid, sid, cid, isin, figi). See Identifying an instrument.

string
required

The ticker on that venue, or the value in that scheme. An ISIN, sid, cid or share-class FIGI answers for the main listing only; reference/listings lists the others. See Identifying an instrument.

Query Params
string

Restrict the response to one market. Case-insensitive. This endpoint covers: AU, CA, US. Omit it to receive every market at once - the rows carry their own market, so one request is enough to chart all of them. An unrecognized value returns 400 invalidMarket naming the accepted set.

date
required

Inclusive start of the returned date window. Format: YYYY-MM-DD.

Also selects the instrument: the ticker resolves to the listing that held it on the exchange in the URL path on this date. To retrieve a delisted or renamed company, use its former exchange and ticker with a from_date from when it was listed. An identifier path (/stock/isin|figi|sid|cid/<value>/…) resolves at this date too. The instrument block in the response names the company the data belongs to.

date

Inclusive end of the returned date window (defaults to today). Format: YYYY-MM-DD.

string

Restrict the response to one measure within this dataset. Case-insensitive. Carried here: total_assets, total_deposits, net_loans_and_leases, net_income, return_on_assets, return_on_equity, housing_loans_owner_occupied, housing_loans_investor, credit_card_loans, total_resident_loans, household_deposits, total_resident_assets (and 5 more - see the Alt Data catalog). Omit it to receive every measure. A slug is unique within a publisher rather than globally, so where several publishers in this dataset use the same one, pair it with market or source - an ambiguous slug returns 400 invalidSeries naming the alternatives rather than guessing which country you meant.

string

Restrict the response to one publisher. Case-insensitive. Feeding this endpoint: fdic_call_reports, apra_adi_monthly, osfi_banks_monthly. Most useful as the disambiguator for a series slug more than one publisher uses. An unrecognized value returns 400 invalidSource naming the accepted set.

integer

Page number within the paginated result set. Must be >= 1. Defaults to 1.

integer

Number of rows per page. The default and the maximum allowed depend on the API tier; a value above the tier maximum is rejected with 400 invalidPageSize.

string
enum
Defaults to json

Response format. "json" (default) or "csv".

Allowed:
Headers
string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Header
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json
text/csv