How to run sale promotions on Amazon using Python
This is a no bullshit, to the point guide on how to run sale promotions on Amazon through the Selling Partner API (SP API) in Python.
Step 1 » Get the necessary credentials
To communicate with the SP API, you need a client_id
, a client_secret
, a refresh_token
and the seller_id
.
- Login to sellercentral, open the menu using the three lines in the top left, locate the option Apps and Services, then select Develop Apps in the submenu.
- If not done already, set up a developer profile in this page. If not requesting restricted roles, which is not necessary for our purposes, you can enter "internal tests" in all free text fields in the Use Cases and Security Controls sections. Your registration should be approved within a few minutes.
- Going back to the page opened in step 1, click + Add new app client, enter an appropriate name and select
SP API
as the API type. I have selected the Pricing, Inventory and Order Tracking and Product Listing roles, but probably not all of them are required. I selected No to the question regarding the delegation of access to PII, but you might want to select Yes, depending on your circumstances. - You can now click View in the LWA credentials column to display the
client_id
andclient_secret
. - Next, click the down arrow next to Edit App and select Authorise. You'll see your
refresh_token
. - Your
seller_id
can be found on this page. Here, it is referenced as Your customer ID.
Step 2 » Discount your products
I will give you the bare bones, minimum working example to discount a single product. I trust you can update the script to fit your needs. The example is for Amazon Germany 🇩🇪, but you can easily adjust the marketplace. I'm using the python-amazon-sp-api
package, which is a wrapper for the previously mentioned Selling Partner API (SP API).
from sp_api.api.listings_items.listings_items import ListingsItems
from sp_api.base.marketplaces import Marketplaces
# don't hard code confidential data
refresh_token = "<refresh_token>"
client_id = "<client_id>"
client_secret = "<client_secret>"
seller_id = "<seller_id>"
amazon_sku = "<amazon_sku>"
sale_price = 14.99
currency = "EUR"
sale_start = "2024-04-11T13:52:00Z"
sale_end = "2024-04-25T23:00:00Z"
client = ListingsItems(
marketplace=Marketplaces.DE,
credentials={
"refresh_token": refresh_token,
"lwa_app_id": client_id,
"lwa_client_secret": client_secret
}
)
response = client.patch_listings_item(
sellerId=seller_id,
sku=amazon_sku,
marketplaceIds=f"{Marketplaces.DE.marketplace_id}",
body={
"productType": "PRODUCT",
"patches": [
{
"op": "replace",
"path": "/attributes/purchasable_offer",
"value": [
{
"marketplace_id": Marketplaces.DE.marketplace_id,
"currency": currency,
"discounted_price": [
{
"schedule": [
{
"start_at": sale_start,
"end_at": sale_end,
"value_with_tax": sale_price
}
]
}
]
}
]
}
]
}
)
assert response.payload["status"] == "ACCEPTED"
Hopefully this helps someone!
Chris