Qanat
A data platform for investment research.
What it is
Qanat is a data platform for investment research.
It does four things:
| ingest | pull data in from wherever it lives |
| save | keep it, dated, exactly as it arrived. The same data arriving twice is stored once, so a re-run is always safe |
| transform | clean it, type it, and compute what you define from it |
| serve | hand it back, including as it stood on a past date |
And it has its own orchestrator that runs those four and checks each one did what it should.
That part is not an extra. A source pulls on its own clock and a step waits for the table it reads, so something has to hold the order. And a job that failed quietly looks exactly like a job that had nothing to do. Only the thing that knew the job was due can tell those apart. Without it, a data set loses a day and nobody notices.
What it is for is investment research: company accounts, prices, anything with a date on it. Qanat computes the metrics you define over that data, for every company, for any date. Valuation metrics and screening metrics are just metrics you defined.
What it is not: it does not define metrics for you, does not hold your thresholds, does not pick companies, and does not trade. Those belong to you and to whatever you point at it.
The dates are the point
Company results come out a while after the period they cover. Before that day, nobody could read them.
So Qanat puts two dates on every number: the period it covers, and the day it became public.
Ask for a metric as of 2022 and you get it computed from what was public in 2022. Not from numbers that arrived in 2023. Without that, every answer about the past is quietly better than anything you could have acted on.
This is the one thing in Qanat that is hard to add later, and it is why the platform exists rather than a folder of spreadsheets.
Try it
Needs Python 3.10 or newer.
uv tool install qanat-fdtl # or: pip install qanat-fdtl
qanat init my-research --demo && cd my-research
That builds a small working project and runs it, in about ten seconds. The data is made up, so you need no API key and no network.
Use it from your agent
claude mcp add qanat -- qanat mcp --scope research
Any MCP client works. Then just ask:
"What data is in here, and where did it come from?"
"Add a metric for price over earnings."
"Which companies passed my rule in 2022?"
"What did those companies do over the next year?"
There is no website and no dashboard. Your agent is the screen.
What Qanat keeps, and what it does not
Qanat keeps what everyone shares.
- Your data, in layers. A source lands it as it arrived; steps you write clean and type it.
- Your metric definitions. A metric is the same number for everybody who asks, so it is worked out once rather than per request.
Two of those are not finished in 0.4.0: versioned definitions and kept values are the direction, and today a metric is a step you run. See Status.
Your client keeps what is yours alone. Thresholds. Target rates. Which companies you watch. Your saved work.
That split is not a preference. Qanat cannot tell two callers apart, so anything belonging to one person cannot be stored in it correctly. Your agent, or a hosted service, is where that lives.
So screening happens on your side. Qanat serves the values. Your client compares them to your numbers and gets the list.
The yaml, the step contract and the four rules Qanat enforces are in docs/contract.md. Tool-by-tool reference is in docs/agents.md.
What comes in the box
| Connectors | HTTP, SQL, CSV, and a fake market so you can play before you have any API key |
| Store | a DuckDB file, or Postgres on localhost |
| Examples | five of them. examples/filings-sample is the shape this is built for |
Qanat makes no network calls of its own. The only ones are what your own sources make.
Status
Beta. It does what this page says on my own work, and few other people have run it. If something breaks, open an issue or say so on Discord.
You bring the data. Nothing in here reads a company filing yet. There are generic connectors and no SEC parser, so loading real accounts is your job, or point it at a feed you already have.
It does not trade. Qanat produces a list. It does not place an order, and no agent it serves ever will.
What it does not do yet. No industry grouping, so a ranking is against whatever list of companies you give it. No backfills. No incremental updates.
One honest limit. The two dates stop a step from seeing the future. They do not stop you, or your agent, from reading ahead while deciding what to try. The data cannot cheat. A person still can.
0.4.0 took a lot out. This was built as a backtesting engine and it is a data platform now, so everything that judged a result is gone: the significance bar, the trial ledger, the indicator IC block, portfolio weights, the benchmark, the in-sample split, and live scoring. About 1,300 lines. The reasoning is in CHANGELOG.md.
Three things on this page are the direction and not 0.4.0. The package still ships five fixed layer names rather than letting you name your own. Metric definitions are not versioned yet, and their values are not kept. And screening is still a step you write rather than one call. Each is a decision already made, not an open question.
What this is not. Airflow, Dagster and Prefect run general pipelines and run them across many machines. Use those for that.
Issues and pull requests welcome. See CONTRIBUTING.md.
License
MIT. See LICENSE.
Copyright (c) 2026 fidetolabs
Metadata
Release files for qanat-fdtl 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| qanat_fdtl-0.4.0.tar.gz | 1.1 MB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qanat_fdtl-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.2 MB
Release files / qanat_fdtl-0.4.0.tar.gz
| Download URL | qanat_fdtl-0.4.0.tar.gz |
|---|---|
| Size | 1.1 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
62e2b7bf21ca549864f57ee9a46c07b16fa71ae834feeb0f4616933612780f20
|
|
BLAKE2b-256 checksum How to use checksums |
8c6c7961d4dea476063e08f0318f1b95013ef69f9ab16132e061ab690d7b1bb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logRelease files / qanat_fdtl-0.4.0-py3-none-any.whl
| Download URL | qanat_fdtl-0.4.0-py3-none-any.whl |
|---|---|
| Size | 121.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f9e755498042435f139ed42b2283164ed9cf80abe2d93b1c88e3e54a58b9c622
|
|
BLAKE2b-256 checksum How to use checksums |
e3b43ffe5f232f5cfe47316409ed70f1343b6bdc10fd04bd51424c6af6ba21c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logSecurity for qanat-fdtl 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for qanat_fdtl-0.4.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.