Alt data for European long/short

EU insider trades + 5% holdings, one polling API.

Every MAR Article 19 PDMR disclosure and every Transparency-Directive 5% crossing across 28 European markets — aggregated, normalised, tier-graded for freshness and completeness, and pollable with a one-line curl. Self-serve trial key, no intro call required to look at the data.

The signal works — measured on our own data

German board buys hit 54% positive at 6–12 months. Their spouses and holding companies hit 13%.

4.0×

Hit-rate ratio

Vorstand vs. related-party buys at 180–365d holding

+41pp

Hit-rate spread

Vorstand 54% − related-party 13%

250

DE buys in sample

winsorised at 1st/99th percentile

The role tag is the moat — not latency. Treat every PDMR row the same and you eat 13% hit rate alongside 55%. Our normalisedinsider_rolefield lets you filter on the people who actually time it. Full methodology + matrix →

Worked example — a real precursor cluster from the data

9 insiders at BASF SE bought €2.1Mof their own stock — it's up +29% since.

Between 2025-05-05 and 2025-06-03, 9 different insiders at BASF SE (DE · BAS.DE, ISIN DE000BASF111) disclosed buys totalling €2.1M at a weighted price of €42.34. The stock now trades at €54.44 — the position is worth €2.7M, a +29% (€605k) move in 352 days.

Buyers: Elvermann, Dr. Dirk, Genco, Alessandra, Bock, Dr. Kurt, Kamieth, Dr. Markus, Asenkerschbaumer, Prof. Dr. Stefan +4 more. Each row published under MAR Article 19 within 3 business days of the trade, ingested into the API the same morning the regulator released it. The cluster signal is the precursor — the price action is the consequence the market priced in afterwards. We aggregate every one of these across 28 European markets.

What you actually get — live numbers, refreshed nightly

Every cell below comes from the same Postgres views the audit doc tracks. No marketing decoration — if a country isn't live yet, it isn't counted.

Insider filings (MAR Article 19 PDMR)

28
countries live
12,109
total rows
935
last 7 days
1d
median freshness lag
63.2%
ISIN populated (weighted)
46.6%
value_eur populated
GOLD 3SILVER 0BRONZE 25

5% holdings (Transparency Directive)

25
countries live
11,856
total rows
557
last 7 days
1d
median freshness lag
42.2%
ISIN populated (weighted)
42.2%
new_pct populated
GOLD 0SILVER 1BRONZE 24

Coverage tiers — at a glance

Same schema everywhere. What varies is enrichment depth. We publish this so you can pick the markets you need before you commit.

TierMarketsDaily flowEnrichment
Tier 1 — FullCH~12/dayISIN, EUR value, sub-PDMR role, shares + price
Tier 2 — Strong PDMRSE, DE~57/dayFull PDMR; signal-grade holdings
Tier 3 — High volume, partialGB, NO, FI, FR, NL, BE, ES~125/dayInsider/issuer/date, partial ISIN/value
Tier 4 — Signal-onlyIT, AT, DK, GR, HU, CY, HR, RO, LU, IS, PT~25/dayInsider/issuer/date + source URL
Tier 5 — Archive onlyLV, LT, EE, SI, PL, AU, MT0/dayHistorical backfill, no live feed. Not pitched.

See the full per-country matrix →

Sample row

Same shape across every market. Field-by-field documentation in the schema doc.

{
  "id": "SE-FI-2026-05-19-A4B92",
  "country": "SE",
  "insider_name": "Erik Hägglund",
  "insider_role": "Chief Executive Officer",
  "company_name": "Saab AB",
  "isin": "SE0000112385",
  "ticker": "SAAB-B.ST",
  "transaction_date": "2026-05-16",
  "filing_date": "2026-05-19",
  "transaction_type": "buy",
  "shares": 2000,
  "price": 524.40,
  "value_eur": 90876.12,
  "currency": "SEK",
  "source_url": "https://marknadssok.fi.se/...",
  "ingested_at": "2026-05-20T02:30:35Z"
}

Per-country tier — live freshness + completeness

GOLD = freshness <5d AND ≥95% ISIN AND ≥95% secondary field. SILVER = <10d, ≥80%, ≥70%. Everything else is BRONZE — usable as a signal feed but we don't pretend it's a structured dataset.

