Sifting.io pitched us on the premise that XBRL concept renames break ratios permanently, and that their fundamentals API solves that pain. Both halves of the pitch are worth taking seriously — the first has been our default mode for three months; the second is a productization question, not a data-quality one. Held against what they publish at sifting.io/docs, the underlying substrate we already run is more comprehensive on every dimension the pitch names, and covers ground their docs don't mention at all — PIT semantics, IFRS foreign filers, per-period currency, restatement flags.
The pain they describe is real. It is also exactly the pain extract_fundamentals.py was built to absorb. Three things we do about it today:
TAG_PRIORITY_BY_TAXONOMY maps every variant a filer uses for the same concept — eight tags collapse to revenue in us-gaap, seven in ifrs-full — into one stable field. New variants get added to the registry, not to callers.pick_consensus uses a majority/mode rule with typo-detection so a single wrong amendment doesn't poison the value.is_restated flag. Set when any tag backing revenue / NI / OI / EPS / OCF was later revised by more than 2%. Backtest consumers filter with a single WHERE clause; ~16.5% of rows are flagged.Columns compare what each side publishes. Anything absent from sifting.io/docs is marked Not published — not asserted as absent from their product, but a fair signal of where their pitch does and does not go.
| Capability | XBRL Fundamentals | sifting.io |
|---|---|---|
| Tag normalization Concept renames per taxonomy | Documented Per-taxonomy priority chain across us-gaap + ifrs-full. Bank-revenue fallback, REIT rental fallback, RFC-vs-RAO disambiguation, per-period currency handling. | Not published
Endpoints exist (/v1/fnd/stocks/:ticker/financials, /…/financials/:concept) but no docs section on how renames are handled.
|
| Amendment handling What happens on restatement | PIT-correct
Earliest-filed wins. is_restated flag when the value later moved >2%. 16.5% of rows carry it. Strict-PIT subset via one WHERE clause.
|
Not published No mention of PIT semantics, first-reported dates, or restatement flags on any docs page we could reach. |
| Pre-computed ratios Growth, margins, direction | 28+ derived Six direction booleans, nine YoY growth rates, four margin ratios, cash runway, accruals ratio, three margin-delta YoY. Cooked into every row. | Endpoint exists
/v1/fnd/stocks/financials/ratios is listed; which ratios and how they're defined are not on the docs index.
|
| Coverage universe Total CIK count | 16,812 CIKs 15,958 us-gaap domestic + 854 IFRS. Includes Toyota, Sony, Honda, VALE, Petrobras, Barrick, Alcon, HSBC, BBVA, GMAB, argenx. | Not published Discovery endpoint returns "US issuers"; no total stated, no IFRS coverage stated. |
| Foreign filers & IFRS 20-F, 40-F, ifrs-full | Full extractor Taxonomy-aware extraction with per-taxonomy priority. Wave 11 recency rule catches post-transition filers whose legacy us-gaap tags would otherwise freeze the timeline. | Not published Docs describe US SEC surface (10-K/Q, 8-K, DEF 14A, 13D/G, 13F, Form 3/4/5). No IFRS mention. |
| Per-period currency Native vs. converted | Per row
Native units, with reporting_currency on every row. Handles mid-history switchers — 39 CIKs on record (UBS CHF→USD, Diageo GBP→USD, YPF ARS→USD, Genmab DKK→USD).
|
Not published
A currency-converter endpoint exists (/v1/convert/rate). No detail on how the fundamentals endpoint reports currency per period.
|
| Refresh cadence SEC → queryable | Hourly + weekly Hourly incremental picks up every new 10-K / 10-Q / 20-F / 40-F. Sunday full-refresh is the drift safety net. Business-day-aware alerting. | Not published No cadence stated for fundamentals. |
| Historical depth How far back | Full XBRL era
Since SEC XBRL mandate (~2009). Cumulative companyfacts.zip parsed end-to-end.
|
Not published No history window stated. |
| Dividends Same row shape | In-row
dividends_paid is a column on every quarterly and annual row.
|
Adjacent Implied via earnings / ownership surfaces; no dedicated dividends endpoint in the docs index. |
| Insiders (Form 3/4/5) Filer trading activity | Same client
Handled by argos-mcp-server in the same request flow: insiders_of_company, insider_flow, insider_cluster_screen, more. Composable with fundamentals.
|
In their API
/v1/holdings/insiders. Genuine convenience of a single-vendor surface.
|
| Corporate actions Splits, spinoffs, M&A recasts | Recasts flagged
M&A / spinoff recasts land in is_restated alongside real restatements. Splits/spinoffs handled downstream, not in-row.
|
Not published No corporate-action endpoint in docs. |
| Cross-signal capability What management said × what they did | 469 classifiers Divergence between classifier signal and the fundamentals row is unique to us. Company says pricing power expanding; margin says the opposite. Nobody else has both sides. | Not offered Fundamentals-only vendor surface. Not in their pitch. |
| Pipeline transparency Auditable computation trail | Full trail
first_reported_date + accession_number on every row. Sanity gates block bad loads (NEGATIVE_BALANCE / NEGATIVE_FLOW threshold). Extract logic is source-visible.
|
Vendor black box Standard for a hosted API. Their disclaimer notes outputs are "synthetic reference values" from proprietary aggregation. |
They surface fundamentals as a public REST API with a single key. We surface ours via internal MCP tools and Postgres / Qdrant against our own workloads. For a customer who wants a hosted endpoint to hit directly, sifting.io is a shape we don't currently offer — regardless of who has the better underlying data. If a client comes back saying "we want the sifting shape," the question is whether we productize an endpoint on top of our substrate, not whether we have the substrate.
Beyond that, three things they publish that we don't sell in the same shape:
thirteenf_* MCP tools; they expose it over the same REST surface as their fundamentals endpoint. Same-vendor convenience, not a data gap.If the pitch continues, these five questions determine whether the comparison is close or lopsided. From their public docs, none of the five is addressed.
/financials handle a company whose reporting currency changes mid-history? What does it return for Genmab FY 2025 (DKK → USD switch), UBS FY 2025 (CHF → USD), argenx FY 2025 (EUR → USD)?/financials? If a filer amends a prior period, do consumers see the as-first-known value or the latest value? Is there a flag either way?/financials today, and what share of that is IFRS?