Skip to content

Repository files navigation

PYTHON-AMAZON-AD-API

CodeQLCodeQLCodeQLDocumentation StatusPyPI DownloadsDownloadsDownloads

Amazon's Advertising API

A python 3 wrapper to access Amazon's Advertising API with an easy-to-use interface.

Install

Badge

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.

paypal

alt text

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.

fromad_api.apiimportsponsored_productsmy_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

fromad_api.apiimportsponsored_products# Leave empty will use the 'default' accountresult=sponsored_products.CampaignsV3().list_campaigns()
# will use germany account dataresult=sponsored_products.CampaignsV3(account="germany").list_campaigns()

Search path for credentials.yml

  • macOS and Other Unix: ~/.config/python-ad-api
  • Windows: %APPDATA%\python-ad-api where the APPDATA environment variable falls back to %HOME%\AppData\Roaming if undefined

Confuse Help

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:

fromad_api.apiimportsponsored_productsfromad_api.baseimportMarketplaces# You can pass NA or US, CA, MX or BR for North America and JP, AU or SG for Far Eastresult=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:

fromad_api.apiimportsponsored_productsfromad_api.baseimportAdvertisingApiExceptioninfo= \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result=sponsored_products.CampaignsV3().list_campaigns(
body=info
)
logging.info(result)
exceptAdvertisingApiExceptionaserror:
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.

fromad_api.apiimportsponsored_productsfromad_api.baseimportAdvertisingApiExceptioninfo= \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
try:
result=sponsored_products.CampaignsV3(debug=True).list_campaigns(
body=info
)
logging.info(result)
exceptAdvertisingApiExceptionaserror:
logging.info(error)
importloggingfromad_api.apiimportProfilesfromad_api.baseimportAdvertisingApiExceptionlogging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s:%(levelname)s:%(message)s"
)
defregister_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)
exceptAdvertisingApiExceptionaserror:
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

Warning: [PLANNED DEPRECATION 1/3/2025] There is a new version 3 Portfolios API, please check the migration guide.

Warning: [PLANNED DEPRECATION 6/30/2023] There is a new version 3 of Sponsored Product API, please check the migration guide.

Simple Example Usage Campaigns with Credentials

importloggingfromad_api.baseimportAdvertisingApiExceptionfromad_api.apiimportsponsored_productslogging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s:%(levelname)s:%(message)s"
)
defsp_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.payloadreturnpayloadexceptAdvertisingApiExceptionaserror:
logging.error(error)
logging.error(error.code)
state_filter= \
{
"stateFilter":
{
"include": [
"ENABLED"
]
}
}
enabled_campaigns=sp_list_campaigns_v3(state_filter).get("campaigns")
forcampaigninenabled_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

License


Last release: v0.8.4 (via electroduende automated release random access memory)

About

Python Amazon Advertising API

Topics

Resources

Code of conduct

Contributing

Stars

198 stars

Watchers

8 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages