Introducing

Insider and Institutional Ownership data via Massive’s APIs (forms 3, 4, and 13F)

Apr 30, 2026

Most owners of a public stock are invisible by design. The retail investor buying 10 shares of Apple in their brokerage account has no SEC disclosure obligation, and likely never will. Two groups are the exception.

The first group is insiders. Directors, officers, and any holder of more than 10% of a class of registered equity securities qualify as ‘reporting insiders’ under Section 16 of the Exchange Act, and are required to disclose their holdings and transactions via forms 3 and 4.

The second group is institutional managers. Investment advisers, banks, insurers, broker-dealers, pension funds, and trust departments with $100M+ in Section 13(f) securities under management have to report their full qualifying portfolios via form 13F.

These filings cover the entire reporting surface:

Form 3 is the initial statement of beneficial ownership for an insider, filed within 10 days of someone crossing the threshold.

Form 4 is the statement of changes in beneficial ownership by an insider, filed within two business days of a transaction. It covers buys, sells, grants, and option exercises.

Form 13F is the quarterly holdings report from qualifying institutional managers, filed within 45 days of each quarter's end.

Massive now exposes all three disclosure datasets as REST endpoints, with the same authentication pattern, the same JSON response shape, and direct links back to the source filings on EDGAR. Whether you're tracking a single officer's open-market sales on Form 4 or reconstructing a fund's full quarterly book from 13F, the request looks the same and the response parses the same way.

Form 3: Initial statement of beneficial ownership

Form 3 is filed the first time a person becomes subject to Section 16 reporting at a public company. A new CFO joins, a new director is appointed, or an investor crosses the 10% threshold. Each event triggers a Form 3 disclosing the insider's starting position, due within 10 days.

Coverage in Massive's dataset begins in March 2017, which means you can pull the full day-one insider roster of every company that has IPO'd since. Coinbase, for example, went public on April 14, 2021, and the initial Form 3 filings were available two days later.

Request Example

curl -G "https://api.massive.com/stocks/filings/vX/form-3" \
  "tickers=COIN" \
  "limit=1" \
  "sort=filing_date.asc" \
  -H "Authorization: Bearer ${API_KEY}"

Response Example

{
  "results": [
    {
      "filing_date": "2021-04-16",
      "form_type": "3/A",
      "issuer_name": "Coinbase Global, Inc.",
      "tickers": ["COIN"],
      "owner_name": "Armstrong Brian",
      "officer_title": "Chairman and CEO",
      "is_director": true,
      "is_officer": true,
      "is_ten_percent_owner": true,
      "security_title": "Class B Common Stock",
      "underlying_security_shares": 20220357,
      "direct_or_indirect": "I",
      "nature_of_ownership": "By The Brian Armstrong Living Trust"
    }
  ],
  "status": "OK"
}

The endpoint returns the structure of the position alongside the size: trusts, joint filers, direct vs. indirect ownership, security class, officer title, and role flags, all parsed into typed fields rather than left in the filing's XML wrapper. Full schema is in the Form 3 endpoint docs.

Coinbase's next Form 3 didn't land for nearly ten months. On February 4, 2022, Tobias Lütke (current CEO of Shopify) joined the board. The same endpoint surfaces it with one filter change.

Request Example

curl -G "https://api.massive.com/stocks/filings/vX/form-3" \
  "issuer_cik=0001679788" \
  "filing_date.gt=2021-04-30" \
  "limit=10" \
  "sort=filing_date.asc" \
  -H "Authorization: Bearer ${API_KEY}"

Response Example

