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>",
"type": "activist",
"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
}
],
"next_page_url": "<string>"
}{
"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."
}Datasets
Activist Investor API (SEC Schedule 13D)
Activist investor stakes in US public companies from SEC Schedule 13D filings: 2,400+ companies and 2,900+ activist filers since January 2025, updated within about 1 minute.
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>",
"type": "activist",
"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
}
],
"next_page_url": "<string>"
}{
"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 Financial Datasets activist ownership API returns the activist stakes in US public companies, from SEC Schedule 13D filings. It covers 2,400+ companies and 2,900+ activist filers since January 2025, updated within about 1 minute. Every filing is parsed directly from SEC EDGAR (data provenance). You can call it as a REST endpoint with an API key, or pay per request with x402. Pricing starts at $20. 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?
Coverage
| Companies | Activist Filers | History | Updated |
|---|---|---|---|
| 2,400+ | 2,900+ | Since January 2025 | Within ~1 minute |
Two Ways to Query
Provide exactly one ofticker or filer_cik:
ticker— who holds activist stakes in this companyfiler_cik— what stakes does this activist hold, across companies
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 aGET request to:
https://api.financialdatasets.ai/activist-ownership/tickers/
Available Filers
You can look up activist filers (and their CIKs) by owner name with aGET 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:- Add your API key to the header of the request as
X-API-KEY. - Add query params like
tickerandlimitto filter the data. - Execute the API request.
Filtering the Data
You can filter the data byticker 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_ltefiling_date_ltfiling_date_gtefiling_date_gtfiling_date
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')
FAQ
What is a Schedule 13D?
An investor files a Schedule 13D after crossing 5% ownership of a company with intent to influence control, for example through a proxy fight, a push for a sale, or board seats.How fast do new 13D filings show up?
Within about 1 minute of reaching SEC EDGAR.How far back does the data go?
To January 2025, when the SEC’s structured-data mandate for Schedules 13D and 13G took effect.Can an AI agent use this data?
Yes. Claude, ChatGPT, Cursor, and other MCP clients reach the same 13D stakes through the Financial Datasets MCP server, which serves them from the beneficial ownership API withtype=activist. An agent with a wallet can also pay per request with x402, with no account.