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)

TierCountrySourceCadenceRows30dLatest% ISIN% Value
BRONZEAT AustriaOeKB OAM — §19(3) MARsignal-only1× / day (02:30 UTC)1819532026-08-276d ago98.2%0%
BRONZEAU AustraliaASX Appendix 3Y (Markit JSON)signal-only1× / day (02:30 UTC)132512026-09-011d ago0%0%
BRONZEBE BelgiumEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)11902026-07-1450d ago100%0%
GOLDCH SwitzerlandSIX SER — Management Transactions1× / day (02:30 UTC)25601792026-08-312d ago99.2%100%
BRONZECY CyprusXAK CSE public-pages APIsignal-only1× / day (02:30 UTC)170252026-09-011d ago0%0%
GOLDDE GermanyBaFin DealingsInfo1× / day (02:30 UTC)35541682026-08-312d ago99.3%100%
BRONZEDK DenmarkNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)805842026-09-011d ago8.7%1.1%
BRONZEEE EstoniaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)902023-11-091028d ago0%0%
BRONZEES SpainCNMV Directivossignal-only1× / day (02:30 UTC)9691162026-09-011d ago10.3%10.3%
BRONZEFI FinlandNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)23321652026-09-011d ago4.5%0.6%
BRONZEFR FranceEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)76002026-07-1450d ago100%0%
BRONZEGB United KingdomLSE RNS — DSH (Playwright via Railway)4× / day (every 6h)34327882026-09-011d ago29.6%14.3%
BRONZEGR GreeceAthens Exchangesignal-only1× / day (02:30 UTC)403942026-09-011d ago0%0%
BRONZEHR CroatiaZagreb SE EHOsignal-only1× / day (02:30 UTC)312602026-09-011d ago56.4%0.3%
BRONZEHU HungaryMNB Közzétételeksignal-only1× / day (02:30 UTC)366712026-09-011d ago0%0%
BRONZEIS IcelandNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)7552026-08-258d ago5.3%0%
BRONZEIT ItalyEuronext PDMR — Milansignal-only1× / day (02:30 UTC)363262026-09-011d ago13.8%7.4%
BRONZELT LithuaniaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)7102026-07-0262d ago0%0%
BRONZELU LuxembourgLuxSE OAMsignal-only1× / day (02:30 UTC)190242026-09-011d ago0%0%
BRONZELV LatviaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)36222026-08-276d ago0%0%
BRONZEMT MaltaMSE Borża Maltasignal-only1× / day (02:30 UTC)36132026-08-312d ago0%0%
BRONZENL NetherlandsEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)9202026-07-1450d ago100%0%
BRONZENO NorwayEuronext PDMR — Oslo Børssignal-only1× / day (02:30 UTC)15912912026-09-020d ago2.5%0%
BRONZEPL PolandGPW (via Playwright)signal-only4× / day (every 6h)117352026-08-285d ago100%0%
BRONZEPT PortugalEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)5202026-07-1351d ago100%0%
BRONZERO RomaniaBVB CurrentReportssignal-only1× / day (02:30 UTC)7862026-08-267d ago100%0%
GOLDSE SwedenFinansinspektionen Insynsregistret1× / day (02:30 UTC)49686982026-09-011d ago99.5%100%
BRONZESI SloveniaLjubljana SEOnet RSSsignal-only1× / day (02:30 UTC)1332026-08-285d ago0%0%

Coverage matrix — Substantial holdings

TierCountrySourceCadenceRows30dLatest% ISIN% new_pct
BRONZEAT AustriaOeKB OAM — §135(2) BörseGsignal-only1× / day (02:30 UTC)1821542026-09-011d ago100%0%
BRONZEBE BelgiumEuronext Brussels — Transparency notifications (Royal Decree 14 Feb 2008)signal-only1× / day (02:30 UTC)474352026-09-011d ago46.2%74.7%
SILVERCH SwitzerlandSIX SER — Significant Shareholders1× / day (02:30 UTC)23481082026-09-011d ago84%98.3%
BRONZECY CyprusXAK CSE public-pages — TDsignal-only1× / day (02:30 UTC)1202026-06-2470d ago0%0%
BRONZEDE GermanyBaFin AnteileInfo1× / day (02:30 UTC)35973042026-09-011d ago52.5%100%
BRONZEDK DenmarkNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)506132026-09-011d ago21.7%0%
BRONZEEE EstoniaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)9202026-05-20105d ago0%0%
BRONZEES SpainCNMV Participaciones Significativassignal-only1× / day (02:30 UTC)82612026-09-020d ago25.6%0%
BRONZEFI FinlandNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)879212026-08-276d ago13.1%0%
BRONZEFR FranceAMF BDIF SPDE/DOPsignal-only1× / day (02:30 UTC)922922026-09-011d ago70.1%5.4%
BRONZEGB United KingdomLSE RNS — HOL (Playwright via Railway)signal-only4× / day (every 6h)29127232026-09-011d ago27.3%0%
BRONZEGR GreeceAthens Exchange — TD filingssignal-only1× / day (02:30 UTC)5282026-09-011d ago5.8%0%
BRONZEHR CroatiaZagreb SE EHO — TD filingssignal-only1× / day (02:30 UTC)2612026-08-312d ago11.5%0%
BRONZEHU HungaryMNB Közzétételek — TD filingssignal-only1× / day (02:30 UTC)2232026-08-1716d ago0%0%
BRONZEIS IcelandNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)12902026-07-1054d ago21.7%0%
BRONZEIT ItalyConsob 1INFO partecipazioni rilevantisignal-only1× / day (02:30 UTC)141242026-08-267d ago0.7%0%
BRONZELT LithuaniaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)2202025-10-03334d ago0%0%
BRONZELU LuxembourgLuxSE OAM — Major shareholdingsignal-only1× / day (02:30 UTC)3622026-08-1716d ago5.6%0%
BRONZELV LatviaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)23302026-03-23163d ago0%0%
BRONZEMT MaltaMSE Borża Malta — TDsignal-only1× / day (02:30 UTC)412026-08-285d ago0%0%
BRONZENL NetherlandsAFM Wmz bulk CSV4× / day (every 6h)35473122026-08-312d ago15.1%15.3%
BRONZENO NorwayEuronext — Major shareholding notificationssignal-only1× / day (02:30 UTC)7921602026-09-020d ago4.8%2.7%
BRONZEPL Poland1× / day (02:30 UTC)331632026-09-011d ago100%0%
BRONZERO RomaniaBVB ReportedShareholderssignal-only1× / day (02:30 UTC)43112026-08-312d ago39.5%100%
BRONZESI SloveniaLjubljana SEOnet — TD filingssignal-only1× / day (02:30 UTC)1202026-07-1549d ago0%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.