GPSR-related images upload in bulk (Amazon)
This article is about a specific case for a customer: Include GPSR-related images in product upload files - Nov. & Dec. 2024
Context
- This needs to be done for 8 EU Amazon marketplaces: Amz.be, Amz.de, Amz.es, Amz.fr, Amz.it, Amz.nl, Amz.pl, Amz.se
- With about 10.000 to 40.000 products per marketplace → 200.000 products in total
- In 7 specific languages for the various marketplaces: Dutch, French, German, Italian, Polish, Spanish, Swedish → About 29.000 products per language
- This company makes use of pan-European FBA with a French warehouse: For FBA products, French is the primary language
- Building International Listings is active: There is an overlap in the impact of various templates.
What I learned from the various actions discussed below in this article:
Template
As of December 2024, these seem the best template for me for updating existing product information:
- It works for all Amazon market places - Independent of language
- This probably works for updating any static field. So far, I've only used it for updating field
other_image_url_ps01
(product package photos, related to GPSR) - The template contains two template ID fields, which is really the minimum number: When the second field is ommitted, the file is initially accepted, but afterwards, nothing will be updated
- When adding the subsequent ID field, nothing extra is gained. When adding one more field, you get a nice preview after uploading, but that code isn't portable amongst market places, hence not worthwhile
- The template ID field in cell
A1
indicates that this file is of the type Inventory Files for Specific Categories - The template ID field in cell
B1
is just a timestamp - Use as a text file with
tab
as field delimiter, ISO 8859-01 for character encoding and without the need to envelop values within characters like'
or"
- Field
item_sku
is used to identify the product - Field
update_delete
is usually needed, but when updating only one field, it might actually be omitted - In the example below, only one field is updated:
other_image_url_ps01
- Note that the second and third row are identical: Originally, the second row contains field names (or descriptions) in a local language and the third row, the field labels in English as done here. The second row can be English, but it cannot be deleted. Hence these strange 'double row'
With 3 columns
Just the header:
TemplateType=fptcustom Version=2024.1206 item_sku update_delete other_image_url_ps01 item_sku update_delete other_image_url_ps01
Including a sample product row:
TemplateType=fptcustom Version=2024.1206 item_sku update_delete other_image_url_ps01 item_sku update_delete other_image_url_ps01 my_sku_007 PartialUpdate https://media.example.nl/gpsr/it/my_sku_007.jpg
With 2 columns
This seems to work, but I may need to check a bit more to make really sure that nothing gets removed - I used this for the last two uploads on Amz.nl on 2024.12.09:
TemplateType=fptcustom Version=2024.1206 item_sku other_image_url_ps01 item_sku other_image_url_ps01
Unblock Amazon
Make sure that Amazon isn't blocked from fetching these images. Changes are, that Amazon doesn't fetch images from always the same IP address. So, when a remarkable low number of images get fetched, maybe check these:
- Apache VHDF files (
/etc/apache2/sites-available/
) - Firewall rules, including those from Fail2Ban:
sudo iptables -L -v -n
- Check Apache access log:
sudo cat /var/log/apache2/access.log | grep amazon
Other
When inserting SKUs in the template file (opened in Calc), make sure that the SKU column is of the type text. Otherwise, SKUs like 01234 get changed to 1234 which will render it useless
Procedure
Here's an impression of how I do the whlole procedure. All files are in just one directory (and usually a subdirectory for the generated images).
Get a list of SKUs
We first need a list of all SKUs that need to be updated:
- Go to
Reports » Inventory reports » Download a report
to download a report that contains all SKUs (fielditem_sku
). While writing this article, I use the Category Listings Report that was requested a couple of days ago. After copying the SKUs, we don't need this file (or files, when there are more than 10,000 products) anymore - Copy all SKUs to a separate text file. I call these usually
skus-xx-all.txt
withxx
the country code of the Amazon marketplace.
I usually also need a test file with just five SKUs. I usually call this file skus-xx-test.txt
Create images
- Use script
amz_gpsr_create_package_photos.sh
for creating images - Copy the image template to the working directory
- For testing: Use the test-sku-file mentioned above + check the results and maybe adjust placing of sku on the template
- Everything configured? Start the script with
sku-all-xx.txt
and come back in about 15 minutes (for 30,000 images on my not-so-new laptop).
Create upload files
- See the upload files mentioned elsewhere at the beginning of this article - Open in Calc
- Copy SKUs into these files (max 10,000 rows per file, including header rows)
- Include
FBA
FBA was relatively easy to do, somehow. Maybe because of BIL and/or pan-European warehousing.
Amz.de - Downloaded Category Listing Report
Download
- Of the various reports at
Reports » Inventory reports
, the Category Listings Report (All) is the only report that contains image-related fields + current product data - The download is a zip file containing files file0.xlsm... file3.xlsm
- TemplateType (value A1): fptcustom.
Edit
- Kept the first five rows
- Added a value for field
other_image_url_ps01
.
Upload
- File was recognised as Multi-Marketplace Listing Template
- 0 out of 0 recognised lines, were succesfully processed
- I tried this several times, but none were succesfull.
Amz.de - Using upload spreasheet
Choose the right template!
Choosing the correct template at Catalogue » Add products via Upload » Download spreadshet » Choose a template to get started
, seemed to be the bottleneck:
Edit
- In the beta-version of this file, for the first 5 products, I added links to the GPSR-product-package-photo
- In the non-beta version of this file, for the next 5 products, I added similar links.
Results
Errors beta-file
- The French GPSR-related product package photos were not found - That's mentioned here, confusingly
- In one case, the German GPSR-relate product package photo wasn't found
Ideas about addressing these issues:
- In a browser, these links just worked. Maybe I need to escape stuff, like spaces with
%20
- I think I read that somewhere - Maybe do this also for the French 'original' uploads. Also: Maybe not everything was uploaded in time
Conclusions & recommendations
- Only use the non-beta file: Instant feedback + less issues + might work with plain text (see next chapter)
- When using the non-beta template, spaces probably don't need to be escaped
- Use the 'non-beta template discussed here
- Along the way, figure out what can be deleted. Maybe: Check if a
.tsv
works - Paste SKUs always as text: There are skus like
010102
and when pasted as number, the leading0
gets lost.
Columns that seem always needed:
feed_product_type
item_sku
- This is the only field used as SKUbrandname
- Maybe can be ommitted?update_delete
- Surely needed
Amz.de - Text file
File creation
- I used the non-beta template file mentioned before
- Included the next five SKUs
- Copy pasted all contents to a new empty Calc file
- Exported as text file with these settings:
tab
as separator- Latin 1 (ISO 8859-1 or -11?)
Upload
- Again: the non-beta version of this file, has a nice preview at uploading, which the beta version of the file, doesn't
- File was identified as Inventory Files for Specific Categories - Good!
Results
Amz.de - All products
- Enough testing - Let's get to business
- Done.
Amz.de - Without last id field
There is always more to hack...
Changes
These were the four 'id fields', in cells A1 do D1:
- A1:
TemplateType=fptcustom
- B1:
Version=2024.1206
- C1:
TemplateSignature=VE9PTFM=
- D1: (with added linebreaks):
settings=attributeRow=3& contentLanguageTag=de_DE& dataRow=4& feedType=113& headerLanguageTag=de_DE& isEdit=false& isProcessingSummary=false& labelRow=2& metadataVersion=MatprodVkxBUHJvZC0xMTQ0& primaryMarketplaceId=amzn1.mp.o.A1PA6795UKMFR9& ptds=VE9PTFM%3D& reportProvenance=false& templateIdentifier=cc890ed3-67bf-46d2-b6c9-2f9624001963& timestamp=2024-12-06T13%3A01%3A07.383Z
Would be nice if I can remove that last cell + replace the second (German) row with English, as it would make the template usable for all sites...