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)1718662026-07-032d ago98.3%0%
BRONZEAU AustraliaASX Appendix 3Y (Markit JSON)signal-only1× / day (02:30 UTC)72142026-07-032d ago0%0%
BRONZEBE BelgiumEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)105532026-07-041d ago100%0%
GOLDCH SwitzerlandSIX SER — Management Transactions1× / day (02:30 UTC)23081272026-07-032d ago99.1%100%
BRONZECY CyprusXAK CSE public-pages APIsignal-only1× / day (02:30 UTC)129212026-06-296d ago0%0%
GOLDDE GermanyBaFin DealingsInfo1× / day (02:30 UTC)18291542026-07-032d ago99.1%100%
BRONZEDK DenmarkNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)639792026-06-269d ago12.4%1.6%
BRONZEEE EstoniaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)902023-11-09969d ago0%0%
BRONZEES SpainCNMV Directivossignal-only1× / day (02:30 UTC)7061552026-07-032d ago14.3%14.3%
BRONZEFI FinlandNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)19381242026-06-269d ago4.4%1.2%
BRONZEFR FranceEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)6323302026-07-032d ago100%0%
BRONZEGB United KingdomLSE RNS — DSH (Playwright via Railway)4× / day (every 6h)18809042026-07-032d ago26.8%12.8%
BRONZEGR GreeceAthens Exchangesignal-only1× / day (02:30 UTC)1861192026-07-032d ago0%0%
BRONZEHR CroatiaZagreb SE EHOsignal-only1× / day (02:30 UTC)177542026-07-023d ago50.8%0.6%
BRONZEHU HungaryMNB Közzétételeksignal-only1× / day (02:30 UTC)2001402026-07-032d ago0%0%
BRONZEIS IcelandNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)6362026-06-2312d ago7.9%0%
BRONZEIT ItalyEuronext PDMR — Milansignal-only1× / day (02:30 UTC)244632026-07-041d ago3.7%0%
BRONZELT LithuaniaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)7152026-07-023d ago0%0%
BRONZELU LuxembourgLuxSE OAMsignal-only1× / day (02:30 UTC)146322026-07-041d ago0%0%
BRONZELV LatviaNasdaq Nordic news APIsignal-only1× / day (02:30 UTC)35802026-06-0332d ago0%0%
BRONZEMT MaltaMSE Borża Maltasignal-only1× / day (02:30 UTC)1482026-06-305d ago0%0%
BRONZENL NetherlandsEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)81302026-07-032d ago100%0%
BRONZENO NorwayEuronext PDMR — Oslo Børssignal-only1× / day (02:30 UTC)11252562026-07-041d ago3.5%0%
BRONZEPL PolandGPW (via Playwright)signal-only4× / day (every 6h)50312026-07-032d ago100%0%
BRONZEPT PortugalEuronext PDMR (consolidated)signal-only1× / day (02:30 UTC)48142026-07-032d ago100%0%
BRONZERO RomaniaBVB CurrentReportssignal-only1× / day (02:30 UTC)43242026-07-032d ago100%0%
GOLDSE SwedenFinansinspektionen Insynsregistret1× / day (02:30 UTC)34488932026-07-041d ago99.5%100%
BRONZESI SloveniaLjubljana SEOnet RSSsignal-only1× / day (02:30 UTC)822026-06-0530d ago0%0%

Coverage matrix — Substantial holdings

TierCountrySourceCadenceRows30dLatest% ISIN% new_pct
BRONZEAT AustriaOeKB OAM — §135(2) BörseGsignal-only1× / day (02:30 UTC)1697642026-07-023d ago100%0%
BRONZEBE BelgiumEuronext Brussels — Transparency notifications (Royal Decree 14 Feb 2008)signal-only1× / day (02:30 UTC)389482026-07-032d ago34.4%80.7%
SILVERCH SwitzerlandSIX SER — Significant Shareholders1× / day (02:30 UTC)21461332026-07-041d ago83.1%98.3%
BRONZECY CyprusXAK CSE public-pages — TDsignal-only1× / day (02:30 UTC)1252026-06-2411d ago0%0%
BRONZEDE GermanyBaFin AnteileInfo1× / day (02:30 UTC)29533502026-07-032d ago50.5%100%
BRONZEDK DenmarkNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)476142026-07-032d ago10.9%0%
BRONZEEE EstoniaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)9202026-05-2046d ago13%0%
BRONZEES SpainCNMV Participaciones Significativassignal-only1× / day (02:30 UTC)79692026-07-050d ago31.6%0%
BRONZEFI FinlandNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)827442026-07-032d ago9.1%0%
BRONZEFR FranceAMF BDIF SPDE/DOPsignal-only1× / day (02:30 UTC)7341132026-07-032d ago68.9%6.7%
BRONZEGB United KingdomLSE RNS — HOL (Playwright via Railway)signal-only4× / day (every 6h)14927042026-07-032d ago22.1%0%
BRONZEGR GreeceAthens Exchange — TD filingssignal-only1× / day (02:30 UTC)35232026-07-032d ago2.9%0%
BRONZEHR CroatiaZagreb SE EHO — TD filingssignal-only1× / day (02:30 UTC)1512026-06-0926d ago6.7%0%
BRONZEHU HungaryMNB Közzétételek — TD filingssignal-only1× / day (02:30 UTC)1562026-06-305d ago0%0%
BRONZEIS IcelandNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)12712026-06-0530d ago18.1%0%
BRONZEIT ItalyConsob 1INFO partecipazioni rilevantisignal-only1× / day (02:30 UTC)89112026-06-2312d ago0%0%
BRONZELT LithuaniaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)2202025-10-03275d ago0%0%
BRONZELU LuxembourgLuxSE OAM — Major shareholdingsignal-only1× / day (02:30 UTC)28172026-07-014d ago3.6%0%
BRONZELV LatviaNasdaq Nordic news API — TDsignal-only1× / day (02:30 UTC)23302026-03-23104d ago0%0%
BRONZEMT MaltaMSE Borża Malta — TDsignal-only1× / day (02:30 UTC)212026-07-023d ago0%0%
BRONZENL NetherlandsAFM Wmz bulk CSV4× / day (every 6h)29103202026-07-032d ago12.4%14.8%
BRONZENO NorwayEuronext — Major shareholding notificationssignal-only1× / day (02:30 UTC)5431522026-07-032d ago3.3%6.6%
BRONZEPL Poland1× / day (02:30 UTC)1921062026-07-032d ago100%0%
BRONZERO RomaniaBVB ReportedShareholderssignal-only1× / day (02:30 UTC)2182026-07-014d ago33.3%100%
BRONZESI SloveniaLjubljana SEOnet — TD filingssignal-only1× / day (02:30 UTC)912026-07-032d 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.