filingstudio
Python client for the Filing Studio API. Search SEC filings exactly as printed, resolve any number back to the line that printed it, and verify claims deterministically. One call per door, typed results, and your key never in a URL.
pip install filingstudio
import os
from filingstudio import FilingStudio
fs = FilingStudio(api_key=os.environ["FILING_STUDIO_API_KEY"])
hits = fs.search("NVDA", "purchase commitments", type="prose")
for p in hits.passages:
print(p.text, p.trace_id)
v = fs.verify("NVDA", metric="Revenue", value=130497, period="FY2025")
print(v.verdict) # supported | unsupported | ambiguous | unavailable
print(v.receipts[0].printed_text) # "130,497"
print(v.receipts[0].links.highlight) # opens the filing with that cell marked
t = fs.trace(v.receipts[0].trace_id) # the printed line plus its neighbours
for row in t.context:
print(row.label, row.printed_text, "<- source" if row.is_source else "")
Async is the same API:
from filingstudio import AsyncFilingStudio
async with AsyncFilingStudio(api_key=key) as fs:
cov = await fs.coverage("NVDA")
The six doors
| method | what it answers |
|---|---|
search(ticker, q, type=, period=, forms=, limit=, offset=) |
printed rows, tables, and prose matching plain words |
verify(ticker, metric=, value=, period=, claim=) |
is this claim what the filing prints? |
trace(trace_id, include_context=True) |
the exact printed line behind a traceId, with neighbours |
filings(ticker, form=, year=, limit=) |
a company's indexed filings |
coverage(ticker) |
is anything indexed, and how fresh |
table(ticker, accession, table_id, format="records") |
one printed table, as filed |
Pass value to verify as the raw figure you hold (130497 or 130497000000
alike). The API tries every printed scale a filer could use. Do not pre-scale.
Honest answers
Every result carries index_state. coverage is one of:
indexed: a populated index answered, with resultsempty: a populated index answered and had nothing. The only real negative.incomplete: the index could not fully answer. Says nothing about the filing.unavailable: the service or your quota could not answer. Same.
RateLimitError (HTTP 429) carries index_state.note, a sentence safe to
show a user. Other non-2xx answers raise FilingStudioError with status,
code, and the API's message. 5xx and network failures are retried with
backoff; 4xx are not. No error ever contains your key.
Research with receipts (experimental)
from filingstudio.research import answer
def llm(system: str, user: str, json_mode: bool) -> str:
... # any chat model; return the assistant text
res = answer("How is Data Center revenue trending?", "NVDA", llm=llm, client=fs,
on_step=lambda label, detail: print(label, detail))
res.answer, res.sources, res.hard_stop
Plan, search, assess, write, with hard stops. Every [n] in the answer is a
search hit you can trace; citations to nothing are stripped; with no evidence
the answer says so. llm=None runs one search and returns the evidence only.
Options
FilingStudio(api_key, base_url=None, timeout=30.0, max_retries=2, transport=None)
transport accepts an httpx transport, for tests (httpx.MockTransport).
Develop
pip install -e .[test]
pytest
MIT
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 filingstudio-0.4.0.tar.gz.
File metadata
- Download URL: filingstudio-0.4.0.tar.gz
- Upload date:
- Size: 17.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
01e7227ec28153b7cabed7cfc5bd030deba2af94d4197b7855f04c86074b1b0f
|
|
| MD5 |
edf393ec902a4ac94d9189f6c80232f5
|
|
| BLAKE2b-256 |
6a5924c8c818128f10e7fef9003a81bdfca8f075ae77619ba47eeae258fa7daa
|
File details
Details for the file filingstudio-0.4.0-py3-none-any.whl.
File metadata
- Download URL: filingstudio-0.4.0-py3-none-any.whl
- Upload date:
- Size: 16.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
695b8c1fca0a5b52928091719f8aab0287ca3dda46dbfaa3b0238eae41ac8471
|
|
| MD5 |
052eee89247c68ad5784492d16771ca1
|
|
| BLAKE2b-256 |
85769e61b38d244b73585c0459061020488ab2371e357c497ee83e25332c9305
|