Skip to main content
GET
/
activist-ownership
Get activist stakes
curl --request GET \
  --url https://api.financialdatasets.ai/activist-ownership \
  --header 'X-API-KEY: <api-key>'
import requests

url = "https://api.financialdatasets.ai/activist-ownership"

headers = {"X-API-KEY": "<api-key>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};

fetch('https://api.financialdatasets.ai/activist-ownership', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
<?php

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://api.financialdatasets.ai/activist-ownership",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "X-API-KEY: <api-key>"
  ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.financialdatasets.ai/activist-ownership"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("X-API-KEY", "<api-key>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
HttpResponse<String> response = Unirest.get("https://api.financialdatasets.ai/activist-ownership")
  .header("X-API-KEY", "<api-key>")
  .asString();
require 'uri'
require 'net/http'

url = URI("https://api.financialdatasets.ai/activist-ownership")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'

response = http.request(request)
puts response.read_body
{
  "activist_owners": [
    {
      "ticker": "<string>",
      "issuer_name": "<string>",
      "issuer_cik": "<string>",
      "issuer_cusip": "<string>",
      "security_class_title": "<string>",
      "filer_cik": "<string>",
      "reporting_person_name": "<string>",
      "reporting_person_cik": "<string>",
      "type_of_reporting_person": "<string>",
      "citizenship_or_place_of_organization": "<string>",
      "form_type": "<string>",
      "is_amendment": true,
      "amendment_number": 123,
      "filing_date": "2023-12-25",
      "event_date": "2023-12-25",
      "accession_number": "<string>",
      "sole_voting_power": 123,
      "shared_voting_power": 123,
      "sole_dispositive_power": 123,
      "shared_dispositive_power": 123,
      "aggregate_amount_beneficially_owned": 123,
      "percent_of_class": 123,
      "purpose_of_transaction": "<string>",
      "rule_filed_under": "<string>",
      "is_latest": true
    }
  ]
}
{
  "error": "Bad Request",
  "message": "Invalid request parameters"
}
{
  "error": "Unauthorized",
  "message": "Invalid API key provided"
}
{
  "error": "Payment Required",
  "message": "This endpoint requires a paid subscription. Please upgrade your plan."
}

Overview

The activist ownership API gives you every activist stake in US public companies, sourced from SEC Schedule 13D filings. A Schedule 13D is filed when an investor crosses 5% ownership of a company with intent to influence control — a proxy fight, a push for a sale, board seats, strategy changes. It is one of the fastest-moving signals in public markets, and new filings appear on this endpoint within about a minute of hitting SEC EDGAR. You can answer questions like:
  • Who holds activist stakes in this company right now?
  • What companies does a given activist currently hold?
  • When did an activist first cross 5%, and how has the stake changed since?
To get started, please create an account and grab your API key at financialdatasets.ai. You will use the API key to authenticate your API requests.

Coverage

CompaniesActivist FilersHistoryUpdated
2,400+2,900+Since January 2025Within ~1 minute
Coverage begins in January 2025, when the SEC’s structured-data mandate for Schedules 13D and 13G took effect.

Two Ways to Query

Provide exactly one of ticker or filer_cik:
  • ticker — who holds activist stakes in this company
  • filer_cik — what stakes does this activist hold, across companies
By default, each stake’s current state is returned (the most recent filing in its amendment chain). Add history=true to get the full chain of original filings and amendments.

Available Tickers

You can fetch a list of companies with activist stakes with a GET request to: https://api.financialdatasets.ai/activist-ownership/tickers/

Available Filers

You can look up activist filers (and their CIKs) by owner name with a GET request to: https://api.financialdatasets.ai/activist-ownership/filers/?name=saba The name parameter matches owner names by prefix (case-insensitive). The response includes a total count of all matches alongside the returned page; the page size is controlled with limit (default 100, max 1000). If total is larger than the page you received, narrow the search with name.

Getting Started

There are only 3 steps for making a successful API call:
  1. Add your API key to the header of the request as X-API-KEY.
  2. Add query params like ticker and limit to filter the data.
  3. Execute the API request.

Filtering the Data

You can filter the data by ticker or filer_cik (exactly one, required), plus history, limit, and filing_date. Note: by default, limit is 10 (max 1000) and history is false (current stake state only). The filing_date parameter is used to filter by when filings were submitted. For example, you can include filters like filing_date_lte=2026-06-30 and filing_date_gte=2026-01-01 to get filings from the first half of 2026. The available filing_date operations are:
  • filing_date_lte
  • filing_date_lt
  • filing_date_gte
  • filing_date_gt
  • filing_date
Looking for passive 5% holders too? The beneficial ownership API returns both activist (13D) and passive (13G) stakes, with a type filter.

Example (by ticker)

Activist Ownership
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'BB'   # stock ticker
limit = 50      # number of rows to return

# create the URL
url = (
    f'https://api.financialdatasets.ai/activist-ownership'
    f'?ticker={ticker}'
    f'&limit={limit}'
)

# make API request
response = requests.get(url, headers=headers)

# parse activist_owners from the response
activist_owners = response.json().get('activist_owners')

Example (by filer)

Activist Ownership
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
filer_cik = '1510281'   # Saba Capital's SEC CIK
limit = 50              # number of rows to return

# create the URL
url = (
    f'https://api.financialdatasets.ai/activist-ownership'
    f'?filer_cik={filer_cik}'
    f'&limit={limit}'
)

# make API request
response = requests.get(url, headers=headers)

# parse activist_owners from the response
activist_owners = response.json().get('activist_owners')

Example (full stake history)

Activist Ownership
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'BB'       # stock ticker
history = 'true'    # include the full amendment chain

# create the URL
url = (
    f'https://api.financialdatasets.ai/activist-ownership'
    f'?ticker={ticker}'
    f'&history={history}'
)

# make API request
response = requests.get(url, headers=headers)

# parse activist_owners from the response
activist_owners = response.json().get('activist_owners')

Authorizations

X-API-KEY
string
header
required

API key for authentication.

Query Parameters

ticker
string

The ticker symbol of the subject company. Provide ticker or filer_cik, not both.

filer_cik
string

The SEC CIK of the filer (the beneficial owner). Provide ticker or filer_cik, not both. Use the /activist-ownership/filers endpoint to look up CIKs by owner name.

history
boolean
default:false

When true, returns the full amendment history of each stake instead of only its current state.

filing_date
string<date>

Filter by exact filing date in YYYY-MM-DD format.

filing_date_gte
string<date>

Filter by filing date greater than or equal to this date (YYYY-MM-DD).

filing_date_lte
string<date>

Filter by filing date less than or equal to this date (YYYY-MM-DD).

filing_date_gt
string<date>

Filter by filing date greater than this date (YYYY-MM-DD).

filing_date_lt
string<date>

Filter by filing date less than this date (YYYY-MM-DD).

limit
integer
default:10

The maximum number of rows to return (default: 10, max: 1000).

Response

Activist ownership response

activist_owners
object[]