Demac Media Demac Media Brand Demac Media Brand



Keeping Your Amazon Prices Competitive Using C#

Timer Icon 5 Mins

Magento Tutorials

Amazon is probably the most competitive marketplace out there right now. The front end is geared towards always offering the customer the best price available, across all vendors and for one particular product. If you don’t keep your prices competitive, you’ll quickly fall to wayside. One way many competitors keep competitive is to do it programmatically. Completely void of any actual effort once the system is set up. Sellers can keep their prices constantly competitive against the other competition as well as any new competition. Today I’ll show you the tools you’ll need to set up your own system.

Ensure you have all the necessary information first!

First off your inventory, there is some key information you’ll need for each SKU you’ll want to perform these updates on.

Yes, unfortunately you do need both ASIN and SKU.

Related: How Information Hooks into Magento

Pass in your list of ASINs to retrieve Amazons current pricing situation for each product

After logging into your Amazon MWS account, the first thing you need to do is populate a list with all the ASINs you’ll want to compare and update.

You’ll have to use Amazons ASINListType object to populate:

var asinList = new ASINListType { ASIN = new List<string>() };

Obviously replace new List() with your list of ASINS.
Next let’s retreive all that information:

var request = new GetCompetitivePricingForASINRequest();
request.ASINList = asinList;
request.MarketplaceId = AmazonMarketplaceId;
request.SellerId = AmazonMerchantId;
var response = mwsService.GetCompetitivePricingForASIN(request);

Now you’ve got a list of all the competitors pricing for your products!

There is a lot of neat info Amazon returns to you for each sku.
What you’ll want to do next is loop through each element in the response by doing the following

foreach (var pricing in response.GetCompetitivePricingForASINResult)


Each element in this loop is one ASIN you passed in..

To start looping through each competitive price in relation to this ASIN you will loop by…

foreach(var eachPriceForThisASIN in  pricing.Product.CompetitivePricing.CompetitivePrices.CompetitivePrice)

asinCompetitivePriceList is a list of “CompetitivePriceType” and each element is each ASIN you passed in.

The current lowest price on Amazon is..


The lowest price is always the first price returned in my tests, I still do loop through each element regardless and definitely recommend you do the same, especially since our business logic could be very different.

before doing any fancy footwork though you should always check


If this is true, it means you’re currently the holder of the cheapest Amazon price!

Logic from here on really depends on your own business logic at this point.
For example, your seller may sell used products, you don’t want to compare your used price to a new one. To check the condition of the current price

var condition = eachPriceForThisASIN.condition;

The values I’ve seen for this property are “new” and “used”.

The total cost of the current competitive price (item price + shipping price) is..

var shipCost = eachPriceForThisASIN.Price.LandedPrice.Amount;

Add to Amazons “Price” Collection

Once you’ve finalized the numbers for your pricing update, add it to a “Price” collection.

var newPrices = new List<Price>();
newprices.Add(new Price { SKU = sku, StandardPrice = new OverrideCurrencyAmount { Value = currentLowestCompetitivePrice } });

*NOTE: “SKU” is your Seller SKU on Amazon, it is NOT the ASIN you passed in to retrieve your list. This is a really big gotcha, and it’s really important to remember this.

This should be all the info you’ll need to identify what your competitors prices are and what needs to be done to ensure you have the lowest price point on Amazon. It’s easy to poke around for all the additional info Amazon delivers if this is insufficient.

Lastly, it’s time to send those update feeds!

If you follow along on my article about updating Products through Amazon, we can seemlessly use the same logic to update prices.

Convert Price Objects for Generic Upload

First, convert all those “Price” objects into.. well.. objects.

            var masterPricesList = new List<List<object>>();
            var newPriceList = new List<object>();
            foreach (var amazonPriceUpdate in newPrices)
                if (newPriceList.Count == 1000)
                    newPriceList = new List<object>();
            if (newPriceList.Count > 0) masterPricesList.Add(newPriceList);

This looks a little “inceptiony”, have a List of Lists, this is in case you have a massive amount of updates and need to push more than one feed to Amazon. I’m still unsure if 1000 updates are even possible, based on everything I’ve done so far my feeds haven’t been rejected but I haven’t had the opportunity to do a massive push either, so watch out for this.

After this it’s just calling:

var submissionIds = SendAmazonFeeds(masterPricesList, AmazonEnvelopeMessageType.Price, AmazonFeedType._POST_PRODUCT_PRICING_DATA_);

You can see the generic “SendAmazonFeeds” method in my Amazon Product Updates blogpost here!

This is a bare bones article, devoid of logic necessary, but that’s only because every vendor will require different logic. Outlining the objects required, and how to use them is very necessary, and poorly documented. I hope this will be a great help in getting your Amazon Price syncs up and running (and competitive)!

Subscribe to the Blog

Stay updated with 20,000+ eCommerce leaders in our community

Sign Up

Let’s talk about your 10X return

Icon/Social/Phone Contact us for pricing information