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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tradevodata-0.1.2.tar.gz (15.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tradevodata-0.1.2-py3-none-any.whl (9.2 kB view details)

Uploaded Python 3

File details

Details for the file tradevodata-0.1.2.tar.gz.

File metadata

  • Download URL: tradevodata-0.1.2.tar.gz
  • Upload date:
  • Size: 15.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for tradevodata-0.1.2.tar.gz
Algorithm Hash digest
SHA256 49a061f126ae20359b58b31cc0c2f7b6cbb5311cc64b55e882942e326a1ff1a9
MD5 1fdc0cd35ef746f0169b29d6214168df
BLAKE2b-256 405959310088ee22444864e19724766fde0eb2a46694e8b2317a045a7ae46ad4

See more details on using hashes here.

File details

Details for the file tradevodata-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: tradevodata-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 9.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.9

File hashes

Hashes for tradevodata-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 577d8b6cae4b0f51ceba5b57006da65564baff8d92f6b327100da31cc2b29e38
MD5 cbe6e5f092db4fae26ee6616da545d0c
BLAKE2b-256 b6bc644bd0a6ab7e23b16eeda44659a5881df388a67e16c6b5ba1311c9c5d71b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page