← Ground Truth

Insider trades, press releases, and financial filings — one enriched feed

OpenFilings··6 min read
Form 4insider tradingGlobeNewswirepress releasesfinancial filingsESMAESEFSECglobal filings

We shipped OpenFilings around periodic financial filings — 10-K, EDINET Yūho, ESEF annual reports, DART quarterly statements. Parse, normalize KPIs, expose them through RSS+ / Filings and the API. That pipeline worked.

What kept breaking in practice was everything around those filings. A user on a SoundHound watchlist saw the earnings pre-release on GlobeNewswire hours before our feed showed an 8-K. Another missed a Form 4 sale because we only ingested periodic reports and event filings — Form 4 comes from a completely separate discovery stream with its own identifiers. A wire item arrived with a European security identifier and a mismatched exchange ticker in its metadata; matching on ticker alone would have attached it to the wrong company.

Those were not parser bugs. They were scope gaps: we had built a filing product, and research workflows need filings plus the wires and insider rows that often precede or surround them. Starting July 2026, the enriched feed includes all three in one stream.

Why we added wires and Form 4

The enriched feed was already the product surface for discovery — Filings (and Atom / RSS+), workbench, notification inbox. Adding press releases and insider transactions meant extending that surface, not shipping a second "insider trader" app or a parallel database.

Form 4 rows and GlobeNewswire items land in the same pagination, filters, and alert fan-out as EDGAR and ESEF filings. Detail APIs: GET /api/v1/press-releases/{id} and GET /api/v1/insider-transactions (by ticker, matched entity, or date window).

Filings are not always first

Regulatory filings are authoritative — but they are not always the first public signal.

SignalTypical sourceLatency vs market
Earnings pre-announcementWire (GlobeNewswire, Business Wire)Hours to days before 8-K
M&A rumor → dealPress release + 8-KRelease often same day
Insider buy/sellSEC Form 4Within 2 business days of trade

A workflow that polls EDGAR for new 8-Ks will see the earnings wire late. One that only parses annual reports will never see insider sales at all. OpenFilings already normalized KPIs across 20 markets — US SEC, Japan EDINET, Korea DART, China CNINFO, Taiwan MOPS, Israel MAGNA, UAE ADX, Saudi Tadawul, EU ESEF under ESMA rules, UK Companies House, and more. This release extends the discovery layer: what shows up before you open a 10-K.

Beyond ticker-only alert feeds

If you have used a global filings alert product, an insider trading monitor, or a standalone financial filings email digest, you have probably seen the same failure mode: each channel keys off a different ID.

  • The insider alert matches AAPL on NASDAQ
  • The press wire lists ISIN US0378331005 with no exchange symbol
  • Your EDGAR watcher posts on CIK 0000320193
  • The EU annual report tags the issuer LEI in ESEF XBRL — no US ticker at all

Four transports. Four ways to identify the same company. Timestamps that disagree.

Form 4 rows, GlobeNewswire items, and periodic filings share one entity catalogue (CIK, ISIN, LEI resolution) and one enriched feed. Products that bolt insider data onto a US-ticker screener rarely resolve European wires or ESMA filers the same way — because the catalogue was never built for cross-registry IDs.

SEC Form 4 — insider transactions

We poll the SEC's own Form 4 discovery feed, fetch the ownership disclosure per filing, and parse:

  • Issuer — CIK, ticker, name (resolved to one company record via the entity catalog)
  • Reporter — officer title, director/officer/10% owner flags
  • Transaction — date, code (purchase, sale, grant, …), shares, price, holdings after

Insider rows are tracked separately from the periodic filing/KPI pipeline, since Form 4 is an event stream rather than a periodic report — but they appear in the same unified feed, filterable alongside periodic filings and 8-K events, respecting your watchlist and market entitlements.

Example feed headline shape:

Form 4 · SOUN · Sale · Mohajer · 12,500 sh @ $4.22 · Jun 15, 2026

