Programmatic Policy Data
A REST API and bulk datasets covering European MAR 19 insider transactions, TED tenders and lobbying meetings, linked to companies. Ticker, ISIN and LEI are available for mapped entities, a subset that is still growing.
Real extract: EU contract awards from the last 12 months, with source links
// Example payload shape (invented values)
{
"event_type": "entity_resolution_match",
"timestamp": "2026-08-07T12:00:01.421Z",
"data": {
"entity_name": "TechLobbying Partners GmbH",
"matched_individual": {
"name": "Klaus Schmidt",
"former_role": "MEP (DE)",
"committee": "IMCO (Internal Market)",
"resignation_date": "2026-03-15"
},
"match_method": "name_match",
"active_dossiers": ["AI Act Implementation", "Digital Markets Act"]
}
}Structured Policy Datasets
Explore exactly how our normalized datasets map directly to algorithmic trading strategies.
Datasets
Corporate Entities
Parent corporate entities. Responses include a `security` array (ticker, ISIN, LEI) for entities with an accepted mapping.
Fields
idnamesectorheadquarters_countrycreated_atcurl -H "Authorization: Bearer $ALTDATAEU_API_KEY" \ "https://www.altdataeu.com/api/v1/corporate-entities?limit=20&offset=0"
Entity Resolution Engine
Messy EU registers output strings like "Airbus Operations GmbH". We map registered names to corporate entities and, where we can, to LEIs and tickers. Coverage is still growing, so check a sample for the companies you care about.
First-Seen Timestamps
Records carry the time we first observed them, which lets you restrict a backtest to what was visible on a given date. Source registers can still overwrite history, so treat earlier periods with care.
Daily Ingestion
Scrapers run on a daily schedule. New TED notices and insider filings appear in the terminal and the REST API after the next run, so this is a daily dataset, not a tick feed.
Python walkthrough: EU public procurement, last 12 months
A real extract of contract awards from the production database, each row with a link to its TED notice. The notebook loads it, aggregates it by month and currency, and finds the rows linked to a listed security. It uses no prices and shows no performance.
# 1. Load a real extract of EU contract awards (last 12 months)
import pandas as pd
url = "https://www.altdataeu.com/samples/eu_procurement_contracts_12m_sample.csv"
df = pd.read_csv(url, parse_dates=["award_date", "ingested_at"])
print(f"{len(df):,} contract awards, {df['award_date'].min().date()} to {df['award_date'].max().date()}")
print(df[["award_date", "buyer_name", "winner_name_raw", "awarded_amount", "awarded_currency", "source_url"]].head())
# Every row links to its notice on ted.europa.eu (source_url).
# ingested_at is when AltDataEU first stored the row.API Endpoints & Data Dictionary
Coverage varies by source and country. See the data health notes in the docs.
| Feed Type | Update Cadence | History | Primary Analysis Use Case |
|---|---|---|---|
| Public Procurement (TED) | Daily | Varies by source | Tracking public contract awards |
| Lobbying Registers | Daily | Varies by source | Regulatory risk, upcoming legislative roadblocks |
| Insider Trading (BaFin/AMF) | Daily | Varies by source | Directors' dealings correlated with lobbying velocity |
| Legislative Velocity | Daily | Varies by source | Following legislative progress by sector |
Test the API (No Sales Call)
Drop your work email below. You'll receive a 7-day, rate-limited trial key by email (15 requests/minute, 500/day). We'll only follow up after you've had a chance to test it.