curl --request GET \
--url https://api.unusualwhales.com/api/politics/fec/companies \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unusualwhales.com/api/politics/fec/companies"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unusualwhales.com/api/politics/fec/companies', 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.unusualwhales.com/api/politics/fec/companies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.unusualwhales.com/api/politics/fec/companies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.unusualwhales.com/api/politics/fec/companies")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unusualwhales.com/api/politics/fec/companies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"cycle": 2026,
"data": [
{
"company_name": "HONEYWELL INTERNATIONAL INC",
"cycle": 2026,
"employee_contribution_count": 12,
"employee_dem_total": "3280.00",
"employee_rep_total": "0.00",
"employee_total_estimated": "3280.00",
"lobbying_total": "5230000.00",
"other_total": "7000.00",
"pac_contribution_count": 915,
"pac_count": 1,
"pac_dem_total": "821220.00",
"pac_rep_total": "953280.00",
"pac_total": "1781500.00",
"ticker": "HON"
}
],
"limit": 50,
"page": 1
}{
"code": "authentication_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"expected_format": "uuid",
"message": "The API token provided is not in the expected format. Unusual Whales API tokens are UUIDs, such as 123e4567-e89b-12d3-a456-426614174000.",
"reason": "malformed_token",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"code": "missing_access",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "The API token provided is valid but is not permitted to access this route.",
"reason": "route_not_permitted",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"msg": "Invalid path input: MSFT12 (valid example: AAPL) - Invalid query input(s): date=2023-02-140 (valid example: date=2024-01-18)",
"path": "/api/darkpool/MSFT12",
"query": "date=2023-02-140",
"url": "localhost:4000/api/darkpool/MSFT12?date=2023-02-140"
}"Something went wrong"Companies with political activity
Every public company with tracked political activity: confirmed corporate PAC count, PAC-tier contribution totals, employee-tier estimates (estimated contributions by self-reported employees, kept separate from PAC numbers), party split, and lobbying spend for the cycle. Sorted by PAC total.
curl --request GET \
--url https://api.unusualwhales.com/api/politics/fec/companies \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.unusualwhales.com/api/politics/fec/companies"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.unusualwhales.com/api/politics/fec/companies', 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.unusualwhales.com/api/politics/fec/companies",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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.unusualwhales.com/api/politics/fec/companies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
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.unusualwhales.com/api/politics/fec/companies")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.unusualwhales.com/api/politics/fec/companies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"cycle": 2026,
"data": [
{
"company_name": "HONEYWELL INTERNATIONAL INC",
"cycle": 2026,
"employee_contribution_count": 12,
"employee_dem_total": "3280.00",
"employee_rep_total": "0.00",
"employee_total_estimated": "3280.00",
"lobbying_total": "5230000.00",
"other_total": "7000.00",
"pac_contribution_count": 915,
"pac_count": 1,
"pac_dem_total": "821220.00",
"pac_rep_total": "953280.00",
"pac_total": "1781500.00",
"ticker": "HON"
}
],
"limit": 50,
"page": 1
}{
"code": "authentication_required",
"documentation_url": "https://api.unusualwhales.com/docs",
"expected_format": "uuid",
"message": "The API token provided is not in the expected format. Unusual Whales API tokens are UUIDs, such as 123e4567-e89b-12d3-a456-426614174000.",
"reason": "malformed_token",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"code": "missing_access",
"documentation_url": "https://api.unusualwhales.com/docs",
"message": "The API token provided is valid but is not permitted to access this route.",
"reason": "route_not_permitted",
"request_id": "GNI_YTC1CRnw2LACGBvE",
"retryable": false,
"support_email": "[email protected]",
"token_url": "https://unusualwhales.com/dashboard/api"
}{
"msg": "Invalid path input: MSFT12 (valid example: AAPL) - Invalid query input(s): date=2023-02-140 (valid example: date=2024-01-18)",
"path": "/api/darkpool/MSFT12",
"query": "date=2023-02-140",
"url": "localhost:4000/api/darkpool/MSFT12?date=2023-02-140"
}"Something went wrong"Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Two-year election cycle, e.g. 2026. Defaults to the current cycle.
Minimum combined total.
Page number (default 1).
Rows per page (default 50, max 200).
Response
Public companies with tracked political activity for a cycle. PAC-tier totals come from confirmed corporate PAC mappings; employee-tier totals are estimates from self-reported donor employers and are kept separate.
Was this page helpful?
