← research2026-08-19 · 8 min read

Point-in-Time Fundamentals for Numerai Signals: Killing Lookahead in Your Feature Join

If you build features for Numerai Signals from fundamentals, the single most common way to silently overstate your live performance is joining on the wrong date. Most fundamentals vendors ship data keyed by fiscal period end or a generic "report date" that gets overwritten on every revision. Neither tells you when the number was actually knowable. Numerai's tournament resolves against real future returns, so any leakage in your feature construction shows up as a validation metric that decays the moment you go live. (This is not investment advice, and nothing here is a performance promise.)

This article covers three things: why lookahead leaks into fundamentals-based signals even when you think you've handled it, how a first_filed-keyed join fixes the mechanics, and where a small, honest, US-annual-only dataset like ours fits — and where it doesn't.

Why fundamentals leak into signals more than price data does

Price and volume are point-in-time by construction — the close on Tuesday was known Tuesday night. Fundamentals are not. A 10-K covering fiscal year 2022 might be filed in March 2023, restated in an amendment in August 2023, and then sit in a vendor's database keyed only by "period end 2022-12-31." If your pipeline joins on period end and pulls whatever value is in the database today, you're feeding your model information that didn't exist yet, and sometimes a corrected number that didn't exist until months later.

This is a bigger problem for fundamentals than most people expect, because:

We wrote a longer, more technical breakdown of this mechanism in Lookahead Bias in Fundamental Backtests if you want the failure modes in more detail.

The correct join: first_filed, not period end

The fix is mechanical once you have the right column. Every fundamentals row needs a first_filed timestamp — the date the value became public via SEC EDGAR — separate from the fiscal period it describes. For a given Numerai submission date as_of, the query is:

SELECT * FROM fundamentals
WHERE ticker = ?
  AND first_filed <= as_of   -- same-day inclusive
ORDER BY first_filed DESC
LIMIT 1

That's the entire leakage fix. No lookahead window heuristics, no "lag by 90 days" hack applied uniformly across every filer (which both under- and over-corrects depending on the company). You also want two values per row, not one:

We key our dataset this way: first_filed, original_value, latest_value, a restated flag (set when a same-tag revision exceeds 0.5%, including amendments), and qa_status. Across our current build, 18,717 rows carry that restated flag out of 313,001 total — restatements are common enough that ignoring them isn't a rounding error.

What our dataset is (and explicitly is not)

Tradevo Data (tradevodata.com) is a point-in-time US equity fundamentals dataset sourced entirely from SEC EDGAR (public domain data, not redistributed from a paid vendor). Currently: 5,193 US companies, 313,001 point-in-time rows, 7 core concepts (Revenue, NetIncome, Assets, StockholdersEquity, OperatingCashFlow, EPSDiluted, DilutedShares), up to 12 fiscal years of history, annual only — 10-K and 10-K/A filings. Quarterly is on the roadmap, not shipped. If your Numerai signal design needs quarterly fundamentals or non-US tickers, this dataset will not cover you today — say so up front rather than let you find out after checkout.

Access is one JSON endpoint, /v1/fundamentals?ticker&as_of[&concept], server-side first_filed <= as_of filtering built in, plus the full dataset via /v1/download and whole-universe cross-sections via /v1/snapshot?as_of — all included in the $49/mo plan, 5,000 requests/day. No quarterly, no non-US, no Parquet yet (CSV/gzip only; Parquet is roadmap).

On lag: we measured mean 43.4 days / max 61 days of filing lag on the reliable-filing rows of our 40-company free sample. That stat is scoped to the sample only — we have not published an equivalent lag measurement for the full 5,193-company dataset, so don't extrapolate it to the whole universe.

Fair comparison

Tradevo Data Sharadar (Nasdaq Data Link) Tiingo QuantConnect Build it yourself from EDGAR
Point-in-time fields Yes (first_filed, original + latest) Yes, per their docs Fundamentals PIT coverage varies, check their docs Yes, via their data infra Yes, if you build it correctly
Frequency Annual only Annual + quarterly, per their docs Varies by plan Varies by plan Whatever you extract
Coverage US only US, check their docs for depth/history US-focused Multi-asset via platform Whatever you scope
Price $49/mo flat See their pricing page See their pricing page See their pricing page Your engineering time
Restatement flags Yes, explicit Check their docs Check their docs Check their docs You build the logic

We don't know competitors' current prices and won't guess — check their pricing pages directly, they change.

When another option is genuinely better

If you need quarterly fundamentals for Numerai Signals features (which many quality/growth factors want), Sharadar or a comparable vendor with quarterly PIT coverage is the right call today — we don't have it. If you need international equities, none of what's here helps; we're US-only. If you're already inside QuantConnect's ecosystem and want fundamentals integrated with their backtester and live trading, their bundled data may save you more integration time than a standalone API, even before comparing price.

When to build it yourself

EDGAR's data is public and free. If you only need a handful of concepts for a handful of tickers, and you're comfortable parsing XBRL and handling amendment logic yourself, you can build a first_filed-keyed table in a weekend. The tradeoffs: you own restatement detection, filer-level edge cases (fiscal year changes, non-calendar year ends, multiple amendments to the same period), and ongoing maintenance as EDGAR's XBRL taxonomy shifts. For a few tickers, doable. For thousands of tickers across multiple years, it becomes a real data-engineering project — which is the gap we built this to fill.

Try before you subscribe

The free sample — 40 companies, 3,280 rows, full methodology, no signup — is on GitHub. Run your own join logic against it before paying for anything. If it fits your Signals pipeline, the full dataset is $49/mo, instant key after Stripe checkout, cancel anytime. More on the mechanics of PIT fundamentals generally: Point-in-Time Fundamentals Data, Explained.


Not investment advice; verify any competitor pricing yourself on their current pricing pages.

Check your own backtest against the free sample.

40 large caps, 3,280 point-in-time rows, full methodology — no signup.