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.
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?
| Filer | Requirement |
|---|---|
| Officers | CEO, CFO, COO, and other executive officers |
| Directors | Board members and independent directors |
| 10% owners | Beneficial owners of 10%+ of a class of stock |
| Deadline | Within 2 business days of the transaction |
Deadlines & coverage
| Aspect | Detail |
|---|---|
| Trigger | Filed after each reportable transaction |
| Deadline | 2 business days after the trade |
| Coverage | August 2002 onward (Sarbanes-Oxley) |
| Amendments | Form 4/A corrects share counts or prices |
Key data fields
A sample of the structured fields returned for Form 4 data.
| Field | Description |
|---|---|
transactionCode | P (buy), S (sell), A (grant), and more |
transactionShares | Number of shares traded |
transactionPricePerShare | Execution price, when disclosed |
transactionValue | Computed dollar value of the trade |
reporterName / officerTitle | Insider identity and role |
sharesOwnedFollowingTransaction | Post-trade ownership |
Related API endpoints
Deep-link into the interactive reference to try these live.
Frequently asked questions
What is the Form 4 API?
How do I track insider buying?
/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?
How fast is Form 4 data available?
Can I get the full trading history of one insider?
Build with the Form 4 API
Create a free account, grab an API key, and make your first request in under a minute.