pydoge-api

PyDOGE API is an advanced, Python wrapper for interacting with the public-facing API of the Department of Government Efficiency (DOGE)


Keywords
doge, government, efficiency, savings, contracts
License
MIT
Install
pip install pydoge-api==0.2.1

Documentation

PyDOGE Logo

A Python library to interact with Department of Government Efficiency (DOGE) API.


๐Ÿงพ Table of Contents
  1. About The Project
  2. Highlights
  3. Getting Started
  4. Usage
  5. Contributors
  6. Acknowledgements

๐Ÿ About The Project

PyDOGE API is an advanced, Python wrapper for interacting with the public-facing API of the Department of Government Efficiency (DOGE) โ€” a federal initiative aimed at increasing transparency and fiscal accountability by sharing detailed datasets on:

  • ๐Ÿ’ธ Cancelled grants
  • ๐Ÿ“‘ Contract terminations
  • ๐Ÿข Lease reductions
  • ๐Ÿงพ Payment transactions

๐Ÿš€ Features

  • Auto-pagination (sync or async, fetch all pages if needed)
  • .export() to CSV, Excel, or JSON with timestamped filenames
  • .to_dataframe() for Pandas users
  • .summary() with analytics (rows, nulls, dtypes, stats)
  • summary(save_as="...") for file logging
  • Returns Pydantic models & dict output
  • Retry-safe client with 429 handling

This package enables data scientists and analysts to programmatically access and analyze the data with ease.

๐Ÿ“Œ Getting Started

Installation

Install:

pip install pydoge-api

Upgrade:

pip install --upgrade pydoge-api

Documentation

Full developer docs with API reference, usage, and model schema:

๐Ÿ“š Usage

Get Grants and sorted by savings

from pydoge_api import DogeAPI

with DogeAPI(fetch_all=True, run_async=False) as api:
    grants = api.savings.get_grants(sort_by="savings")
    df = grants.to_dataframe()
    print(df.head())

    # Export to CSV
    grants.export("grants_q1", format="csv")
    
    # Show summary in terminal
    grants.summary(verbose=True)
    
    # Save the summary as markdown
    grants.summary(save_as="logs/grants_summary.md")

Get Contracts and sorted by agency

with DogeAPI(fetch_all=True, run_async=False) as api:
    contracts = api.savings.get_contracts(sort_by="agency")
    df = contracts.to_dataframe()
    print(df.head())

    # Export to CSV
    contracts.export("contracts_q1", format="csv")
    
    # Show summary in terminal
    contracts.summary(verbose=True)
    
    # Save the summary as markdown
    contracts.summary(save_as="logs/contracts_summary.md")

Get Leases

with DogeAPI(fetch_all=True, run_async=False) as api:
    leases = api.savings.get_leases()
    df = leases.to_dataframe()
    print(df.head())
    
    # Export to CSV
    leases.export("leases_q1", format="csv")
    
    # Show summary in terminal
    leases.summary(verbose=True)
    
    # Save the summary as markdown
    leases.summary(save_as="logs/leases_summary.md")

Get Payments and filter payments by agency

with DogeAPI(fetch_all=True, run_async=False) as api:
    payments = api.payments.get_payments(filter="agency", filter_value="NASA")
    df =payments.to_dataframe()
    print(df.head())
    
    # Export to CSV
    payments.export("payments_q1", format="csv")
    
    # Show summary in terminal
    payments.summary(verbose=True)
    
    # Save the summary as markdown
    payments.summary(save_as="logs/payments_summary.md")

Without using Context Manager

api = DogeAPI(
    fetch_all=True, # Get all records if True. Default False
    run_async=False # For Async set this to True
)

try:
    # Get Grants and sorted by savings
    grants = api.savings.get_grants(sort_by="savings")
    
    # Get Contracts and sorted by agency
    contracts = api.savings.get_contracts(sort_by="agency")
    
    # Get Leases
    leases = api.savings.get_leases()
    
    # Get Payments and filter payments by agency
    payments = api.payments.get_payments(filter="agency", filter_value="NASA")
    
    # Export to CSV
    grants.export("grants_q1", format="csv")
    
    # Show summary in terminal
    grants.summary(verbose=True)
    
    # Save the summary as markdown
    grants.summary(save_as="logs/grants_summary.md")
    
finally:
    api.close()
    

(back to top)

๐Ÿ‘ช Contributors

All contributions are welcome. If you have a suggestion that would make this better, please fork the repo and create a merge request. You can also simply open an issue with the label 'enhancement'.

Don't forget to give the project a star! Thanks again!

๐Ÿ‘ Acknowledgments

Inspiration, code snippets, etc.

(back to top)