00

How ebomi works, and where the data comes from

Last updated 22 July 2026

What this page is

ebomi is an insider-trading alert service that shows its work. This page explains, in plain language, where the data originates, what the software actually does with it, what is stored, what we deliberately do not do, and what the service cannot promise. Every claim below describes the pipeline as it runs today, not as we would like it to be. When the pipeline changes, this page changes with it.

Where the data comes from

Every alert originates from public filings on the U.S. Securities and Exchange Commission's EDGAR system. Corporate insiders, meaning officers, directors, and holders of more than ten percent of a company's stock, must report their trades on Form 4. ebomi reads the EDGAR current-filings feed for Form 4 submissions and downloads each filing's complete submission text and header directly from the EDGAR archives. Nothing else feeds the pipeline. There is no data vendor in the middle, no private feed, and nothing you could not fetch yourself from sec.gov.

We fetch politely, in line with the SEC's fair-access guidance. Every request identifies ebomi by name and contact email in its User-Agent header, and the software refuses to start without that identification configured. Requests are smoothed through a token bucket capped by default at six per second, deliberately below the ten-per-second ceiling the SEC declares, because each filing costs several requests and the limiter should never brush the limit. If the SEC answers with a refusal, the fetcher honors any Retry-After header, backs off with increasing delays, and after repeated refusals pauses ingestion entirely for a cool-down period rather than hammering a server that has asked us to stop.

Every alert we send links to the source filing on sec.gov, so you can always check the original document yourself.

How a filing becomes an alert

  1. Watch. A worker polls the EDGAR feed on a cycle measured in seconds to minutes. A separate scheduled catch-up job runs every ten minutes and re-scans the last several days of the feed, so a filing the live worker missed is normally recovered.
  2. Fetch. For each new Form 4, both the full submission text file and its header file are downloaded from EDGAR.
  3. Parse. The software extracts the issuer's CIK, name, and ticker symbol exactly as filed, every reporting owner with their role flags such as director, officer, or ten-percent holder, and each transaction line from the filing's non-derivative table.
  4. Filter. Only open-market purchases, transaction code P, and open-market sales, transaction code S, can trigger an alert. Stock grants, option exercises, gifts, tax withholding, and the other transaction codes do not, because those are mostly compensation and administrative events rather than the discretionary trades readers are watching for.
  5. Roll up. All qualifying transactions within one filing are aggregated per side into total shares and a volume-weighted average price. The average is computed only over shares that carry a filed price, and the filing's acceptance timestamp is interpreted as U.S. Eastern time and normalized to UTC.
  6. Compose. Each subscriber tracking that issuer gets one alert per filing. When a filing contains both purchases and sales, the alert shows both legs, including the case where a headline purchase sits next to a larger sale, because showing only the flattering side would be misleading.
  7. Deliver. The email is sent through our mail provider. Failed sends retry with exponential backoff, and an alert that exhausts its retries is set aside and kept for audit rather than silently dropped.

This path deliberately keeps nothing. It records the identifier of each filing it has already handled, so that it does not alert on the same one twice, and stores no filing content of its own. Everything in the catalog comes from the published dataset described below, and the two are kept apart on purpose so that a single source is answerable for what the catalog contains.

What we store

The catalog is a mirror of a published dataset, not a by-product of the alert pipeline above. It is rebuilt from the Layline insider extract, which is itself derived from EDGAR and released under CC0, and it holds one row per submission and one row per transaction line. The alerting path described above stores no filings at all; it records only which filings it has already seen, so that it does not alert twice.

Two consequences follow, and both are stated here rather than discovered. The catalog is as fresh as the extract, not as fresh as the feed: it is refreshed daily, so a filing can appear in an alert before it appears in the catalog. And the catalog does not identify the reporting insider. The extract carries the insider's name as filed but no CIK for them, and a CIK is the only identifier that is stable across filings, so there are no per-insider pages. Rather than offer a page that cannot be trusted to mean one person, there is none.

Rows in the mirror are never edited in place. An amendment arrives as a new filing with its own accession number, and re-loading the same filing is a no-op. The table structure follows the SEC's own insider-transaction table family, the same structure used by the open insider-trading dataset published in Scientific Data by ebomi's author, with column names that track the element names in the SEC's ownership-document XML. Because the catalog now mirrors that dataset rather than merely resembling it, ebomi's records and the open research dataset line up by construction instead of by intention.

Beyond the filings themselves, we keep the account data needed to run the service: your email address, your watchlist, and bookkeeping about which alerts were queued and sent. All filing content we store is public information published by the SEC.

What this catalog does not hold

The catalog holds 3,617,570 of the 4,977,937 filings in the source extract, which is 72.7 percent. Against SEC EDGAR's own index for 2021 to 2026 it holds 83.8 percent of Form 4 filings, and that proportion is flat year over year rather than drifting.

Most of what is missing is missing on purpose. Every filing is tested against four rules before it is stored, and a filing with nothing left after them is not stored at all.

Filings excluded before storage, by rule
Excluded Filings Share
Reports only derivative activity 769,458 15.5%
Reports only holdings, no transactions 288,671 5.8%
Fails a value or date sanity check 159,752 3.2%
Is an amendment restating an earlier filing 142,486 2.9%

The largest of those is the product's own claim. A Form 4 that reports only derivative activity is a compensation event, and this catalog exists to separate open-market buys and sells from that machinery. Excluding those 769,458 filings is the separation, not a shortfall in it.

One gap is not ours, and we cannot yet size it

The extract is itself derived from EDGAR, and its publisher has measured roughly 4.7 percent of 2025Q1 filings missing from it outright. That gap is uncharacterised across the rest of the range. So the chain is EDGAR, then the extract with an uncharacterised gap, then our four deliberate rules, and only the last is a decision we made.

Source: the Layline insider extract, build of 2026-08-09, CC0-1.0. Cite as Balogh, A. Insider trading. Scientific Data 10, 237 (2023), doi:10.1038/s41597-023-02147-6.

What we do not do

The academic commitment

ebomi is built by a finance professor whose research covers insider trading, and it is run in the spirit of open science. That carries three standing commitments.

Balogh, A. Insider trading. Scientific Data 10, 237 (2023).

doi:10.1038/s41597-023-02147-6

Limitations, stated honestly

Questions, or something that does not match what you observe

Write to ping@ebomi.com. For the story behind the project, see Inside Ebomi.