F Finsider
SEC Form 4 API

Form 4 API (Insider Transactions)

Capture every insider trade within minutes of filing. The Form 4 API turns officer, director, and 10% owner transactions into clean, queryable JSON for signals and alerts.

JSON responsesOpenAPI documentedcURL / Python / JS / GoFree tier available

What is Form 4?

Form 4 is the insider transaction report. Officers, directors, and beneficial owners of more than 10% of a company’s stock must report their purchases and sales within two business days.

Because insiders know their companies best, clustered buying or unusual selling is one of the most-watched signals in the market.

The Finsider Form 4 API decodes transaction codes, share counts, prices, and post-transaction ownership into structured data ready for scoring, dashboards, and AI copilots.

Fetch Form 4 filings

List recent Form 4 filings, filterable by company, ticker, and date.

curl -s "https://api.secapi.dev/v1/filings?formTypes=4&limit=20" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/filings?formTypes=4&limit=20",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/filings?formTypes=4&limit=20", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/filings?formTypes=4&limit=20", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Stream recent insider buys

Pull open-market purchases (code P) above a dollar threshold to flag conviction.

curl -s "https://api.secapi.dev/v1/insiders/transactions?transactionCode=P&minValue=100000&limit=50" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/insiders/transactions?transactionCode=P&minValue=100000&limit=50",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/insiders/transactions?transactionCode=P&minValue=100000&limit=50", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/insiders/transactions?transactionCode=P&minValue=100000&limit=50", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Get one company’s insider activity

Fetch all insider transactions for a single ticker.

curl -s "https://api.secapi.dev/v1/insiders/AAPL/transactions" \
  -H "x-api-key: $SECAPI_KEY"
import requests

resp = requests.get(
    "https://api.secapi.dev/v1/insiders/AAPL/transactions",
    headers={"x-api-key": "YOUR_API_KEY"},
    timeout=30,
)
resp.raise_for_status()
data = resp.json()
print(data)
const res = await fetch("https://api.secapi.dev/v1/insiders/AAPL/transactions", {
  method: "GET",
  headers: { "x-api-key": process.env.SECAPI_KEY },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
console.log(data);
package main

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

func main() {
	req, _ := http.NewRequest("GET", "https://api.secapi.dev/v1/insiders/AAPL/transactions", nil)
	req.Header.Set("x-api-key", os.Getenv("SECAPI_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		log.Fatal(err)
	}
	defer resp.Body.Close()

	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}

Who files Form 4?

FilerRequirement
OfficersCEO, CFO, COO, and other executive officers
DirectorsBoard members and independent directors
10% ownersBeneficial owners of 10%+ of a class of stock
DeadlineWithin 2 business days of the transaction

Deadlines & coverage

AspectDetail
TriggerFiled after each reportable transaction
Deadline2 business days after the trade
CoverageAugust 2002 onward (Sarbanes-Oxley)
AmendmentsForm 4/A corrects share counts or prices

Key data fields

A sample of the structured fields returned for Form 4 data.

FieldDescription
transactionCodeP (buy), S (sell), A (grant), and more
transactionSharesNumber of shares traded
transactionPricePerShareExecution price, when disclosed
transactionValueComputed dollar value of the trade
reporterName / officerTitleInsider identity and role
sharesOwnedFollowingTransactionPost-trade ownership

Frequently asked questions

What is the Form 4 API?
An endpoint that returns SEC Form 4 insider transactions — buys and sells by officers, directors, and 10% owners — as structured JSON, filterable by code, role, value, and date.
How do I track insider buying?
Query /v1/insiders/transactions?transactionCode=P&minValue=100000 to stream open-market purchases above a threshold, or use the top-buying activity endpoint.
What do the transaction codes mean?
P is an open-market purchase, S a sale, A an award/grant, M an option exercise, and F a tax-withholding disposition, among others. The API returns the raw code so you can map it to your own logic.
How fast is Form 4 data available?
Insiders must file within two business days of a trade, and filings are indexed within minutes of SEC acceptance.
Can I get the full trading history of one insider?
Yes — use the transactions-by-person endpoint with the insider’s CIK to retrieve their complete reported history.

Build with the Form 4 API

Create a free account, grab an API key, and make your first request in under a minute.