Skip to main content

tradevodata

Open in Colab

Point-in-time US equity fundamentals from SEC EDGAR. Every value carries the date it actually became public, so a backtest can only see what was knowable at the time.

pip install tradevodata

The free sample needs no key

import tradevodata as tv

rows = tv.sample()        # 40 large caps, ~3,280 rows, CC0, no signup

Returns a pandas DataFrame if pandas is installed, otherwise a plain list of dicts — so the line above works on a bare install. Force either shape with to_pandas=True/False.

Same columns and the same semantics as the paid dataset, so you can write and verify your join logic before paying for anything.

as_of is required, on purpose

import tradevodata as tv

client = tv.Client(api_key="tvd_...")     # or set TRADEVODATA_API_KEY

client.fundamentals("AAPL", as_of="2024-06-30")

There is no way to ask this library "what is Apple's revenue?" — only "what was Apple's revenue knowable on this date?". On 2024-06-30 the answer is FY2023, because the FY2024 10-K had not been filed yet. That distinction is the entire product, and a default value for as_of is how lookahead bias gets written by accident.

Whole-universe cross-section

One call per rebalance date, instead of looping tickers:

snap = client.snapshot(as_of="2024-06-30", concept="Revenue", to_pandas=True)

Bulk

client.download("tradevodata.csv.gz")     # entire dataset, one file

Doing the point-in-time join yourself

If you're working from sample() or a bulk download, the as-of join is yours to do — as_of_filter does it correctly:

rows = tv.sample()
knowable = tv.as_of_filter(rows, as_of="2020-03-31")

Keeps only rows whose first_filed <= as_of, then the newest fiscal period per ticker/concept. That is the same logic the API applies server-side.

What each row tells you

column meaning
first_filed the date the value became public — the point-in-time stamp
original_value what was first reported. Use this for backtests
latest_value the current revision. May post-date your as_of — not PIT-safe
restated a later filing revised this by more than 0.5%
lag_days days from period end to first publication
qa_status clean, or FLAG: + reasons. We flag; we never silently drop

The client raises a UserWarning when rows come back flagged or when your as_of runs past our data cutoff. Silence it with Client(warn_on_flags=False) if you're handling qa_status yourself.

Honest limits

  • Annual only (10-K and 10-K/A). Quarterly is on the roadmap, not shipped.
  • US only, and no delisted companies — so mind survivorship bias if you build universes from this alone. We fix lookahead bias; that is a different problem.
  • 7 concepts, up to 12 fiscal years.
  • Filing lag averages 66 days across the universe (median 60, max 120). The 40-company sample averages 43 — large caps file fastest, so the sample is better than the whole.

If you need quarterly, delisted coverage, or breadth today, Sharadar is genuinely good and you should buy that instead.

Zero dependencies

Standard library only. pandas is opt-in:

pip install "tradevodata[pandas]"

See the bug for yourself

The Colab notebook runs the experiment on the free sample — no key, no signup, no install. It joins fundamentals both ways at every month-end and counts the disagreements. On the 40-company sample: 47 of 413 ticker-months (11%) use a revenue number that was not yet public.

Links

MIT licensed. Data sourced from SEC EDGAR (public domain). This is a dataset, not investment advice.

Metadata

Release files for tradevodata 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tradevodata 0.1.3
File Size Uploaded
tradevodata-0.1.3.tar.gz 16.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tradevodata 0.1.3
File Interpreter ABI Platform
tradevodata-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 26.4 kB

Release files / tradevodata-0.1.3.tar.gz

Download URL tradevodata-0.1.3.tar.gz
Size 16.6 kB
Tags Source
SHA-256 checksum
How to use checksums
15a11893e534ca3734f64145d03d2c260ea107e429f14f54c87f4b5e231bdf43
BLAKE2b-256 checksum
How to use checksums
5eaa030192fdacfab6b0a4c8f118d09e9cf07966ffced16aad784a7f80174486
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release files / tradevodata-0.1.3-py3-none-any.whl

Download URL tradevodata-0.1.3-py3-none-any.whl
Size 9.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fa67ef6930e970e1a3b7db391a13c098025690cb47d199138c3d36b20533333b
BLAKE2b-256 checksum
How to use checksums
d0a59aa8b025edc14773db5b2832b29667830ed1ba25247d1b925c11707f8af8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.9

Release history Release notifications | RSS feed

0.2.1

2 release files

0.2.0

2 release files

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page