๐งพ Table of Contents
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
- 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.
Install:
pip install pydoge-api
Upgrade:
pip install --upgrade pydoge-api
Documentation
Full developer docs with API reference, usage, and model schema:
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")
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")
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")
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")
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()
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!
Inspiration, code snippets, etc.