Skip to main content

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 results
  • empty: 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

filingstudio-0.4.0.tar.gz (17.4 kB view details)

Uploaded Source

Built Distribution

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

filingstudio-0.4.0-py3-none-any.whl (16.2 kB view details)

Uploaded Python 3

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

Hashes for filingstudio-0.4.0.tar.gz
Algorithm Hash digest
SHA256 01e7227ec28153b7cabed7cfc5bd030deba2af94d4197b7855f04c86074b1b0f
MD5 edf393ec902a4ac94d9189f6c80232f5
BLAKE2b-256 6a5924c8c818128f10e7fef9003a81bdfca8f075ae77619ba47eeae258fa7daa

See more details on using hashes here.

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

Hashes for filingstudio-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 695b8c1fca0a5b52928091719f8aab0287ca3dda46dbfaa3b0238eae41ac8471
MD5 052eee89247c68ad5784492d16771ca1
BLAKE2b-256 85769e61b38d244b73585c0459061020488ab2371e357c497ee83e25332c9305

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page