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
- Docs — https://tradevodata.com/docs
- Free CC0 sample — https://github.com/christianpichichero-max/pit-fundamentals
- Methodology — how each number is derived from raw filings, so you can check any row
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tradevodata-0.1.1.tar.gz.
File metadata
- Download URL: tradevodata-0.1.1.tar.gz
- Upload date:
- Size: 8.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ed9543b050e3009d0572a434b17055c41e266b9611d54edd7fc8413309bf55e
|
|
| MD5 |
dd5ac286bd8889aee7bdbd48b6bb07c0
|
|
| BLAKE2b-256 |
4d1ea0c7f87f10ec5bd55f7ca273ec4a27ca6651373bc443c5b9822b383f4958
|
File details
Details for the file tradevodata-0.1.1-py3-none-any.whl.
File metadata
- Download URL: tradevodata-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e2609ef05654e7f407c7cb2316e351dd32406799eefafe78b754e2ca2d683799
|
|
| MD5 |
e8f893ac2615406600c21963fa271d7e
|
|
| BLAKE2b-256 |
aac741c21ad2b8b345221cfcd40654a33b01cd499f16ef85696c075efe485632
|