{
  "filing_date": "2022-02-04",
  "period_of_report": "2022-02-02",
  "form_type": "3",
  "accession_number": "0001679788-22-000006",
  "issuer_name": "Coinbase Global, Inc.",
  "tickers": ["COIN"],
  "owner_name": "Lutke Tobias",
  "is_director": true,
  "is_officer": false,
  "is_ten_percent_owner": false,
  "security_type": "non_derivative",
  "security_title": "Class A Common Stock",
  "shares_owned": 25500,
  "direct_or_indirect": "I",
  "nature_of_ownership": "By 7910240 Canada Inc.",
  "footnotes": [
    {
      "id": "F1",
      "description": "These shares are held of record by 7910240 Canada Inc., of which the Reporting Person is the sole director. The Reporting Person disclaims beneficial ownership of the shares owned by 7910240 Canada Inc., except to the extent of his pecuniary interest therein, if any."
    }
  ],
  "filing_url": "https://www.sec.gov/Archives/edgar/data/1666546/0001679788-22-000006.txt"
}

The period_of_report of February 2, 2022 is the date Lütke joined the board, and the filing was submitted to the SEC two days later, well inside the 10-day Section 16 window. The is_director flag identifies the trigger. direct_or_indirect: "I" and the nature_of_ownership field show that his 25,500 Class A shares are held through 7910240 Canada Inc., his personal Canadian holding company, with the standard pecuniary-interest disclaimer captured in the footnote.

Form 3 is the starting-position disclosure: who is inside and what they hold the moment they become a reporting insider. Form 4 picks up from there, recording every transaction that follows.

Form 4: Changes in beneficial ownership

Form 4 must be filed before the end of the second business day after a transaction is executed. That makes it the timeliest of the three filings, the closest thing to a near-real-time view of what insiders are doing with their own equity.

Picking Coinbase back up: Lütke's Form 3 disclosed a starting position of 25,500 Class A shares held through 7910240 Canada Inc. The first Form 4 in his name landed six months later. On August 11, 2022, he bought another 3,930 shares of COIN on the open market at $97.24 through the same Canadian holding entity. The filing was in four days later.

Request Example

curl -G "https://api.massive.com/stocks/filings/vX/form-4" \
  "issuer_cik=0001679788" \
  "owner_cik=0001666546" \
  "transaction_code=P" \
  "limit=1" \
  "sort=filing_date.asc" \
  -H "Authorization: Bearer ${API_KEY}"

Response Example

{
  "filing_date": "2022-08-15",
  "transaction_date": "2022-08-11",
  "form_type": "4",
  "accession_number": "0001679788-22-000088",
  "issuer_name": "Coinbase Global, Inc.",
  "tickers": ["COIN"],
  "owner_name": "Lutke Tobias",
  "is_director": true,
  "is_officer": false,
  "is_ten_percent_owner": false,
  "security_type": "non_derivative",
  "security_title": "Class A Common Stock",
  "transaction_code": "P",
  "transaction_acquired_disposed": "A",
  "transaction_shares": 3930,
  "transaction_price_per_share": 97.24,
  "transaction_value": 382153.20,
  "shares_owned_following_transaction": 29430,
  "aff_10b5_one": null,
  "direct_or_indirect": "I",
  "nature_of_ownership": "By 7910240 Canada Inc.",
  "filing_url": "https://www.sec.gov/Archives/edgar/data/1679788/0001679788-22-000088.txt"
}

That's an open-market purchase (transaction_code: "P", transaction_acquired_disposed: "A") by a sitting director, executed in the same indirect holding vehicle disclosed on the Form 3. The shares_owned_following_transaction field carries the running total: 25,500 from the Form 3 + 3,930 newly purchased = 29,430. The aff_10b5_one field is null, meaning the filing didn't tag the trade as executed under a 10b5-1 plan.

Lütke kept buying. He filed 25 more Form 4s on COIN through February 9, 2023, each a similar weekly open-market purchase of roughly $360–390K through 7910240 Canada Inc., growing his position from 29,430 shares after the first buy to 208,830 by the last. The entire sequence falls out of the same query, just with the limit raised.

Transaction codes worth knowing for Form 4:

  • P is an open-market purchase. Often the strongest discretionary signal.
  • S is an open-market sale.
  • A is a grant or award.
  • M is an exercise of a derivative security.
  • F is shares withheld for tax on vesting.
  • G is a bona fide gift.

Investors care because Form 4 surfaces insider purchases within two business days. Sales need more context, since insiders can sell for liquidity, diversification, or a 10b5-1 plan adopted months earlier.

Filter transaction_code=P over a date range and you have every insider open-market purchase across the entire market for the window. The same owner_cik filter (as used above) walks every transaction by a single filer across every issuer they're inside. Role flags is_director, is_officer, and is_ten_percent_owner tell you which hat applies on each row. Sales need more context than purchases, since insiders sell for liquidity, diversification, or under a 10b5-1 plan adopted months earlier; the aff_10b5_one field surfaces that distinction when the filing carries it.

Form 13F: Institutional ownership

Form 13F is filed by every institutional investment manager that exercises investment discretion over $100M or more in 13(f) securities. The SEC's own examples include banks, insurance companies, broker-dealers, corporations, pension funds, advisers, and trust departments. The filing is quarterly and due within 45 days after each quarter's end. That makes it slower than Form 4 by design. It's a position snapshot, not a transaction feed.

The endpoint takes a filer_cik and a date range. To pull a single manager's full portfolio, query filer_cik over the relevant quarter's filing window. Within the response, filter by cusip to find a specific security across that manager's holdings. Full schema is in the Form 13F endpoint docs.

The institutional view of Coinbase tells a different story than the insider view, and ARK Investment Management makes the cleanest example. They were already a top-five institutional holder of COIN going into 2022, and they kept buying through the year that the price fell from $250 to $35. Below is their Q1 2022 holding, filed 19 days after quarter-end.

Request Example

curl -G "https://api.massive.com/stocks/filings/vX/13-F" \
  "filer_cik=0001697748" \
  "filing_date.gte=2022-04-01" \
  "filing_date.lte=2022-04-30" \
  "limit=1000" \
  -H "Authorization: Bearer ${API_KEY}"

Response Example

Filtered to CUSIP = "19260Q107"

[
  {
    "filer_cik": "0001697748",
    "accession_number": "0001104659-22-046976",
    "form_type": "13F-HR",
    "filing_date": "2022-04-19",
    "period": "2022-03-31",
    "issuer_name": "Coinbase Global Inc",
    "title_of_class": "Common Stock",
    "cusip": "19260Q107",
    "market_value": 1325745,
    "shares_or_principal_amount": 6982749,
    "shares_or_principal_type": "SH",
    "investment_discretion": "SOLE",
    "voting_authority_sole": 6382395,
    "voting_authority_shared": 464938,
    "voting_authority_none": 135416,
    "put_call": null
  },
  {
    "filer_cik": "0001697748",
    "accession_number": "0001104659-22-046976",
    "form_type": "13F-HR",
    "filing_date": "2022-04-19",
    "period": "2022-03-31",
    "issuer_name": "Coinbase Global Inc",
    "title_of_class": "Common Stock",
    "cusip": "19260Q107",
    "market_value": 418,
    "shares_or_principal_amount": 2200,
    "shares_or_principal_type": "SH",
    "investment_discretion": "SOLE",
    "voting_authority_sole": 2200,
    "voting_authority_shared": 0,
    "voting_authority_none": 0,
    "put_call": "Call"
  }
]

Each row is one position within one filing. The fields cover the position itself (market_value, shares_or_principal_amount, title_of_class), how the manager holds it (investment_discretion, the three voting-authority columns), whether it's an option position (put_call, populated for "Put" or "Call" and null for the underlying), and the form type (13F-HR for original, 13F-HR/A for amendments).

Two rows for the same CUSIP within the same accession: ARK held COIN as direct common stock (the first row, 6,982,749 shares at $1.326B market value) and separately reported 2,200 shares of underlying call options on the same security (the second row). Same issuer, same accession, two distinct position types. Group by cusip plus put_call to reconstruct the full economic exposure.

