USASpending ORM
USASpending ORM is a typed, ORM-style Python interface to the USAspending.gov API. It provides fluent query builders and navigable models for federal awards, transactions, recipients, agencies, spending summaries, Treasury Account Symbols, and bulk downloads.
The library is maintained by The Planetary Society.
Why use it?
- Express complex USAspending searches through chainable Python methods.
- Work with normalized models,
datevalues, and exactDecimalamounts. - Navigate from awards to recipients, agencies, transactions, funding, accounts, and subawards.
- Retain the original API response through each model's
.rawproperty. - Use built-in pagination, retries, rate limiting, optional caching, and result safeguards.
No API key is required.
Installation
python -m pip install usaspending-orm
Requires Python 3.9 or newer.
Quickstart
from usaspending import USASpendingClient
with USASpendingClient() as client:
awards = (
client.awards.search()
.contracts()
.agency("National Aeronautics and Space Administration")
.recipient_search_text("Space Exploration Technologies")
.fiscal_year(2024)
.order_by("Award Amount", "desc")
.limit(5)
)
for award in awards:
amount = award.total_obligation or 0
print(f"{award.award_identifier}: {award.recipient.name} - ${amount:,.2f}")
Queries are lazy. Building the chain makes no request; iteration, .first(),
.all(), .count(), len(query), indexing, and truth-value testing execute
the appropriate USAspending operation.
Documentation
The full documentation covers:
- installation and core concepts;
- award and transaction searches;
- sessions, lazy loading, caching, and production use;
- generated Python API reference;
- mappings to canonical USAspending endpoints;
- known upstream limits and contract differences.
The repository includes Read the Docs configuration for the published site.
Development
git clone https://github.com/planetary-society/usaspending-orm.git
cd usaspending-orm
uv sync --locked --group docs
uv run pytest -q
uv run ruff check src/ tests/
uv run ruff format --check src/ tests/
uv run --group docs mkdocs build --strict
Integration tests make live USAspending requests and run separately:
uv run pytest -m integration -q
Preview the documentation site locally with uv run --group docs mkdocs serve.
Note for contributors
Documentation examples are enforced, not just reviewed.
tests/test_documentation.pycompiles every fencedpythonblock underdocs/, checks that method names cited in prose exist on the public API, and executes most blocks against the live API under theintegrationmarker. Adding or removing an example changes the runnable count, so update_EXPECTED_RUNNABLE_BLOCKSin the same change.The public API surface is snapshot-tested. When a deliberate change adds, removes, or alters a public callable, regenerate the fixture and review the diff:
USASPENDING_REGEN_API_SURFACE=1 uv run pytest tests/test_public_api_surface.pyThe published site builds from
.readthedocs.yaml. To activate hosting: importplanetary-society/usaspending-ormin Read the Docs, useusaspending-ormas the project slug, and enable pull-request builds. Keeplatestas the default until a release tag contains the docs configuration, then makestablethe default user-facing version while retaininglatestformain.
Project status
The project is in beta. USAspending itself changes over time, and live federal data is revised as agencies submit corrections. Counts and values shown in examples should not be treated as permanent fixtures.
See CHANGELOG.md for release history and compatibility notes.
License
USASpending ORM is released under the MIT License.
Release files for usaspending-orm 0.9.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 | |
|---|---|---|---|
| usaspending_orm-0.9.1.tar.gz | 529.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| usaspending_orm-0.9.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 747.4 kB
Release files / usaspending_orm-0.9.1.tar.gz
| Download URL | usaspending_orm-0.9.1.tar.gz |
|---|---|
| Size | 529.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c6a0dc12b6976d7e694d6dc2b3f547a152af73771fe45ea9bb7604e120ca029b
|
|
BLAKE2b-256 checksum How to use checksums |
dd470872297e1fd40aec2dcfb3b03a3ecafbe5ee72e1973a8e8870749a48a8f2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / usaspending_orm-0.9.1-py3-none-any.whl
| Download URL | usaspending_orm-0.9.1-py3-none-any.whl |
|---|---|
| Size | 217.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
81abc95bed18ac4db461c9f07146dd8f87745925d6042c74728dc049b4cf730e
|
|
BLAKE2b-256 checksum How to use checksums |
91f331bb7bd4b4509c357d7afcb61e505cbd9c7fac9e9be2a5461c8d90f00edd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|