Skip to main content

USASpending ORM

Tests PyPI Python

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, date values, and exact Decimal amounts.
  • Navigate from awards to recipients, agencies, transactions, funding, accounts, and subawards.
  • Retain the original API response through each model's .raw property.
  • 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:

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.py compiles every fenced python block under docs/, checks that method names cited in prose exist on the public API, and executes most blocks against the live API under the integration marker. Adding or removing an example changes the runnable count, so update _EXPECTED_RUNNABLE_BLOCKS in 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.py

The published site builds from .readthedocs.yaml. To activate hosting: import planetary-society/usaspending-orm in Read the Docs, use usaspending-orm as the project slug, and enable pull-request builds. Keep latest as the default until a release tag contains the docs configuration, then make stable the default user-facing version while retaining latest for main.

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)

Source distribution for usaspending-orm 0.9.1
File Size Uploaded
usaspending_orm-0.9.1.tar.gz 529.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for usaspending-orm 0.9.1
File Interpreter ABI Platform
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}

Release history Release notifications | RSS feed

This release

0.9.1 This release

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.3

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release 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