US insider data is SEC-sourced. EU MAR manager dealings exist under national regulators and ESMA's market-abuse framework — we do not ingest those national feeds yet. ESEF annual accounts and LEI-linked entity resolution are the EU foundation this release builds on.

GlobeNewswire — press releases by subject

GlobeNewswire publishes hundreds of subject-coded feeds — earnings, mergers and acquisitions, dividend announcements, management changes, and more (850+ categories in their catalog).

OpenFilings:

  1. Polls the relevant GlobeNewswire subject feeds
  2. Parses each entry — title, summary, URL, language, security identifiers
  3. Resolves the issuer via ISIN, exchange + ticker, or the entity catalog
  4. Records the story once, de-duplicated across language variants and re-publishes
  5. Tags it by category (earnings, mergers & acquisitions, …) for filtering

Non-English duplicates of the same story merge into the preferred-language version (English first). GNW amendments update the story but do not re-fire notifications — one alert per new story, not spam on every edit.

Entity resolution — ISIN, LEI, and ESMA ESEF

This is where most of the engineering time went — not the wire-polling itself.

Filings arrive with CIK or domestic registry IDs. Wires arrive with ISINs and exchange codes — sometimes wrong ticker, sometimes no ticker at all. European annual reports arrive as ESEF packages with LEI in XBRL metadata, filed to national authorities under the ESMA transparency framework. Three ingest paths, three ID vocabularies. Without a shared catalogue, you either miss matches or attach wires to the wrong company.

Press releases — resolution order:

  1. ISIN → matched company
  2. Display ticker + exchange → matched company
  3. LEI, when the wire or a linked ESEF filing carries it
  4. No silent wrong-ticker match — unresolved stories stay unresolved rather than guessing

Step 4 matters more than it sounds. GlobeNewswire entries occasionally list a valid ISIN beside an exchange code that points at a different listing or a stale symbol. We tried ticker-first matching early; it produced false positives on dual-listed names and on wires where the headline company is correct but the metadata line is copy-pasted from a template. ISIN-first with a hard fallback beats fuzzy ticker guessing.

Form 4 — issuer CIK and trading symbol from the filing, joined to the same entity catalog used everywhere else on the platform. CIK is reliable for US registrants; the ticker is a cross-check when the catalog has both.

EU / ESMA — OpenFilings ingests ESEF annual reports: IFRS filings with inline XBRL, LEI-anchored company records, KPI extraction on the same canonical pipeline as a US 10-K. When a GlobeNewswire earnings wire lists an ASML ISIN without a NASDAQ line, fan-out still reaches subscribers who watch the Euronext listing or the LEI-linked company — the same merge logic that links a Korean listing and its European depositary filings under one company record.

Dual-listed names (US ADR + home market) resolve to one company record so watchlist matching works whether you follow the home listing or the ADR. Resolution examples and free API calls: CIK, ISIN, LEI — entity search.

Notifications and preferences

New event types on the existing inbox — no changes needed on your end if you're already using the API:

  • press_release.discovered — first insert only
  • insider_transaction.discovered — new Form 4 transaction for a watched company

Enable or disable them in your notification preferences alongside filing.discovered. Same channels: web, email, push, webhooks.

Fan-out matches press releases on company identity — resolved from ISIN, LEI, or display ticker, whichever the wire actually provided — so a wire that lists ISIN but omits a NASDAQ symbol still reaches subscribers. That only works because of the resolution chain above; ticker-only fan-out would drop half the wire traffic.

What is still rough

MCP tools for insider transactions are on the same release train as list_press_releases but not the first cut. Press release → related 8-K cross-links need matching logic we don't have for every wire yet. GlobeNewswire is the only wire source in v1 — Business Wire and national MAR manager-dealing feeds are not in scope. Screener columns for net insider buying and recent wire activity are backlog.

The discovery and alert layer is in place. What remains is mostly more sources and agent tooling — which is a better backlog than rebuilding entity resolution per channel.

Try it: add tickers to your watchlist, enable press and insider event types, and watch Filings for live entries — no account required for the public feed.