PYTHON-AMAZON-AD-API
Amazon's Advertising API
A python 3 wrapper to access Amazon's Advertising API with an easy-to-use interface.
Install
pip install python-amazon-ad-api
Donate
If you find this project is useful consider donating or sponsor it to keep on going on it, thank you.
Overview
You need obtain your own credentials with Amazon that may include an amazon developer account and access as seller or vendor. Please view the checklist of Amazon Ads API onboarding overview
Code Credentials
You can use your credentials as follows passing it to the client as a dict. Please review the full documentation to see all posibilities to include your credentials.
from ad_api.api import ads_api_v1
my_credentials = dict(
refresh_token='your-refresh_token',
client_id='your-client_id',
client_secret='your-client_secret',
profile_id='your-profile_id',
)
info = {
"adProductFilter":
{
"include": [
"SPONSORED_PRODUCTS"
]
},
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
result = ads_api_v1.Campaigns(credentials=my_credentials).query_campaigns(
body=info
)
YAML Credentials
Use a credentials.yml file with your credentials for more convenience and manage diferent accounts or profiles. Amazon requires one profile per marketplace so it is helpful to keep all in one file and switch directly from the code, using the account.
Create a file credentials.yml
version: '1.0'
default:
refresh_token: 'your-refresh-token'
client_id: 'your-client-id'
client_secret: 'your-client-secret'
profile_id: 'your-profile-id'
germany:
refresh_token: 'other-refresh-token'
client_id: 'other-client-id'
client_secret: 'other-client-secret'
profile_id: 'other-profile-id'
Python code
from ad_api.api import ads_api_v1
info = {
"adProductFilter":
{
"include": [
"SPONSORED_PRODUCTS"
]
}
}
# Leave empty will use the 'default' account
result=ads_api_v1.Campaigns().query_campaigns(body=info)
# will use germany account data
result=ads_api_v1.Campaigns(account="germany").query_campaigns(body=info)
Search path for credentials.yml
- macOS and Other Unix:
~/.config/python-ad-api - Windows:
%APPDATA%\python-ad-apiwhere the APPDATA environment variable falls back to%HOME%\AppData\Roamingif undefined
Marketplaces
Marketplaces are used to define basically the API endpoints Amazon need to use depending on the regions, by default it will use EU so if you are using one of the marketplaces that are under the Europe (EU). Covers UK, FR, IT, ES, DE, NL, AE, SE, PL, and TR marketplaces you can skip. If you are using either North America (NA) or Far East (FE), you will need import from base and pass the marketplace as follows:
from ad_api.api import ads_api_v1
from ad_api.base import Marketplaces
info = {
"adProductFilter":
{
"include": [
"SPONSORED_PRODUCTS"
]
}
}
# You can pass NA or US, CA, MX or BR for North America and JP, AU or SG for Far East
result=ads_api_v1.Campaigns(marketplace=Marketplaces.NA).query_campaigns(body=info)
Exceptions
You can use a try except statement when you call the API and catch exceptions if some problem ocurred:
from ad_api.api import ads_api_v1
from ad_api.base import AdvertisingApiException
info = {
"adProductFilter":
{
"include": [
"SPONSORED_PRODUCTS"
]
},
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result = ads_api_v1.Campaigns().query_campaigns(
body=info
)
logging.info(result)
except AdvertisingApiException as error:
logging.info(error)
Debug
Use debug=True if you want see some logs like the header you submit to the api endpoint, the method and path used among the params and the data submitted if any, to trace some possible errors. Note that the header includes the Authorization bearer token, so do not leave debug output in shared logs.
from ad_api.api import ads_api_v1
from ad_api.base import AdvertisingApiException
info = {
"adProductFilter":
{
"include": [
"SPONSORED_PRODUCTS"
]
},
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result = ads_api_v1.Campaigns(debug=True).query_campaigns(
body=info
)
logging.info(result)
except AdvertisingApiException as error:
logging.info(error)
Modules Available Common Resources
Amazon Attribution open beta
| Operation | Vendor contract | Vendor docs |
|---|---|---|
| Advertisers | contract | docs |
| Publishers | contract | docs |
| Macro tags | contract | docs |
| Non Macro tags | contract | docs |
| Reports | contract | docs |
Brand Metrics open beta
| Operation | Vendor contract | Vendor docs |
|---|---|---|
| Post Report | contract | docs |
| Get Report | contract | docs |
| Download Report | contract | docs |
Advertising Test Account
| Operation | Vendor contract | Vendor docs |
|---|---|---|
| Create test account | contract | docs |
| Get test account information | contract | docs |
Amazon Ads API v1 (new, unified)
The v1 API lives under
/adsApi/v1/and is not split by product: every call targets the same resource and the product is selected in the request body withadProductFilter. It supersedes the per-product v3 endpoints.
Modules Available Sponsored Products
The campaign, ad group and product ad operations are deprecated in favour of the v1 endpoints. In product targeting only the four CRUD operations are deprecated; its helper endpoints remain supported. Keywords, negative keywords and negative product targeting have no v1 equivalent yet and stay supported.
Modules Available Sponsored Brands 3.0
Campaigns and Ad Groups are deprecated in v3: Amazon answers
403 Endpoint has been deprecatedand points to the v4 API. Use the 4.0 section below for those two.
Modules Available Sponsored Brands 4.0
The 4.0 contract is fully covered: every operation is implemented except the campaign moderation route, which the service answers with a router
404, and the report download, which resolves through the shared_downloadhelper.
| Module | Vendor contract | Vendor docs |
|---|---|---|
| Campaigns | contract | docs |
| Ad Groups | contract | docs |
| Ads | contract | docs |
| Ad Creatives | contract | docs |
| Forecast | contract | docs |
| Recommendations | contract | docs |
| Budget Rules | contract | docs |
| Optimization Rules | contract | docs |
| Targeting Categories | contract | docs |
| Migration | contract | docs |
Most 4.0 routes take a versioned media type and the service routes on it. With
application/jsonthey answer404 Could not find resource, which reads like a missing route but is only the wrong media type. This affects forecasts, budget recommendations, optimization rules, migrations, insights, negative brand recommendations and the collection creatives.
Modules Available Sponsored Display
Amazon Ads API v1 - basic example
Both v1 and ads_api_v1 name the same namespace, so pick whichever reads
clearer: from ad_api.api import v1 is shorter, and ads_api_v1 makes it
obvious at the call site that the v1 API is being used.
from ad_api.api import v1
result = v1.Campaigns(credentials=credentials, debug=True).query_campaigns(
body={
"adProductFilter": {"include": ["SPONSORED_PRODUCTS"]},
"stateFilter": {"include": ["ENABLED"]},
"maxResults": 100,
}
)
campaigns = result.payload.get("campaigns")
next_token = result.payload.get("nextToken")
Simple Example Usage Campaigns with Credentials (v3, legacy)
This example uses
CampaignsV3.list_campaigns, which is deprecated. See the v1query_campaignsexample above.
import logging
from ad_api.base import AdvertisingApiException
from ad_api.api import sponsored_products
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s:%(levelname)s:%(message)s"
)
def sp_list_campaigns_v3(info: dict = None):
credentials = dict(
refresh_token='your-refresh_token',
client_id='your-client_id',
client_secret='your-client_secret',
profile_id='your-profile_id',
)
try:
result = sponsored_products.CampaignsV3(credentials=credentials, debug=True).list_campaigns(
body=info
)
payload = result.payload
return payload
except AdvertisingApiException as error:
logging.error(error)
logging.error(error.code)
state_filter = \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
enabled_campaigns = sp_list_campaigns_v3(state_filter).get("campaigns")
for campaign in enabled_campaigns:
logging.info(campaign)
logging.info(len(campaigns))
API NOTICE
This API is based on the API Client created by @saleweaver but adapted to amazon advertising authentication requeriments
DISCLAIMER
We are not affiliated with Amazon but they used our api :)
LICENSE
Last release: v1.6.0
Metadata
Release files for python-amazon-ad-api 1.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| python_amazon_ad_api-1.7.0.tar.gz | 135.5 kB | Without provenance | Details for python_amazon_ad_api-1.7.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| python_amazon_ad_api-1.7.0-py3-none-any.whl | Python 3 | none | any | Details for python_amazon_ad_api-1.7.0-py3-none-any.whl |
Total release size: 334.2 kB
Release files / python_amazon_ad_api-1.7.0.tar.gz
| Download URL | python_amazon_ad_api-1.7.0.tar.gz |
|---|---|
| Size | 135.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
af7d151300d404c32a72edbdb1979271d77f776bd33c3f69cd1ff3bfb7d90499
|
|
BLAKE2b-256 checksum How to use checksums |
1bba6238e7801f079785d88d102c090494882cf98cdf5210bc0a5930ecd6789a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Release files / python_amazon_ad_api-1.7.0-py3-none-any.whl
| Download URL | python_amazon_ad_api-1.7.0-py3-none-any.whl |
|---|---|
| Size | 198.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c73bde89ad8ce437a465fb929952681d70a62573b2036fd7806e3b1e67f629d1
|
|
BLAKE2b-256 checksum How to use checksums |
9845d8abd5c90f55fb4f8651e9c597057157006e29e0267560937734d9ed2209
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.25
|
Security for python-amazon-ad-api 1.7.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.