The accumulation story is what ties this back to Form 4. ARK's COIN position over six quarters:

Net add of ~6.3M shares over the same five-quarter window in which Lütke filed 26 weekly Form 4 buys through 7910240 Canada Inc. Two different disclosure regimes pointing at the same name, on different cadences.

Notes

period is the quarter-end the holdings reflect. filing_date is when the manager submitted to the SEC. They are different dates, and the gap can be up to 45 days. Use period for portfolio snapshots aligned across managers; use filing_date for "what landed in our window."

Holdings are identified by cusip, not ticker. COIN's CUSIP is 19260Q107. Match that across every manager's quarterly filings and you have the complete institutional ownership picture for Coinbase. NVDA's CUSIP appears in over two thousand 13F filings every quarter, by way of comparison.

A note on market_value units: pre-Q4 2023 13F-HR filings report market value in thousands of USD per the SEC's original instructions. Post-Q4 2023 filings, after the SEC's reporting threshold update, report in whole dollars. The dataset preserves the convention used in each filing. Sort by period and convert by quarter when comparing across that boundary.

Workflows across all three

The endpoints get more useful when used together. A few patterns they reveal in conjunction.

Insider buying alongside institutional accumulation

Pull every Form 4 with transaction_code=P across a date window. For each issuer that appears, query Form 13F over the same period and look at how reported share counts moved across managers. Names where insiders bought on the open market while institutions added to their positions are a small subset. The Lütke and ARK pair on Coinbase through 2022 is one of them: one director buying COIN weekly through a Canadian holding entity, one investment manager adding millions of shares quarter over quarter on the same CUSIP.

Activist arrival to ramp

A new Form 3 from a 10%+ owner who is neither a director nor an officer (is_ten_percent_owner: true, is_director: false, is_officer: false) is the moment an outside investor crossed the reporting threshold. Pull every subsequent Form 4 by the same owner_cik for the accumulation curve post-disclosure. Match against the issuer's Form 13F filings to see whether other managers added or trimmed in the quarters that followed.

Insider exits against institutional builds

Same logic in reverse. Pull every transaction_code=S filed by a single insider over a multi-year window. Pull Form 13F holdings on the same cusip across the matching quarters. Compare insider sales against institutional position changes period by period to see which side of the trade the institutions are on.

The same authentication pattern, the same filter syntax, and the same JSON response shape across all three endpoints. Joining across them is a query, not a parsing project.

Notes

Form 4 lands within two business days of the transaction. That makes it the timeliest of the three, but it is not a streaming feed. Poll on the cadence your use case requires.

Form 13F is filed within 45 days of quarter-end. Position data is up to seven weeks stale by the time it becomes public. Treat it as positioning context, not a trading signal.

To include amendments alongside originals, use form_type.any_of=3,3/A on Form 3, form_type.any_of=4,4/A on Form 4, and form_type.any_of=13F-HR,13F-HR/A on Form 13F.

Footnotes carry the rest of the context: trust ownership structures, weighted-average prices across multi-day fills, FX conversions, 10b5-1 plan disclosures, beneficial-ownership disclaimers. They are returned as a structured array on each row.

Disclaimer

This content is for educational purposes only. Nothing in this post constitutes investment advice or a recommendation to buy or sell any securities or other financial instruments. Massive is a market data provider, not a broker-dealer, exchange, or investment adviser. Market data accessed through Massive may originate from third-party exchanges and data providers or may be derived or calculated by Massive; in either case, it is subject to the applicable terms of your Massive subscription agreement. The data and code samples provided by Massive are offered on an "as-is" basis without any warranty of accuracy, completeness, or timeliness. You are solely responsible for your use of the data provided by Massive and for compliance with all applicable terms and conditions, laws, and data licensing requirements.

From the blog

See what's happening at Massive