Methodology
InsideREU aggregates two distinct EU regulator datasets: managers' transactions(MAR Article 19 / PDMR — directors and senior executives buying or selling their own employer's stock) and substantial holdings (Transparency Directive — anyone crossing a 5% / 10% / 25% / 50% / 75% ownership threshold). Every row in our database links back to the original regulator publication.
The coverage matrix below is the live state, refreshed hourly from the same internal view that powers our admin dashboard. We don't edit it, we don't hide rows, and we don't round up. If a country is BRONZE today, we say so today.
Coverage matrix — Filings (PDMR / Article 19)
| Tier | Country | Source | Cadence | Rows | 30d | Latest | % ISIN | % Value |
|---|---|---|---|---|---|---|---|---|
| BRONZE | AT Austria | OeKB OAM — §19(3) MARsignal-only | 1× / day (02:30 UTC) | 1641 | 55 | 2026-05-201d ago | 98.2% | 0% |
| BRONZE | AU Australia | ASX Appendix 3Y (Markit JSON)signal-only | 1× / day (02:30 UTC) | 42 | 20 | 2026-05-201d ago | 0% | 0% |
| BRONZE | BE Belgium | Euronext PDMR (consolidated)signal-only | 1× / day (02:30 UTC) | 29 | 29 | 2026-05-201d ago | 100% | 0% |
| GOLD | CH Switzerland | SIX SER — Management Transactions | 1× / day (02:30 UTC) | 2060 | 220 | 2026-05-192d ago | 99% | 100% |
| BRONZE | CY Cyprus | XAK CSE public-pages APIsignal-only | 1× / day (02:30 UTC) | 100 | 19 | 2026-05-192d ago | 0% | 0% |
| GOLD | DE Germany | BaFin DealingsInfo | 1× / day (02:30 UTC) | 1588 | 119 | 2026-05-201d ago | 99% | 100% |
| BRONZE | DK Denmark | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 498 | 102 | 2026-05-201d ago | 9.8% | 2% |
| BRONZE | EE Estonia | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 9 | 0 | 2023-11-09924d ago | 0% | 0% |
| BRONZE | ES Spain | CNMV Directivossignal-only | 1× / day (02:30 UTC) | 454 | 110 | 2026-05-201d ago | 21.6% | 21.6% |
| BRONZE | FI Finland | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 1664 | 622 | 2026-05-201d ago | 7.2% | 2.5% |
| BRONZE | FR France | Euronext PDMR (consolidated)signal-only | 1× / day (02:30 UTC) | 157 | 157 | 2026-05-210d ago | 100% | 0% |
| BRONZE | GB United Kingdom | LSE RNS — DSH (Playwright via Railway) | 4× / day (every 6h) | 431 | 430 | 2026-05-201d ago | 10.9% | 6.3% |
| BRONZE | GR Greece | Athens Exchangesignal-only | 1× / day (02:30 UTC) | 44 | 44 | 2026-05-201d ago | 0% | 0% |
| BRONZE | HR Croatia | Zagreb SE EHOsignal-only | 1× / day (02:30 UTC) | 47 | 24 | 2026-05-156d ago | 10.6% | 0% |
| BRONZE | HU Hungary | MNB Közzétételeksignal-only | 1× / day (02:30 UTC) | 32 | 32 | 2026-05-201d ago | 0% | 0% |
| BRONZE | IS Iceland | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 52 | 8 | 2026-05-201d ago | 7.7% | 0% |
| BRONZE | IT Italy | Euronext PDMR — Milansignal-only | 1× / day (02:30 UTC) | 150 | 52 | 2026-05-201d ago | 0.7% | 0% |
| BRONZE | LT Lithuania | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 61 | 8 | 2026-05-156d ago | 0% | 0% |
| BRONZE | LU Luxembourg | LuxSE OAMsignal-only | 1× / day (02:30 UTC) | 93 | 28 | 2026-05-183d ago | 0% | 0% |
| BRONZE | LV Latvia | Nasdaq Nordic news APIsignal-only | 1× / day (02:30 UTC) | 354 | 2 | 2026-05-201d ago | 0% | 0% |
| BRONZE | MT Malta | MSE Borża Maltasignal-only | 1× / day (02:30 UTC) | 3 | 3 | 2026-05-183d ago | 0% | 0% |
| BRONZE | NL Netherlands | Euronext PDMR (consolidated)signal-only | 1× / day (02:30 UTC) | 35 | 35 | 2026-05-192d ago | 100% | 0% |
| BRONZE | NO Norway | Euronext PDMR — Oslo Børssignal-only | 1× / day (02:30 UTC) | 708 | 367 | 2026-05-210d ago | 5.5% | 0% |
| BRONZE | PL Poland | GPW (via Playwright)signal-only | 4× / day (every 6h) | 5 | 5 | 2026-05-201d ago | 100% | 0% |
| BRONZE | PT Portugal | Euronext PDMR (consolidated)signal-only | 1× / day (02:30 UTC) | 17 | 17 | 2026-05-201d ago | 100% | 0% |
| BRONZE | RO Romania | BVB CurrentReportssignal-only | 1× / day (02:30 UTC) | 13 | 13 | 2026-05-201d ago | 100% | 0% |
| GOLD | SE Sweden | Finansinspektionen Insynsregistret | 1× / day (02:30 UTC) | 1817 | 1061 | 2026-05-201d ago | 99.7% | 100% |
| BRONZE | SI Slovenia | Ljubljana SEOnet RSSsignal-only | 1× / day (02:30 UTC) | 5 | 3 | 2026-05-1110d ago | 0% | 0% |
Coverage matrix — Substantial holdings
| Tier | Country | Source | Cadence | Rows | 30d | Latest | % ISIN | % new_pct |
|---|---|---|---|---|---|---|---|---|
| BRONZE | AT Austria | OeKB OAM — §135(2) BörseGsignal-only | 1× / day (02:30 UTC) | 1623 | 35 | 2026-05-201d ago | 100% | 0% |
| BRONZE | BE Belgium | Euronext Brussels — Transparency notifications (Royal Decree 14 Feb 2008)signal-only | 1× / day (02:30 UTC) | 290 | 43 | 2026-05-192d ago | 10.7% | 91.7% |
| SILVER | CH Switzerland | SIX SER — Significant Shareholders | 1× / day (02:30 UTC) | 1931 | 149 | 2026-05-201d ago | 80.6% | 98.1% |
| BRONZE | CY Cyprus | XAK CSE public-pages — TDsignal-only | 1× / day (02:30 UTC) | 7 | 3 | 2026-05-156d ago | 0% | 0% |
| BRONZE | DE Germany | BaFin AnteileInfo | 1× / day (02:30 UTC) | 2411 | 307 | 2026-05-201d ago | 46% | 100% |
| BRONZE | DK Denmark | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 451 | 17 | 2026-05-147d ago | 17.1% | 0% |
| BRONZE | EE Estonia | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 92 | 2 | 2026-05-201d ago | 0% | 0% |
| BRONZE | ES Spain | CNMV Participaciones Significativassignal-only | 1× / day (02:30 UTC) | 68 | 68 | 2026-05-210d ago | 32.4% | 0% |
| BRONZE | FI Finland | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 762 | 51 | 2026-05-192d ago | 7.7% | 0% |
| BRONZE | FR France | AMF BDIF SPDE/DOPsignal-only | 1× / day (02:30 UTC) | 576 | 101 | 2026-05-210d ago | 37.3% | 10.1% |
| BRONZE | GB United Kingdom | LSE RNS — HOL (Playwright via Railway)signal-only | 4× / day (every 6h) | 413 | 413 | 2026-05-201d ago | 4.4% | 0% |
| BRONZE | GR Greece | Athens Exchange — TD filingssignal-only | 1× / day (02:30 UTC) | 8 | 8 | 2026-05-201d ago | 12.5% | 0% |
| BRONZE | HR Croatia | Zagreb SE EHO — TD filingssignal-only | 1× / day (02:30 UTC) | 2 | 0 | 2019-07-292488d ago | 0% | 0% |
| BRONZE | HU Hungary | MNB Közzétételek — TD filingssignal-only | 1× / day (02:30 UTC) | 6 | 6 | 2026-05-0120d ago | 0% | 0% |
| BRONZE | IS Iceland | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 118 | 2 | 2026-05-201d ago | 21.2% | 0% |
| BRONZE | IT Italy | Consob 1INFO partecipazioni rilevantisignal-only | 1× / day (02:30 UTC) | 69 | 15 | 2026-05-201d ago | 0% | 0% |
| BRONZE | LT Lithuania | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 22 | 0 | 2025-10-03230d ago | 0% | 0% |
| BRONZE | LU Luxembourg | LuxSE OAM — Major shareholdingsignal-only | 1× / day (02:30 UTC) | 11 | 6 | 2026-05-201d ago | 9.1% | 0% |
| BRONZE | LV Latvia | Nasdaq Nordic news API — TDsignal-only | 1× / day (02:30 UTC) | 233 | 0 | 2026-03-2359d ago | 0% | 0% |
| BRONZE | MT Malta | MSE Borża Malta — TDsignal-only | 1× / day (02:30 UTC) | 1 | 1 | 2026-05-183d ago | 0% | 0% |
| BRONZE | NL Netherlands | AFM Wmz bulk CSV | 4× / day (every 6h) | 2391 | 517 | 2026-05-192d ago | 9.5% | 14% |
| BRONZE | NO Norway | Euronext — Major shareholding notificationssignal-only | 1× / day (02:30 UTC) | 330 | 151 | 2026-05-210d ago | 2.1% | 9.4% |
| BRONZE | PL Poland | — | 1× / day (02:30 UTC) | 32 | 32 | 2026-05-201d ago | 100% | 0% |
| BRONZE | RO Romania | BVB ReportedShareholderssignal-only | 1× / day (02:30 UTC) | 6 | 6 | 2026-05-201d ago | 16.7% | 100% |
| BRONZE | SI Slovenia | Ljubljana SEOnet — TD filingssignal-only | 1× / day (02:30 UTC) | 3 | 2 | 2026-05-147d ago | 0% | 0% |
Tier definitions
- GOLD— last filing < 5 days old, ≥95% of rows have ISIN, ≥95% have the secondary critical field (value in EUR for filings, new ownership % for holdings). Suitable for backtesting and time-sensitive signal generation.
- SILVER— last filing < 10 days old, ≥80% ISIN, ≥70% secondary field. Suitable for thematic research and longer-horizon analysis. Not recommended for intraday signal use.
- BRONZE— anything else. We do not lead with these in marketing claims; coverage exists but lags or is structurally incomplete (often because the regulator publishes via PDF rather than CSV/JSON, see “Signal-only scrapers” below).
How we ingest
Single nightly cron at 02:30 UTC. ~25 country-specific scrapers run in parallel with a 90-second per-source deadline; the orchestrator upserts each source's output as it returns, so partial completion still leaves earlier rows durable. The whole pipeline stays inside Vercel's 5-minute function ceiling. Each filing is keyed on a deterministic id (regulator-specific reference + insider id + transaction date + price + value), which makes re-scraping idempotent.
Source URLs and raw responses are preserved in the row's source_url and raw_data fields so any downstream researcher can reproduce the parse from the original regulator filing.
Signal-only scrapers
Several countries publish PDMR notifications as PDF attachments rather than structured CSV/JSON: AT (OeKB), ES (CNMV), FR/NL/BE/PT (Euronext consolidated), FI/DK/IS/EE/LV/LT (Nasdaq Nordic news), plus most TD-filings holdings sources. For these we emit one row per regulator filing with the metadata we can extract (insider name, company, transaction date, source URL) but leave shares and value_eur as NULL. The filing existence is a signal even without the dollar amount; full per-row PDF parsing is on the roadmap.
Known caveats
- DE BaFin source-side delay.As of 2026-05-04, BaFin's DealingsInfo CSV is publishing filings 6–7 days after notification. Our scraper is healthy and runs nightly; the lag is at the regulator. We're monitoring; if it doesn't resolve by mid-May we'll add a secondary German source. Until then DE remains SILVER on freshness alone (completeness is unaffected).
- EE / HR scrapers dormant.Estonia and Croatia regulators haven't published a relevant filing in our covered window. Volume in these markets is genuinely tiny, but if the upstream source format changed we'd catch it on the data-health dashboard.
- Holdings new_pct gap.Most TD-holdings sources don't surface the post-trade ownership percentage in structured form, so the ability to filter “everyone who crossed from <5% to ≥10% in March” is currently limited to DE plus partial CH. Expanding this is the next holdings priority.
- Value normalization. Where regulators report transaction value in local currency (CHF, GBP, NOK, etc.) we convert to EUR using the daily ECB reference rate at transaction date. Native currency is preserved in
raw_data.
What we don't do (yet)
- Historical backfill. Most country scrapers reach back ~12 months from go-live (2026-04-15). Earlier periods are not in our DB. If a customer needs 5+ year history for backtesting we can source it from a data broker on a per-deal basis.
- Point-in-time corrections.Filings are upserted on the deterministic id. We don't currently version the row, so if a regulator corrects a filing after the fact we overwrite. Versioning is on the roadmap for any customer that needs it for backtest reproducibility.
- Webhook delivery. Filings flow into a Postgres table that we can expose as a read-only credential to enterprise customers. Push-style webhook delivery is on the roadmap and will be built when a customer requires it.
Field reference
Each filings row has the schema documented at /developers/schema. The public API surface is at /developers.
Last refreshed from data-health view at page render. Updates every hour. For real-time admin view see /admin/data-health.