I am currently working on a specification for a software component which will synchronize the product catalog of an ecommerce company with the Amazon Marketplace using Amazon MWS.
According to the MWS developer documentation, publishing products requires submitting up to 6 different feeds, which are processed asynchronously:
Product Feed: defines SKUs and contains descriptive data for the products
Inventory Feed: sets quantities/availability for each SKU
Price Feed: sets prices for SKUs
Image Feed: product images for each SKU
Relationship Feed: defines mappings between parent SKUs (e.g. a T-Shirt) and child SKUs (e.g. T-Shirt in a concrete size and color which is buyable)
Ovverride Feed:
My question concerns the following passage in the MWS documentation:
The Product feed is the first step in setting up your products on
Amazon. All subsequent catalog feeds are dependent upon the success of
this feed.
I am wondering what it means? There are at least two possibilities:
Do you have to wait until the Product feed is successfully processed before submitting subsequent feeds? This would mean that one had to request the processing state periodically until it is finished. This may take hours depending of the feed size and server load at Amazon. The process of synchronizing products would be more complex.
Can you send all the feeds immediately in one sequence and Amazon takes care that they are processed in a reasonable order? In this interpretation, the documentation would just tell the obvious, that the success of let's say image feed processing for a particular SKU depends on the success of inserting the SKU itself.
As I understand it for all other feeds other than the Product feed the products in question must already be on the catalogue, so your first possibility is the correct one.
However, this should only affect you on the very first run of the product feed or when you are adding a new product, as once the product is there you can then run the feeds in any order, unless you are using PurgeAndReplace of your entire catalogue each time which is not recommended.
The way I would plan it is this.
1) Run a Product Feed of the entire catalogue the very first time and wait for it to complete.
2) Run the other feeds in any order you like.
3) Changes to any of the products already on Amazon can now be done in any order. e.g you can run the price feed before the product feed if all you are doing is amending the description data etc
4) When you have to add a new product make sure you run the product feed first, then the other feeds.
If possible, I would create a separate process for adding new products. Also, I think it will help you if you only upload changes to products rather than the entire catalogue each time. It's a bit more work for you to determine what has changed but it will speed up the feed process and mean you're not always waiting for the product feed to complete.
Yes, Product Feed is the first primary feed.
You need to wait until product feed gets completed before sending out other feeds.
When You Send Product Feed, its status becomes:
1) _IN_PROGRESS_
2) SUBMITTED
3) DONE
4) COMPLETED
You must need to wait until status changes to " DONE " or "COMPLETED".
Thanks.
Related
I am doing the processDocument process using the expense parser as in the example here. Since the billing costs too much, instead of sending the documents one by one, i combine 10 documents into one pdf and use processDocument again. However, DocumentAI sees 10 separate receipts that we have combined as a single receipt, and instead of returning 10 different total_amount entities for each receipt, 1 total_amount returns.I want to combine 10 documents into one pdf and send it for less billing cost. In addition, i am looking for a way to think of each document independently from each other and extract its entities separately. Will batch processing work for me? What can I do for it? Can you help me please?
Unfortunately there is no way to make the billing cheaper because the pricing of Document AI is calculated on a per page/document basis. See Document AI pricing.
With regards to your question:
I am looking for a way to think of each document independently from
each other and extract its entities separately. Will batch processing
work for me?
Yes batch processing will work for you, but pricing is just the same with processDocument. See the pricing info I have attached above.
The only difference between batch processing and processDocument is that instead of sending a single request for a single document, batch processing will send all your documents in a single request. The response will then be stored in a GCS bucket that you have defined on the batch process options. See batch process sample code.
Another thing to add is batch processing process the documents asynchronously. This means that when the request is sent, the processing is done on the backend and you can poll the status of your request to see if it is still processing or it is done.
We wants to update the products attributes like quantity, price etc using the Selling Partner API.
We are referring following documents for the same.
https://github.com/amzn/selling-partner-api-docs/blob/main/guides/en-US/developer-guide/SellingPartnerApiDeveloperGuide.md#what-is-the-selling-partner-api
Which API we can use from the following list to update price and quantity
i.e from API list https://github.com/amzn/selling-partner-api-docs/tree/main/references
https://github.com/amzn/selling-partner-api-docs/tree/main/references
Selling Partner API for Pricing - In document Amazon have not mentioned about POST API
i.e to API to update price.
https://github.com/amzn/selling-partner-api-docs/blob/main/references/product-pricing-api/productPricingV0.md
Most likely you will have to use the feed api.
Create feed will require the proper type. If your intent is to only update price and quantities of existing listings, you can use the type POST_FLAT_FILE_PRICEANDQUANTITYONLY_UPDATE_DATA
The body of the request should be the equivalent of a manual price and quantity file submitted though amazon portal.
So it's like (please check yourself for more precise details):
sku | price | quantity
ITEM-SKU | itemprice | itemqty
with tabs in place of "|"
As i am just starting to develop this aspect (up to now i managed to implement order fulfillment tracking pushes and inventory download) this could very well be incorrect. Will update once i get deeper in the implementation of this
If you are totally new to the feed api take a look at https://developer-docs.amazon.com/sp-api/docs/feeds-api-v2021-06-30-reference
The process is not that straight forward but it works in the end.
Hope this helps you
Edit: i tested a simple upload that changed one item price and quantity ad it worked fine. The actual implementation is not hard as long as the prerequisite knowledge / details are clear:
general SP-api knowledg about token, roles, signing etc.
feed submission workflow - explained here: https://developer-docs.amazon.com/sp-api/docs/feeds-api-v2021-06-30-use-case-guide
We have use Order Feeds API for Amazon Order Processing API. We use _POST_FLAT_FILE_FUILFILLMENT_DATA feed type. But it gives the warning:
Order cannot be fulfilled. For more information please contact seller support.
The flat file that we created are given below: ordered, orderitemid, quantity, ship date, carriercode, carriername, tracking number and shipmethod. Ordered and shipmate (yyyyy-mm-dd and dispatch date is inserted) and other fields is blank.
Where we are making a mistake?
I've never used the flat file format to upload fulfillment data (I use the XML format), so my experiences may not apply to your case. But when I hit the "Order cannot be fulfilled" problem, it was a problem with the date format. The same seems to be true for this SO question: "Order cannot be fulfilled" error after updating order status in Amazon MWS
Using ForeignKey relationships, I want to be able to copy data and store it in another model. For example, think of how you would handle past Invoices and billed Services.
The Invoice would have one or more Services associated with it and with prices for the Services. This prices for a Service can / will change over time - but the Service price recorded with the Invoice should remain as it was when the Invoice was created.
My first thought was to create a pdf from the resulting data and store it. But this would make the data somewhat inaccessible.
Is there somehow a way to copy the data and keep them accessible?
This is a pretty broad problem with multiple solutions. I dont think that what you're aiming to is the correct one.
One rule for saving invoices is, that invoices never change. You should never update an invoice. So not only your 'copies' of invoices should remain the same, but the original too.
Also, you should have a InvoiceItem (or InvoiceRow) model which are the items on your invoice. Don't bind Products to a Invoice directly.
Here are 2 solutions I've used:
Solution 1
You can normalize the data on your invoice(items). So, don't use foreignkeys, but normalize all data about the product, so product info (incl. price) is saved within the invoice(item).
Solution 2
Give your products revision numbers. So everytime a product is updated (name or price change for example), a new product is created in the database. Now you can link the InvoiceItem to a Product with a Foreign Key, and it will will be historically accurate.
Im sure there are some guides/best practices for creating Invoice backends. Language or Framework is not important. Invoicing is really important, so do alot of research before starting to build something. That's just my two pennies
I'm getting started with Amazon MWS and I can't seem to see any real information on the correct flow for listing an item as an existing ASIN. Let's say for example I am selling a "Vulli Sophie the Giraffe Teether". I do an initial lookup using "listMatchingProducts" and find that my item already exists with the ASIN "B000IDSLOG". What is the next stage in the process?. All the documentation talks about the fact that the product feed is intended to match our SKU to the Amazon ASIN but i've not seen any definitive information to suggest how this actually works - especially in the scenario where you already know the ASIN you wish to use.
Ideally i'm interested in seeing the correct flow for each scenario (existing product for search found/not found) in terms of what API calls should be made in what order.
Thanks
The process of listing an item on Amazon is actually very similar for existing ASINs and new ones.
Listing items can consist of these steps:
Call SubmitFeed() to send a _POST_PRODUCT_DATA_ feed
is mandatory in all cases. You can omit product details if you're adding your listing to an existing item. If you list new products, this feed must be successfully processed before sending any other feed for those same item(s), I'm not sure if the same is true for existing products.
Call SubmitFeed() to send a _POST_PRODUCT_RELATIONSHIP_DATA_ feed
This step can be skipped for existing products or products without variants or other parent/child relations
Call SubmitFeed() to send a _POST_PRODUCT_IMAGE_DATA_ feed
This step can be skipped for existing products. Amazon is currently in the process of making images mandatory, so for new products or products currently not showing an image, you really should submit at least one image
Call SubmitFeed() to send a _POST_PRODUCT_PRICING_DATA_ feed
is mandatory in all cases
Call SubmitFeed() to send a _POST_INVENTORY_AVAILABILITY_DATA_ feed
is mandatory in all cases
Call SubmitFeed() to send a _POST_PRODUCT_OVERRIDES_DATA_ feed
is optional, and only used for items that have special shipping rates applied (e.g. expedited products)
More information on feeds is available on the Amazon Developer Documentation website and in Selling on Amazon: Guide to XML
It seems in the case of adding a product with an existing ASIN you can actually send a very basic XML request such as this, making sure to include the ASIN:
<AmazonEnvelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="amznenvelope.xsd">
<Header>
<DocumentVersion>1.01</DocumentVersion>
<MerchantIdentifier>MERCHANT_IDENTIFIER</MerchantIdentifier>
</Header>
<MessageType>Product</MessageType>
<PurgeAndReplace>false</PurgeAndReplace>
<Message>
<MessageID>1</MessageID>
<OperationType>Update</OperationType>
<Product>
<SKU>UNIQUE-TO-ME-1234</SKU>
<StandardProductID>
<Type>ASIN</Type>
<Value>B000A0S46M</Value>
</StandardProductID>
<Condition>
<ConditionType>New</ConditionType>
</Condition>
</Product>
</Message>
</AmazonEnvelope>
Essentially though, from what i've read elsewhere it seems that Amazon will attempt to match a product to an existing ASIN according to the data within the _POST_PRODUCT_DATA_ feed even if an ASIN isn't provided. It will use elements such as title, manufacturer, brand, and other product specific information to compare that to their catalog and determine if it is an existing item or a new one to be added. If you do know it already has an ASIN though you can provide a very simple XML feed as shown above.
You can simply use flat file template from amazon to load your feeds to marketplace with your seller account credentials using marketplace web service.
Use 'inventory loader' file type template that will override the existing items or create new if doesn't exists.
You can define 'ASIN-Hint' fields/column in file for the items those already exists over marketplace as your case is.
Idea behind is that amazon matches the provided ASIN value with feed with the already existed product detail and synch information accordingly.
Try uploading your product without ASIN-Hint and see process report you will get a good idea then.
You may also refer http://prashantpandeytech.blogspot.in/2015/03/mws-amazon-marketplace-web-service-api.html for step wise implementation