ETF holdings changes

API Enterprise

What one exchange-traded fund changed between two dates: holdings added, removed, and holdings whose share count or weight moved, comparing the fund's holdings file on from_date with its file on to_date. Largest weight change first. Uncharged.

Available Data Points:

  • From As Of Date / To As Of Date: The dates of the two files compared.
  • Change: added, removed or changed.
  • Holding Name / Ticker / ISIN / Exchange / MIC: The holding's identifiers as the issuer prints them.
  • Asset Class: equity, bond, cash, futures or other.
  • Ortex Tid: The held instrument's ORTEX listing id where ORTEX matched it; else null.
  • Ortex Sid: The held instrument's ORTEX security id; null where unmatched.
  • Ortex Cid: The held instrument's ORTEX company id; null where unmatched.
  • Shares Before / After / Change: The share count in each file and the difference (after minus before).
  • Weight Before / After / Change: The weight (a fraction of the fund) in each file and the difference.
  • Market Value Before / After: Market value in each file, in the fund's reporting currency.

Identifying the fund

The path is the same as on every other single-instrument endpoint: the venue, then the ticker (US/SPY, XETR/SPY5), or an identifier scheme and its value (isin/IE00B4L5Y983). An ETF is resolved against ORTEX's fund master rather than the listing master, so a fund with no listing in the security master is still reachable by venue and ticker or by ISIN. A malformed identifier is 400 invalidIdentifier; one matching no fund is 404 instrumentNotFound.

Which holdings file

Holdings come from the fund issuer's published holdings file (or the SEC's quarterly N-PORT data set for US funds), stored as published. The holdings on a date are the fund's newest file dated on or before it, provided that file is no more than 7 days older than the date for issuers that publish daily, 100 days for monthly publishers (Vanguard) and 155 days for N-PORT (quarterly, released about two months after the quarter). A fund with no file inside that bound has no holdings on the date. Every row carries the date its file states (asOfDate), so a basket older than the date asked for is visible as such. When an issuer re-issues a file for the same date, the later file is served.

Matching holdings across files

A holding is the same in both files when both lines matched the same ORTEX listing, or, for lines ORTEX did not match, when the issuer printed the same identifiers and name. from_date is required and to_date defaults to today. The result is empty when either date has no file, or when both dates resolve to the same file.

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! Contact [email protected]

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
date
required

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

date

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

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
*/*