Skip to main content

tradevodata

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

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

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]"

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.0.tar.gz (7.9 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.0-py3-none-any.whl (8.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tradevodata-0.1.0.tar.gz
  • Upload date:
  • Size: 7.9 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.0.tar.gz
Algorithm Hash digest
SHA256 0007103220b9ce3d23a9f6e482660d9012d2395fb364c02185637ccbf1f7c2be
MD5 ce9177e68fd73e24d672e48dfd41fd34
BLAKE2b-256 cac3051b54468da5fab58257e4d4c787818561ee21c2b092e8c7378bcdfbd355

See more details on using hashes here.

File details

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

File metadata

  • Download URL: tradevodata-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0837a2bbd1b7b4e2cc9c0d14cdcfc7b765d931c907e426480d5fcd7673e92b48
MD5 c4c065cbce976ed6e20c0ce2dd716025
BLAKE2b-256 726443847770430e2240da14f7a6ae3192502d51f2f592becc160dd0ecedb3b8

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