Knowledge Base/Does Massive have historical float data?

Does Massive have historical float data?

No. Massive returns only the latest free float for each stock, one record per ticker, so there is no float history and no way to ask for the float on a past date. The float endpoint is included in every Stocks plan, including the free Basic plan.

A point-in-time float series for US stocks is not something the Massive float endpoint, /stocks/vX/float, can give you, and the request that looks as if it should does not fail. Add a date to the request and the endpoint ignores it and returns the latest record, so a backtest that asks for the float on a past date gets today's value without any error.

Applies to

  • Plans: every Stocks plan, including the free Basic plan, per the Float documentation.
  • Endpoints: /stocks/vX/float.
  • Asset classes: US stocks.

How to read the latest float

curl -X GET "https://api.massive.com/stocks/vX/float?ticker=BRK.B&apiKey=YOUR_API_KEY"

Response

{
  "status": "OK",
  "results": [
    {
      "ticker": "BRK.B",
      "free_float": 1387477847,
      "effective_date": "2026-09-23",
      "free_float_percent": 98.5
    }
  ]
}

effective_date is the effective date of that float measurement, and it is the only date on the record: there is no separate field for when the value was last checked. The date differs from ticker to ticker. Once a newer measurement replaces this one, your response shows the newer date and value.

What a past date returns

A past date on the Massive float endpoint returns the same latest record, because the endpoint has no date parameter and ignores a parameter it does not recognize:

curl -X GET "https://api.massive.com/stocks/vX/float?ticker=BRK.B&date=2020-01-02&apiKey=YOUR_API_KEY"

Response

{
  "status": "OK",
  "results": [
    {
      "ticker": "BRK.B",
      "free_float": 1387477847,
      "effective_date": "2026-09-23",
      "free_float_percent": 98.5
    }
  ]
}

The request for 2 January 2020 returns the measurement effective on 23 September 2026. Filters on effective_date, such as effective_date.lte, are ignored the same way. Read effective_date on every response: when it is later than the date you wanted, the value is not a historical one.

How to build a float history yourself

A float history from Massive has to be collected going forward, because the float endpoint keeps no earlier values:

  1. Request the whole set on a schedule, such as daily, with /stocks/vX/float?limit=5000, and follow next_url until it is absent.
  2. Store each record keyed on ticker and effective_date.
  3. When a ticker's effective_date changes, add a row rather than overwriting the old one.

A history built this way starts on the day you begin collecting. Earlier measurements are not available from Massive.

Free float is not shares outstanding

Free float on Massive is a narrower count than shares outstanding. The Float documentation excludes shares held by founders, officers and directors, controlling shareholders, employee plans, restricted or locked-up holdings and any shareholder owning 5% or more, among others. Share counts and market cap come from the ticker details endpoint, which the articles under Related explain.

Why this happens

Massive's float dataset holds one record per ticker, the latest measurement, which is what the documentation describes: "Retrieve the latest free float for a specified stock ticker." A new measurement replaces the previous one rather than being added beside it. The documentation also notes that float figures "may reflect ownership changes with a reporting lag, since they are based on publicly available disclosures and ownership information rather than real-time trading activity."

If you see an error

An empty results array with HTTP 200 means there is no float record for that ticker.

A record whose effective_date is later than the date you asked for is the latest record. The date parameter was ignored, not applied.

sort accepts only ticker and effective_date. Any other column returns HTTP 400 with Invalid query parameter: 'sort'. Expected one of [ticker, effective_date], followed by the value you sent.

Related


Was this article helpful?

Modernizing Wall St.

Reimagining financial market data for the 21st century.

Schedule a demo

Talk with our market data experts

Recommended

Can't find the answer you're looking for? Contact our team.
  • Title
    Are all indices available through the basic subscription tier?
    Data Coverage Category

    Data Coverage

    Indices Category

    Indices

    Description
    No, and the ones it withholds are the famous ones: SPX, DJI, RUT and VIX all need a paid Indices tier. Basic still reaches more than 10,000 of the 13,000-odd indices Massive publishes, and NDX and the Nasdaq Composite are among them.
  • Title
    Does Massive offer dark pool data?
    Data Coverage Category

    Data Coverage

    Stocks Category

    Stocks

    Description
    Yes. Off-exchange prints, which include dark pool executions, arrive on the ordinary trades feed and are identified by an exchange ID of 4. There is no separate dark pool endpoint, and no way to tell which individual venue a print came from.
  • Title
    Does Massive offer pre-market and after-hours data?
    FAQ Category

    FAQ

    Stocks Category

    Stocks

    Description
    Yes. Every extended-hours trade and quote is published, from 04:00 to 20:00 Eastern. There is no session parameter, so you select a session with timestamps, and expect far fewer aggregate bars outside regular hours because many extended-hours trades are odd lots that cannot set a price.