InsiderPulse API

Programmatic access to European insider (PDMR) transaction data across 8 markets.

Authentication

All endpoints require an API key. Pass it via the Authorization header:

Authorization: Bearer ip_your_api_key_here

Generate API keys in your account settings. Free users get 1 key (50 req/day). Pro users get up to 3 keys (500 req/day).

Rate Limits

Every response includes rate limit headers:

X-RateLimit-Limit: 500
X-RateLimit-Remaining: 487
X-RateLimit-Reset: 1741305600

Limits reset at midnight UTC. When exceeded, you receive a 429 response with a Retry-After header.

Endpoints

GET/api/v1/transactions

Search insider transactions with filtering, sorting, and pagination.

ParameterTypeDescription
companystringSearch by company name, ISIN, or ticker
insiderstringSearch by insider name
countrystringComma-separated country codes: DE,GB,SE
typestringbuy or sell
clusterbooleanOnly cluster transactions (3+ insiders)
min_valuenumberMinimum transaction value in EUR
fromstringStart date (YYYY-MM-DD)
tostringEnd date (YYYY-MM-DD)
rolestringFilter by insider role (e.g. CEO)
mcapstringMarket cap tier: small,mid,large,mega
min_pct_mcapnumberMin transaction value as % of market cap
csuitebooleanOnly C-suite insiders (CEO, CFO, etc.)
watchlistbooleanOnly your watchlist companies
sortstringdate, value, or shares (default: date)
orderstringasc or desc (default: desc)
pagenumberPage number (default: 1)
per_pagenumberResults per page, max 100 (default: 50)
formatstringjson (default) or csv
curl -H "Authorization: Bearer ip_xxx" \
  "https://www.insiderpulse.io/api/v1/transactions?country=DE,SE&type=buy&min_value=50000"
GET/api/v1/companies

Search and list companies.

ParameterTypeDescription
qstringSearch by name, ISIN, or ticker
countrystringComma-separated country codes
sectorstringFilter by sector
sortstringname, market_cap, or last_activity
pagenumberPage number
per_pagenumberResults per page
GET/api/v1/companies/{isin}

Get company detail with insider activity stats and signal flags.

curl -H "Authorization: Bearer ip_xxx" \
  "https://www.insiderpulse.io/api/v1/companies/DE000TUAG505"
GET/api/v1/signals/clusters

Active cluster signals โ€” 3+ insiders trading in the same direction.

ParameterTypeDescription
periodstring7d, 30d, or 90d (default: 7d)
typestringbuy or sell
countrystringCountry code filter
GET/api/v1/signals/dip-buys

Insider buys after a stock price drop.

ParameterTypeDescription
periodstring7d, 30d, or 90d (default: 30d)
min_dip_percentnumberMinimum price drop % (default: 10)
GET/api/v1/signals/outsized-moves

Transactions that are large relative to market cap.

ParameterTypeDescription
periodstring7d, 30d, or 90d (default: 7d)
GET/api/v1/signals/high-conviction

Insider buys when stock is trading above its 12-month average.

ParameterTypeDescription
periodstring7d, 30d, or 90d (default: 30d)
GET/api/v1/export

Bulk export transactions as CSV or JSON. Costs 10 rate limit units.

ParameterTypeDescription
fromstringStart date (YYYY-MM-DD)
tostringEnd date (YYYY-MM-DD)
countrystringCountry filter
typestringbuy or sell
per_pagenumberMax rows, up to 10000 (default: 1000)
formatstringcsv (default) or json
GET/api/v1/me

Your profile, tier, rate limit status, and watchlist.

Code Examples

Python

import requests

API_KEY = "ip_your_key_here"
BASE = "https://www.insiderpulse.io/api/v1"

# Get recent insider buys in Germany
r = requests.get(f"{BASE}/transactions", headers={
    "Authorization": f"Bearer {API_KEY}"
}, params={"country": "DE", "type": "buy", "per_page": 20})

for tx in r.json()["data"]:
    print(f"{tx['date']} {tx['company']['name']} - {tx['insider']['name']} bought {tx['value']} EUR")

JavaScript

const API_KEY = "ip_your_key_here";
const BASE = "https://www.insiderpulse.io/api/v1";

const res = await fetch(`${BASE}/transactions?country=SE&type=buy`, {
  headers: { Authorization: `Bearer ${API_KEY}` },
});
const { data, meta } = await res.json();
console.log(`${meta.total} transactions found`);

Webhook Verification

Webhook payloads include an HMAC-SHA256 signature. Verify it using your webhook secret:

import hmac, hashlib

def verify_signature(body: bytes, timestamp: str, signature: str, secret: str) -> bool:
    payload = f"{timestamp}.{body.decode()}"
    expected = "sha256=" + hmac.new(
        secret.encode(), payload.encode(), hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

MCP Server

Use InsiderPulse with Claude, GPT, and other AI assistants via the MCP protocol.

// claude_desktop_config.json
{
  "mcpServers": {
    "insiderpulse": {
      "command": "npx",
      "args": ["-y", "insiderpulse-mcp"],
      "env": {
        "INSIDERPULSE_API_KEY": "ip_your_key_here"
      }
    }
  }
}

Error Codes

CodeStatusDescription
unauthorized401Invalid or missing API key
forbidden403Feature requires a higher tier
not_found404Resource not found
rate_limit_exceeded429Daily request limit exceeded
internal_error500Unexpected server error

OpenAPI spec available at /api/v1/openapi.json