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 sponsored_products
my_credentials = dict(
refresh_token='your-refresh_token',
client_id='your-client_id',
client_secret='your-client_secret',
profile_id='your-profile_id',
)
info = \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
result = sponsored_products.CampaignsV3(credentials=my_credentials).list_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 sponsored_products
# Leave empty will use the 'default' account
result=sponsored_products.CampaignsV3().list_campaigns()
# will use germany account data
result=sponsored_products.CampaignsV3(account="germany").list_campaigns()
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 sponsored_products
from ad_api.base import Marketplaces
# You can pass NA or US, CA, MX or BR for North America and JP, AU or SG for Far East
result=sponsored_products.CampaignsV3(marketplace=Marketplaces.NA).list_campaigns()
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 sponsored_products
from ad_api.base import AdvertisingApiException
info = \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result = sponsored_products.CampaignsV3().list_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.
from ad_api.api import sponsored_products
from ad_api.base import AdvertisingApiException
info = \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result = sponsored_products.CampaignsV3(debug=True).list_campaigns(
body=info
)
logging.info(result)
except AdvertisingApiException as error:
logging.info(error)
import logging
from ad_api.api import Profiles
from ad_api.base import AdvertisingApiException
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s:%(levelname)s:%(message)s"
)
def register_assistant(value: str):
logging.info("-------------------------------------")
logging.info("Profiles > register_assistant(%s)" % value)
logging.info("-------------------------------------")
try:
result = Profiles(debug=True).register_assistant(
country_code=value
)
logging.info(result)
except AdvertisingApiException as error:
logging.info(error)
if __name__ == '__main__':
amz_country_code = "ES"
register_assistant(amz_country_code)
Or you could do with a curl command, note the {"countryCode":"ES"} that refers to the marketplace you will operate.
curl \
-X PUT \
-H "Content-Type:application/json" \
-H "Authorization: Bearer Your-Token \
-H "Amazon-Advertising-API-ClientId: your-client-id" \
--data '{"countryCode":"ES"}' \
https://advertising-api-test.amazon.com/v2/profiles/register
Modules Available Common Resources
Amazon Attribution open beta
Brand Metrics open beta
Advertising Test Account
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 with adProductFilter. It supersedes the per-product v2/v3 endpoints.
- Campaigns
- Ad Groups
- Ads
- Targets
- Ad Extensions
- Advertiser Accounts
- Ad Associations
- Brand Store Edition Publish Versions
- Brand Stores
- Brand Store Editions
Modules Available Sponsored Products
Warning: 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.
- ThemeBased Bid Recommendation
- Keyword Recommendations
- Keywords
- Negative Keywords
- Product Targeting
- Campaign Optimization
- Budget Rules
- Product Ads
- Negative Targeting Clauses
- Campaign Negative Targeting Clauses
- Budget recommendations and missed opportunities
- Budget Rules Recommendation
- Campaigns
- Ad Groups
- Consolidated Recommendations
- Campaign Negative Keywords
- Product Recommendations
- Budget Usage
- Reports
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.
- Campaigns (deprecated)
- Ad Groups (deprecated)
- Keywords
- Negative Keywords
- Keywords Recommendations
- Product Targeting
- Negative Product Targeting
- Targeting Recommendations
- Bid Recommendations
- Benchmarks
- Stores
- Landing Page Asins
- Media
- Brands
- Themes
- Reports
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.
- Campaigns
- Ad Groups
- Ads
- Ad Creatives
- Forecast
- Recommendations
- Budget Rules
- Optimization Rules
- Targeting Categories
- Migration
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
- Campaigns
- Ad Groups
- Reports
- Product Ads
- Targets
- Negative Targets
- Targets Recommendations
- Bid Recommendations
- Creatives
- Brand Safety List
- Budget Rules
- Campaigns Budget Usage
- Forecasts
- Recommendations
Amazon Ads API v1 - basic example
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)
Warning: this example uses CampaignsV3.list_campaigns, which is deprecated. See the v1 query_campaigns example 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: v0.9.7
Metadata
Release files for python-amazon-ad-api 1.4.5
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.4.5.tar.gz | 117.1 kB | Without provenance | Details for python_amazon_ad_api-1.4.5.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| python_amazon_ad_api-1.4.5-py3-none-any.whl | Python 3 | none | any | Details for python_amazon_ad_api-1.4.5-py3-none-any.whl |
Total release size: 297.3 kB
Release files / python_amazon_ad_api-1.4.5.tar.gz
| Download URL | python_amazon_ad_api-1.4.5.tar.gz |
|---|---|
| Size | 117.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d7c64083e1a635264ca18a5e7efb43ce9f82729d87cddb8be7eb716980f2216c
|
|
BLAKE2b-256 checksum How to use checksums |
fa88a2a78755c259ead7c2bc8155d83060ca95dd078fb3b0303bc87e93bef8dd
|
| 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.4.5-py3-none-any.whl
| Download URL | python_amazon_ad_api-1.4.5-py3-none-any.whl |
|---|---|
| Size | 180.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7f0bb7e212c11afa18060f6ea2316bf0339dac8c3469b4582a7011091977afd8
|
|
BLAKE2b-256 checksum How to use checksums |
6b7e450169770edf913abb873822610ac0f1084a2d01b9f168875c26cd52ca01
|
| 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.4.5
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.