---
title: "ETF Ownership Index"
method: GET
path: "/ownership-index.json"
---

# ETF Ownership Index

`GET /ownership-index.json`

## Request

- Base URL: `https://tickerinside.com/api/v1`
- URL: `https://tickerinside.com/api/v1/ownership-index.json`
- Auth: none required

The ETF Ownership Index (ti-ownership-index/1). For each stock with a figure in the ownership ledger: the share of its shares outstanding held by the covered US ETFs, at least, the funds counted, and top3_share_pct, the share of those funds' holdings held by the three funds holding the most. Then the market line, over one line per company, with the cap-weighted share of the companies' market value the ETFs hold, the mean, the median and the quartiles, and the same line by sector. Its CSV twin, /api/v1/ownership-index.csv, has the same rows. The methodology, with a worked example, is at /etf-ownership/methodology/. A lower bound, like the ledger it reads: funds outside the coverage, and covered funds whose count could not be used, are not in it. Market caps weight the lines and enter no stock's figure. Under CC BY 4.0.

## Response `200`

The file. The example is a real answer, shortened: long lists and maps keep their first entries.

- OwnershipIndex
  - `name` string, required: The index's name.
  - `as_of` string, nullable, required: The date of the ownership ledger the index reads: its newest holdings date.
  - `method` string, required: The method of the index, ti-ownership-index/1, in /api/v1/methods.json.
  - `ledger_method` string, required: The method of the figures it reads, ti-ownership/1.
  - `method_url` string, required: Where both methods are written down, with their test vectors.
  - `methodology` string, required: The methodology page: formulas, sources, dates, limits and a worked example.
  - `holdings_dates` object, nullable, required: The oldest and newest holdings dates counted across the stocks.
    - `oldest` string
    - `newest` string
  - `shares_outstanding_dates` object, nullable, required: The oldest and newest dates of the SEC's counts of shares outstanding used.
    - `oldest` string
    - `newest` string
  - `caps_as_of` string, nullable, required: The price date of the market caps that weight the lines; they enter no stock's figure.
  - `count` integer, required: How many stocks have a figure, the rows of stocks.
  - `columns` string[], required: The names of the places of each row of stocks.
  - `stocks` array[], required: One row per stock with a figure, most held first, as columns names them.
    - union[]
      - union
        - string
        - number
        - integer
        - boolean
  - `market` object, nullable, required: The line over every company: described below.
    - `companies` integer, required: Companies in the line, one per company on a company basis.
    - `cap_weighted_pct` number, nullable, required: Sum of each company's figure times its market cap over the sum of their caps, rounded down: the share of their combined market value held by the covered US ETFs, at least.
    - `mean_pct` number, nullable, required: The mean of the companies' figures, rounded down.
    - `median_pct` number, nullable, required: The median company's figure.
    - `p25_pct` number, nullable, required: The first quartile, by nearest rank.
    - `p75_pct` number, nullable, required: The third quartile, by nearest rank.
    - `companies_without_cap` integer, required: Companies without a market cap, in the mean and quartiles and left out of cap_weighted_pct.
    - `cap_b` number, nullable, required: The companies' combined market cap, in billions of dollars.
  - `sectors` object[], required: The line of each sector with at least 5 companies, by name: the same fields and sector.
    - `sector` string, required: The sector, as the price data names it.
    - `companies` integer, required: Companies in the line, one per company on a company basis.
    - `cap_weighted_pct` number, nullable, required: Sum of each company's figure times its market cap over the sum of their caps, rounded down: the share of their combined market value held by the covered US ETFs, at least.
    - `mean_pct` number, nullable, required: The mean of the companies' figures, rounded down.
    - `median_pct` number, nullable, required: The median company's figure.
    - `p25_pct` number, nullable, required: The first quartile, by nearest rank.
    - `p75_pct` number, nullable, required: The third quartile, by nearest rank.
    - `companies_without_cap` integer, required: Companies without a market cap, in the mean and quartiles and left out of cap_weighted_pct.
    - `cap_b` number, nullable, required: The companies' combined market cap, in billions of dollars.
  - `class_basis_left_out` integer, required: How many figures of one class alone are in stocks and left out of the lines.
  - `concentration_min_funds` integer, required: The fewest funds counted for a top3_share_pct.
  - `concentration_not_published` object, required: How many stocks have a null top3_share_pct, by reason (refusals of ti-ownership-index/1 in methods.json).
  - `held_back` object, nullable, required: Set when tonight's ledger was held back by its checks: the index then reads the last ledger that passed.
  - `failed` boolean, required: True when the index could not be computed tonight: no rows and no lines, the history as it was.
  - `history` string, required: The daily history, with the changes over 5 and 20 market days (history terms).
  - `csv` string, required: The rows of stocks as CSV, the same columns.
  - `note` string, required: How to read the file.
  - `cite_as` string, nullable, required: A citation line: the index, its date, the market line and this file's address.
  - `cite_html` string, required: The credit as HTML: a link to this file, then its address.
  - `docs` string, required: Where the file is documented.
  - `license` string, required: CC BY 4.0.
  - `attribution` string, required: Credit TickerInside with a link to this file, or to the page that shows the figure, wherever the medium allows a link, and by name where it does not. How you mark the link is up to you.

## Other responses

- `304`: Not modified: the ETag of your copy, sent in If-None-Match, is still current. Files are cached five minutes.
- `503`: The file could not be served just then: retry after a minute. uptime says whether the site fails its own checks.

---

[API](https://skmtc.dev/tickerinside/apis/tickerinside-api.md) · [All operations](https://skmtc.dev/tickerinside/apis/tickerinside-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tickerinside/apis/tickerinside-api/revisions/66a3e0d66a02?raw)
