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.
Metadata
Release files for tradevodata 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tradevodata-0.1.1.tar.gz | 8.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tradevodata-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 17.4 kB
Release files / tradevodata-0.1.1.tar.gz
| Download URL | tradevodata-0.1.1.tar.gz |
|---|---|
| Size | 8.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ed9543b050e3009d0572a434b17055c41e266b9611d54edd7fc8413309bf55e
|
|
BLAKE2b-256 checksum How to use checksums |
4d1ea0c7f87f10ec5bd55f7ca273ec4a27ca6651373bc443c5b9822b383f4958
|
| 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.1-py3-none-any.whl
| Download URL | tradevodata-0.1.1-py3-none-any.whl |
|---|---|
| Size | 8.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e2609ef05654e7f407c7cb2316e351dd32406799eefafe78b754e2ca2d683799
|
|
BLAKE2b-256 checksum How to use checksums |
aac741c21ad2b8b345221cfcd40654a33b01cd499f16ef85696c075efe485632
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.9
|