MarketInsider tierPDMR rowsLag (d)ISIN%Holdings tier5% rowsLag (d)ISIN%
🇩🇪GermanyGOLD1,588199%BRONZE2,411146%
🇬🇧United KingdomBRONZE431111%BRONZE41314%
🇫🇷FranceBRONZE1570100%BRONZE576037%
🇮🇹ItalyBRONZE15011%BRONZE6910%
🇪🇸SpainBRONZE454122%BRONZE68032%
🇳🇱NetherlandsBRONZE352100%BRONZE2,391210%
🇨🇭SwitzerlandGOLD2,060299%SILVER1,931181%
🇵🇱PolandBRONZE51100%BRONZE321100%
🇧🇪BelgiumBRONZE291100%BRONZE290211%
🇸🇪SwedenGOLD1,8171100%
🇦🇹AustriaBRONZE1,641198%BRONZE1,6231100%
🇳🇴NorwayBRONZE70806%BRONZE33002%
🇩🇰DenmarkBRONZE498110%BRONZE451717%
🇷🇴RomaniaBRONZE131100%BRONZE6117%
🇵🇹PortugalBRONZE171100%
🇫🇮FinlandBRONZE1,66417%BRONZE76228%
🇬🇷GreeceBRONZE4410%BRONZE8113%
🇭🇺HungaryBRONZE3210%BRONZE6200%
🇭🇷CroatiaBRONZE47611%BRONZE224880%
🇱🇺LuxembourgBRONZE9330%BRONZE1119%
🇱🇹LithuaniaBRONZE6160%BRONZE222300%
🇸🇮SloveniaBRONZE5100%BRONZE370%
🇱🇻LatviaBRONZE35410%BRONZE233590%
🇪🇪EstoniaBRONZE99240%BRONZE9210%
🇨🇾CyprusBRONZE10020%BRONZE760%
🇮🇸IcelandBRONZE5218%BRONZE118121%
🇲🇹MaltaBRONZE330%BRONZE130%

Sample the data — no signup

Two CSVs, breadth-sliced across countries (no single market dominates), same column layout as the API. Headline numbers regenerated from live data on every page load.

How you receive it

REST is the self-serve default. The other two are real options — ask and we'll set them up.

Live

Polling REST API

Bearer auth, cursor + delta-since pagination. The trial key plugs in here. Build orchestration around it.

On request

Postgres direct (read-only)

Connection string into our Supabase. Your engineers write SQL, no pagination ceiling. Best when you want flexibility — the trade-off is queries are coupled to our schema.

On request

Daily dump — Parquet / JSONL.gz

Atomic snapshot to S3, SFTP, or signed-URL email. Drop into your data lake on a schedule. ~24h freshness ceiling.

Snowflake share, webhooks, or custom delivery — also available. Email george@insidereu.com with what you need.

Refresh cadence

API-backed sources (BaFin DealingsInfo CSV, AFM Wmz bulk, Finansinspektionen Insyn, SIX SER, Nasdaq Nordic) run daily and could push to hourly on request — no architectural blocker. PDF / scrape-backed sources stay daily because the upstream regulator portals don't republish more often. Source-side delays (e.g. BaFin's 6–7d gap between transaction and publication) are surfaced in the per-row days_since_last_filing field — never hidden.

Historical depth

We have multi-year history available — most regulators expose back to 2007–2015 (BaFin, FI Insynsregistret, LSE RNS, SIX SER, Consob, AFM all do). The hot dataset is the last ~12 months; older windows we backfill on request once we know the scope. Email george@insidereu.comwith the window and we'll quote.

Why insidereu vs the incumbents

vs Smart Insider

Smart Insider's coverage skews Anglo and they sell curated win-rate scores. We sell the raw event stream — one schema across 28 markets, flat per-seat pricing, source URL on every row so you can audit. Where they package alpha, we package inputs.

vs 2iQ

2iQ leads with their alpha-scoring overlay. Funds with a research team don't want the score — they want clean inputs to feed their own model. We sell only the inputs.

vs Bloomberg AIQ

AIQ is bundled into Terminal seats at $24k/year/user. You pay for the front-end and the data team writes Excel macros to extract it. We sell flat-file / API at desk pricing, no Terminal dependency, and publish in EUR alongside the original currency.

