amazon-orders is an unofficial library that provides a Python API (and CLI) for Amazon order history, line items, and transactions.
Note: This package works by parsing data from Amazon's consumer-facing website. A periodic build validates functionality to ensure its stability, but as Amazon provides no official API to use, older versions of this package may break at any time, so it's recommended that you use the latest version.
amazon-orders is available on PyPI and can be installed and/or upgraded using pip:
pip install amazon-orders --upgradeThat's it! amazon-orders is now available as a package to your Python projects and from the command line.
If pinning, be sure to use a wildcard for the minor version (e.g. ==4.8.*, not ==4.8.0) to
ensure you always get the latest stable release.
You'll use AmazonSession to
authenticate your Amazon account, then AmazonOrders,
AmazonTransactions,
and AmazonGiftCards
to interact with account data. get_order_history
and get_order are good places to start.
from amazonorders.session import AmazonSession
from amazonorders.orders import AmazonOrders
amazon_session = AmazonSession("<AMAZON_EMAIL>",
"<AMAZON_PASSWORD>")
amazon_session.login()
amazon_orders = AmazonOrders(amazon_session)
# Get orders from a specific year
orders = amazon_orders.get_order_history(year=2023)
# Or use time filters for recent orders
orders = amazon_orders.get_order_history(time_filter="last30") # Last 30 days
orders = amazon_orders.get_order_history(time_filter="months-3") # Past 3 months
for order in orders:
print(f"{order.order_number} - {order.grand_total}")If the fields you're looking for aren't populated with the above, set full_details=True (or pass --full-details to
the history CLI command), since by default it is False (enabling it slows down querying, since an additional
request for each order is necessary). Have a look at the Order entity's docs to see what fields are only
populated with full details.
You can also run any command available to the main Python interface from the command line:
amazon-orders login
amazon-orders history --year 2023
amazon-orders history --last-30-days
amazon-orders history --last-3-monthsThe history, order, transactions, order-transactions, and gift-card-activity commands accept
--output, which renders Orders, Transactions, and Gift Card activity as text (the default), json,
yaml, or csv. Progress messages are written to stderr, so redirecting stdout captures only the data.
amazon-orders history --year 2023 --output json > orders.json
amazon-orders history --last-30-days --output csv > orders.csvTo serialize from Python instead, every entity has to_dict(),
which converts it and its nested entities to a dict of primitives.
import json
from amazonorders.orders import AmazonOrders
amazon_orders = AmazonOrders(amazon_session)
orders = amazon_orders.get_order_history(year=2023)
# [{"order_number": "112-9685975-5907428", "grand_total": 35.98, ...}]
print(json.dumps([order.to_dict() for order in orders], indent=2))See OutputFormatter for each format's contract, and to override how
entities are rendered.
The most secure way to use amazon-orders is to sign in on Amazon's own page, in a browser window, so amazon-orders
never needs to store your credentials:
amazon-orders login --browserThe session is persisted, so neither the CLI nor the Python API needs credentials:
from amazonorders.session import AmazonSession
amazon_session = AmazonSession()
amazon_session.login()This requires a display and the browser extra (see Browser Automation to install it).
Authentication can be automated by (in order of precedence) storing credentials in environment variables, passing them
to AmazonSession, or storing them
in AmazonOrdersConfig. The
environment variables amazon-orders looks for are:
AMAZON_USERNAMEAMAZON_PASSWORDAMAZON_OTP_SECRET_KEY(seeotp_secret_key)
amazon-orders core supports the English .com site.
- Other English sites (e.g.
amazon.ca,amazon.co.uk): set thedomainconfig option. - Other languages: install a language package and set
language_package. See Language Packages.
For more advanced usage, amazon-orders's official documentation is available
at Read the Docs, including
handling login challenges (AWS WAF and JavaScript
checks, with optional extras) and troubleshooting.
If you would like to get involved, be sure to review the Contribution Guide.
Want to contribute financially? If you've found amazon-orders
useful, sponsorship would
also be greatly appreciated!
