Data package

Gross-margin panel: the data

901 firm-quarters of gross margin, computed from audited filings rather than from a survey or a vendor disclosure. The codebook states what the panel cannot show before anyone uses it, and the two diagnostics that were built and thrown away are published with the rest.

Read the essay →

What the panel is

Every figure is computed from SEC EDGAR XBRL company facts: the audited numbers as filed. Nothing here is a benchmark, a survey, a vendor disclosure or an estimate.

The frame is the 64 constituents of the BVP Nasdaq Emerging Cloud Index, read on 9 August 2026 and fixed. It is reused from the pricing-page corpus deliberately: it is the same population, already justified, already public, and, importantly, not conditioned on the outcome. It is an index of cloud companies, not a list of firms with AI features or with falling margins. A universe assembled by looking for margin compression would find it.

The window is 2022Q1–2026Q1, 17 quarters. 53 of the 64 have a complete run across it: 901 firm-quarters, balanced. Seven listed or first filed mid-window and carry in_balanced_panel = False. Four are excluded because no quarterly US-GAAP gross profit exists for them: three are Israeli-domiciled foreign private issuers that report gross profit annually or semi-annually, and Workday tags no cost-of-revenue element under any US-GAAP tag in the window. None is silently dropped.

Three decisions change the numbers. Q4 is derived, because it is never filed: it exists only as annual minus the three quarters inside it, and reading the API naively drops the seasonally strongest quarter of every year. Quarters are assigned by period midpoint, not period end: sixteen of the 53 have off-calendar fiscal years, and Salesforce's November–January quarter lands a full quarter late if assigned by its end date. SEC's own frame field is not used: it is assigned least to exactly the off-calendar filers the midpoint rule exists for.

Files

Text and CSV throughout. Nothing here needs an account or a tool to open.

  • codebook.md 6 kB The frame, the window, the exclusions with their actual reasons, every field definition, and the limitations: stated before anyone uses the data rather than after.
  • gross-margin-panel.csv 215 kB The panel itself. One row per firm-quarter, with the filed period exactly as reported, the revenue and cost tags actually used, and in_balanced_panel.
  • scripts/build-panel.py 7 kB Fetches the company facts and builds the panel: the Q4 derivation, the midpoint assignment and the tag fallbacks are all here. Needs a SEC User-Agent naming a contact address.
  • scripts/analyse.py 5 kB The headline series.
  • scripts/power-and-robustness.py 5 kB The power computation. Simulated at the observed between-firm spread: this is what produces the numbers in the limitations below.
  • scripts/diagnostic-v1-failed.py 5 kB A levels regression of log cost on log revenue. Published as a failure. The naive “elasticity above 1” reading fires about 50% of the time on random data, and the significance-tested version fires 98.9% of the time on a pure accounting reclassification with no change in cost structure at all.
  • scripts/diagnostic-v2-failed.py 6 kB The first-difference rebuild. Also published as a failure. It survives the reclassification (3.9%) and then detects a genuine 30% variable-cost shift only 3.8% of the time: below its own false-positive rate. Robust and blind.

The two diagnostics are kept rather than deleted because a failed instrument is evidence too. Neither is published as a recommendation: a test that cannot separate an economics change from a restatement, or that cannot see a real effect, is not a test.

Reproducing it

The SEC API is free, unauthenticated and rate-limited to 10 requests per second; it requires a User-Agent naming a contact address. No scraping, no vendor data, no login.

python3 scripts/build-panel.py      # fetch + panel
python3 scripts/analyse.py          # the headline series
python3 scripts/power-and-robustness.py

Where a filer restated, the latest filed value wins. Rows with a computed margin outside (0,1) are dropped as a tagging error rather than carried.

What this data cannot do

  • Cost of revenue is one blended line. No filer breaks out inference. The panel can show what happened to the total; it cannot attribute any part of it to AI, and no arrangement of these columns will make it do so. Anyone, including this site, who claims to isolate an AI effect from these columns is inferring, not measuring.
  • The design detects a mean compression of about 2 percentage points. Simulated at the observed between-firm spread: 50% power at −2pp, 84% at −3pp, and 17% at −1pp. A null result here is not evidence that nothing under a point happened.
  • Eleven of the 64 constituents are not in the balanced panel: seven partial, four excluded. They are in the file with that status, not counted as anything.

Licence and citation

Released under CC BY 4.0: reuse it, including to disagree with it.

Isoglu, S. (2026). Quarterly gross margin from audited filings, 2022Q1–2026Q1. isoglu.com.