vs Bloomberg / Refinitiv terminals (general)

Strong on US insider trades. Patchy for EU PDMR (24+ regulators, different XML schemas, signal-only PDFs). 5% threshold crossings come per-country, not as one normalised feed.

vs building it yourself

23 separate portals: BaFin CSV, AFM bulk, Finansinspektionen Insyn, Consob 1INFO, OeKB OAM GraphQL, Euronext per-issuer pages. Building parsers for each is a ~6-month engineering project; maintaining them is forever.

Latency — what we actually measure

  • Best-case (low-volume HTML feeds):<1 hour from regulator publication to row in our DB.
  • PDF-resolved sources (DE BaFin, ES CNMV, DK Nasdaq Copenhagen): 6–24 hours.
  • Nightly bulk paths: by 03:00 UTC every day.

Actual measured lag per source ships in the data quality audit. We do not currently offer a contractual SLA — pilot customers get a Slack channel with the data engineer instead.

Schema stability

insidereu.filings and insidereu.substantial_holdings have not had a field renamed or dropped since 2025-Q4. Every column documented, including dedup recommendations and known semantic caveats per country. Full schema doc →

The API is two endpoints

/api/v1/filings (PDMR insider trades) and /api/v1/holdings (5%+ shareholder crossings). Cursor + delta-since pagination — a polling consumer pulls only what changed since its last call.

# All German insider trades from the last week
curl -H "Authorization: Bearer ins_live_xxx..." \
  "https://www.insidereu.com/api/v1/filings?country=DE&from=2026-04-29"

# Substantial holdings >= 5% in Swiss issuers
curl -H "Authorization: Bearer ins_live_xxx..." \
  "https://www.insidereu.com/api/v1/holdings?country=CH&min_pct=5"

# Delta poll — only what landed since your last call
curl -H "Authorization: Bearer ins_live_xxx..." \
  "https://www.insidereu.com/api/v1/filings?since=2026-05-04T22:00:00Z"

For your compliance team: every row carries a source_url pointing back to the original regulator publication. Audit and provenance are one click — we don't host any copyrighted content, just normalise the public filing.

Pricing

Flat per-seat. No per-row metering, no surprise overage. 8-week free POC for funds — full dataset, full API, no commitment, no card.

Single seat

$50,000/ year
  • One named analyst
  • REST API + nightly CSV drop
  • 250k requests / month
  • Slack support

Team

$80,000/ year
  • Up to 5 named seats
  • Same API + CSV drop
  • Postgres read-replica access
  • Slack support

Enterprise

Contact
  • Unlimited seats
  • Dedicated Postgres replica
  • SLA + custom enrichment
  • Direct data-engineer access

Request a sample

Drop your work email and a fund domain. You'll get a 30-day sample of both filings.csv and substantial_holdings.csv plus the schema doc within 1 business day. George replies personally — no SDR will call you.

No sales call cadence, no drip sequences — George replies personally.

Get a 7-day trial key

Drop your work email. Trial tier: 250 rows/page, 120 req/min, 7 days. Enough to validate the data shape and run a backtest; not enough to bulk-export the dataset. Real key in your inbox in under a minute — not a “we’ll be in touch” auto-reply.

By submitting you accept the terms. We never sell your email; one signup email + George may follow up after a few days of usage.

Need full access, no kneecap? Email george@insidereu.com with a sentence on the use case. If it's a fit I'll cut a no-holds-barred key — no row cap, no rate cap — for as long as you're evaluating. I'd rather you actually pressure-test the data than hit the trial wall and wander off.

Or book 15 minutes with George

Founder. I'll walk through the data shape, your specific use case, and what custom coverage would cost if you need it.

What we're honest about

  • Tier is per-country and lives in the API response— every row carries its country's tier so you can filter at query time.
  • Some markets are signal-only (issuer + date + URL, no shares/value). Where the regulator publishes the data inside a PDF, we link the PDF and flag the row signal_only.
  • Source-side delays are surfaced: BaFin DealingsInfo publishes 6–7 days after the transaction. We don't hide that —days_since_last_filingis in the data-quality response above.
  • Historical depth is currently ~12 months on most sources. BaFin DealingsInfo, FI Insynsregistret, LSE RNS, and SIX SER all expose multi-year archives we can ingest on request — ask and we'll quote.