To get Amazon Italy product data, call the SellerMagnet API with marketplaceId=APJ6JRA9NG5V4: requests go to amazon.it and prices come back in EUR. amazon.it is one of the 11 stores where price history, sales estimates and the EAN converter answer with data, so one statistics call shows the Buy Box price, who holds it and whether Amazon itself (seller A11IL2PNWYJU7H) held it in the last 30 days. Titles, bullets and category names come back in Italian.
Key Takeaways
- amazon.it is marketplace APJ6JRA9NG5V4, priced in EUR; lookup, offers and search ask amazon.it for postcode 00184 (Rome), best effort.
- Every endpoint answers on amazon.it, statistics, estimated sales and the ASIN converter included; stores such as amazon.nl or amazon.se get a free 400 on those three.
- Amazon sells first-party on amazon.it as A11IL2PNWYJU7H: statistics uses that ID for the holder history, amazonPrice and shareBuyBox, offers show sellerId "Amazon" with it in amazonSellerId.
- With free delivery, the same Buy Box reads 24.99 on lookup and offers but 2499 (euro cents) on statistics; a bestseller card shows the page price, not the Buy Box.
- Bestsellers take Italian category names: "Moke e caffettiere" works, while "Friggitrici" (two categories) and the English "coffee grinder" get a free 400.
Amazon Italy product API at a glance
Requests look the same as on any other store: GET, query parameters, the key in the X-Api-Key header. What changes are the values below. Lookup, offers and search ask amazon.it for postcode 00184, in Rome (best effort; offers and search take another one in geo_location), and on an EU store the price a buyer pays includes VAT. amazon.it prints prices with Italian separators (1.299,99 €), but the API returns plain numbers such as 1299.99. Amazon's own product APIs depend on your account: the Selling Partner API's Catalog Items API is for sellers, and the Creators API, where Amazon sends Product Advertising API users, needs Associates enrollment for amazon.it and at least 10 qualifying sales in the past 30 days. This API needs only an API key.
| Item | amazon.it |
|---|---|
| Marketplace ID | APJ6JRA9NG5V4 |
| Store | amazon.it |
| Currency | EUR, currencySymbol "€" (Euro) |
| Default postcode | asks amazon.it for 00184 (Rome), best effort |
| Amazon's own seller ID | A11IL2PNWYJU7H |
| History endpoints | answer: statistics, estimated sales, ASIN converter |
| listedSinceDate (lookup) | read from the row "Disponibile su Amazon.it a partire dal" |
| Page language | Italian: titles, bullets and category names |
| Bestseller category tree | amazon.it's own: 44 top-level, about 24,000 categories |
The amazon.it entry of /amazon-get-marketplaces (data is keyed by marketplace ID)
{
"APJ6JRA9NG5V4": {
"currency_code": "EUR",
"currency_name": "Euro",
"currency_symbol": "€",
"geo_location": "00184",
"marketplace_domain": "amazon.it",
"marketplace_name": "Amazon IT"
}
}
Does amazon.it have price history in the API?
Yes. Lookup, offers, search, bestsellers, deals and seller feedback only check that the marketplace ID is valid and answer on all 23 stores. The three history endpoints cover 11 marketplaces, and amazon.it is one of them, next to amazon.de, amazon.fr, amazon.es and amazon.co.uk. Stores such as amazon.nl, amazon.se, amazon.com.be or amazon.pl get a free 400 "This endpoint is not available for the requested marketplace" there instead. On amazon.it each history call costs 1 credit and returns data: the Buy Box price and its history, the holder history with Amazon's own seller ID, a monthly sales estimate, and the ASIN behind a barcode.

How do amazon.it prices come back?
In several shapes, depending on the endpoint. Lookup reports the featured item price without shipping, offers adds shipping and does not round the Buy Box total, and statistics counts in euro cents. A product that sells for 24,99 € with free delivery therefore reads 24.99, 24.99 and 2499. Mixing them without converting turns a stable price into a 100x jump. A bestseller card is a fourth source: it carries the price printed on the bestseller page (for a product with variations, the low end of the range), so it is not the Buy Box of every variation.
| Endpoint | Field | Unit | Example |
|---|---|---|---|
| /amazon-product-lookup | productInfo.buyBoxInfo.price | decimal euros, item only | 24.99 or "N/A" |
| /amazon-product-offers | buyBox.totalPrice | decimal euros, incl. shipping | 24.99 (round it) |
| /amazon-product-statistics | buyBoxPrice | integer euro cents, incl. shipping | 2499 or "N/A" |
| /amazon-product-statistics | amazonPrice | integer euro cents, Amazon's own offer | 2499 or null |
| /amazon-search | listingPrice.price.total | string, two decimals | "24.99" |
| /amazon-bestsellers | bestsellers[].price.price | decimal euros, bestseller page price | 24.99 or missing |
Which amazon.it bestsellers does Amazon sell itself?
Before you source a product for amazon.it, it helps to know whether you would compete with Amazon itself on that listing. The script below reads the top 10 of a bestseller category by its Italian name, then makes one statistics call per ASIN: the current Buy Box holder from the holder history, whether Amazon held the Buy Box in the last 30 days (shareBuyBox), the Buy Box price and Amazon's own offer price, both in euro cents. It skips cards without an ASIN, checks a repeated ASIN once, reports a billed 404 per row, stops on a 401, a 403 or a store without history, and stops after three failed ASINs in a row. It uses sellermagnet.py (ApiError, new_session) and retry.py (get_with_retry) from the Python quickstart.
italy_bestseller_check.py: Buy Box holder, Amazon's presence and prices for the top 10 of an amazon.it bestseller category
"""Which amazon.it bestsellers does Amazon sell itself, and who holds the Buy Box now?
amazon.it is marketplace APJ6JRA9NG5V4 (EUR) and one of the 11 stores with price history, so one statistics call
per ASIN returns the Buy Box price, the holder history and whether Amazon (seller A11IL2PNWYJU7H) held it.
"""
import sys
import requests
from retry import get_with_retry
from sellermagnet import ApiError, new_session
MARKETPLACE = "APJ6JRA9NG5V4" # amazon.it
AMAZON_IT = "A11IL2PNWYJU7H" # Amazon's own seller ID on amazon.it (statistics names Amazon by this ID)
CATEGORY = "Moke e caffettiere" # a category name as amazon.it shows it, in Italian
COUNT = 10 # top 10 of the bestseller page (max 50)
MAX_FAILED_IN_A_ROW = 3 # an outage should not burn a credit (or four) on every remaining ASIN
def eur(cents):
"""Integer euro cents -> Italian notation: 2499 -> '24,99 €', 104900 -> '1.049,00 €'."""
if not isinstance(cents, int): # "N/A" (nobody holds the Buy Box) or None (Amazon has no live offer)
return "-"
return f"{cents / 100:,.2f}".replace(",", " ").replace(".", ",").replace(" ", ".") + " €"
def card_eur(card):
"""The bestseller card shows the page price (a variation range shows its low end), in decimal euros."""
price = (card.get("price") or {}).get("price")
return eur(round(price * 100)) if isinstance(price, (int, float)) and price > 0 else "-"
def holder_now(stats):
"""Last entry of the Buy Box holder history: "-1" = nobody qualified, "-2" = a brand-new seller."""
history = stats.get("buyBoxSellerIdHistory") or []
if not history:
return "?"
seller = history[-1][1]
return {AMAZON_IT: "Amazon", "-1": "none", "-2": "new seller"}.get(seller, seller)
def amazon_30d(stats):
"""shareBuyBox True means Amazon did NOT hold the Buy Box in the last 30 days; None = history unreadable."""
share = stats.get("shareBuyBox")
return "?" if share is None else ("no" if share else "yes")
def statistics(session, asin):
"""(stats, None) on success, (None, note) for a per-row failure; exits when no later call can succeed."""
try:
return get_with_retry(session, "amazon-product-statistics", marketplaceId=MARKETPLACE, asin=asin), None
except ApiError as err:
if err.status in (401, 403) or "not available for the requested marketplace" in str(err):
sys.exit(f"stopped: {err}") # bad key, no credits, or a store without history: all calls fail
return None, ("404 no history (billed)" if err.status == 404 else f"error {err.status}")
except (requests.ConnectionError, requests.Timeout) as err:
return None, f"error {type(err).__name__}"
def main():
session = new_session()
try:
page = get_with_retry(session, "amazon-bestsellers", marketplaceId=MARKETPLACE, category_id=CATEGORY,
count=COUNT)
except ApiError as err: # an ambiguous or unknown category name is a free 400 that says why
sys.exit(f"bestsellers for {CATEGORY!r} failed: {err}")
print(f"{CATEGORY} on amazon.it = category {page['categoryId']}, {len(page['bestsellers'])} cards")
print(f"{'#':>2} {'asin':<10} {'holder now':<13} {'amz30d':<6} {'Buy Box':>9} {'Amazon':>9} {'card':>9}")
seen, checked, amazon_sells, amazon_held, failed_in_a_row = {}, 0, 0, 0, 0
for card in page["bestsellers"]:
rank, asin = card.get("rank", "?"), card.get("asin")
if not asin: # rank and asin are only set when the page shows them
print(f"{rank:>2} card without an ASIN, skipped (no call)")
continue
if asin in seen: # two cards for one ASIN: pay for its statistics once
print(f"{rank:>2} {asin:<10} same ASIN as #{seen[asin]}, not checked again")
continue
seen[asin] = rank
stats, note = statistics(session, asin)
if stats is None:
print(f"{rank:>2} {asin:<10} {note}")
failed_in_a_row = 0 if note.startswith("404") else failed_in_a_row + 1 # a 404 is an answer
if failed_in_a_row >= MAX_FAILED_IN_A_ROW:
sys.exit(f"stopped after {failed_in_a_row} failed ASINs in a row")
continue
failed_in_a_row = 0
checked += 1
amazon_sells += isinstance(stats.get("amazonPrice"), int)
amazon_held += stats.get("shareBuyBox") is False
print(f"{rank:>2} {asin:<10} {holder_now(stats):<13} {amazon_30d(stats):<6} "
f"{eur(stats.get('buyBoxPrice')):>9} {eur(stats.get('amazonPrice')):>9} {card_eur(card):>9}")
print(f"\n{checked} of {len(seen)} ASINs checked: Amazon has its own offer on {amazon_sells}, "
f"held the Buy Box in the last 30 days on {amazon_held}")
if __name__ == "__main__":
main()
Output (illustrative data: two retried 502s, a refunded 500, a billed 404, a duplicate ASIN and a card without an ASIN)
Moke e caffettiere on amazon.it = category 652465031, 10 cards
# asin holder now amz30d Buy Box Amazon card
1 B0ITMOKA01 Amazon yes 29,90 € 29,90 € 29,90 €
2 B0ITMOKA02 A1EXAMPLEIT01 yes 26,49 € 27,99 € 24,99 €
? card without an ASIN, skipped (no call)
4 B0ITMOKA04 A1EXAMPLEIT02 no 45,00 € - 45,00 €
5 B0ITMOKA05 404 no history (billed)
6 B0ITMOKA02 same ASIN as #2, not checked again
7 B0ITMOKA07 none no - - -
8 B0ITMOKA08 new seller no - 21,90 € 19,90 €
9 B0ITMOKA09 ? ? - - 34,90 €
10 B0ITMOKA10 Amazon yes 22,50 € 22,50 € 22,50 €
7 of 8 ASINs checked: Amazon has its own offer on 4, held the Buy Box in the last 30 days on 3
- holder now is the last entry of the holder history: Amazon when it is A11IL2PNWYJU7H, none for "-1" (no seller qualified), new seller for "-2" (a brand-new seller), otherwise the seller ID. ? means the history could not be read, not "no". With none, new seller or ? the API returns
buyBoxPrice"N/A", shown as-(rows 7 to 9). - amz30d yes comes from
shareBuyBoxfalse: Amazon held the Buy Box at some point in the last 30 days. Row 2 shows why both columns matter: Amazon held it earlier in the window, a third-party seller holds it now. - Amazon is
amazonPrice, Amazon's own live new offer including shipping, or-when Amazon has none. Row 8 has an Amazon offer at 21,90 € that is not in the Buy Box. - card is the price on the bestseller page. On row 2 it is lower than the Buy Box, so price a product from statistics, not from the card.
- 404 on row 5 is billed and means no recorded history for that ASIN, not that Amazon is absent; the script reports it and moves on.

Credits for one bestseller check on amazon.it
1 credit per request, the same as on every store. The script spends 1 credit on the bestseller page and 1 per unique ASIN; a card without an ASIN or a repeated ASIN costs nothing. Retries add up: a 502 or 503 is charged on every attempt (get_with_retry makes up to 4), a 500 without Retry-After is refunded and retried once, and a 429 is free. The example run made 12 requests: the bestseller page, 8 unique ASINs, 2 retried 502s before row 4 succeeded and 1 refunded 500 before row 8 succeeded, so 11 credits for 8 ASINs. A wrong or ambiguous category name is a free 400, and during an outage the script stops after three failed ASINs, so an outage costs at most 3 x 4 = 12 credits on top of the ASINs already checked. Plans and credit packs are on the pricing page. For the holder history in depth, see the Buy Box history guide.
Can I use Italian category names for amazon.it bestsellers?
Yes. category_id on /amazon-bestsellers takes a numeric browse node, a top-level slug such as kitchen or electronics, or a category name as amazon.it shows it, in Italian. amazon.it's tree has 44 top-level categories and about 24,000 in total. "Moke e caffettiere" resolves to 652465031 under Casa e cucina > Tè e caffè. When a name occurs more than once, the shallowest match wins, so "Caffè" lands in the grocery branch (Alimentari e cura della casa), not on coffee machines. A name that fits two categories equally well, such as "Friggitrici" (kitchen appliances and barbecue), an English name such as "coffee grinder", an unknown numeric ID and a numeric ID from another store's tree all get a free 400; a name error lists close matches in a candidates field when there are any. The match comes back as resolved_category next to data, and the quickstart's get() returns only data, so the script prints data["categoryId"], the ID the request used. The category explorer shows the tree, and the category ID guide covers IDs on every store.
The resolved_category field of /amazon-bestsellers with category_id=Moke e caffettiere on amazon.it
{
"resolved_category": {
"category_id": "652465031",
"name": "Moke e caffettiere",
"path": "Casa e cucina > Tè e caffè > Moke e caffettiere"
}
}
Amazon's seller ID in the documented amazon.it example
The API docs use B0CLTBHXWQ, the PlayStation 5 Digital Slim on amazon.it, as the statistics example. Trimmed to the Buy Box fields, it shows how Amazon appears on this store.
Trimmed from the docs' /amazon-product-statistics example for B0CLTBHXWQ on amazon.it (example data from June 2025)
{
"data": {
"asin": "B0CLTBHXWQ",
"productTitle": "Playstation 5 Console Edizione Digital Slim",
"marketplaceId": "APJ6JRA9NG5V4",
"buyBoxPrice": 41800,
"buyBoxFulfillment": "FBM",
"amazonPrice": 44999,
"buyBoxSellerIdHistory": [["2025-06-14 17:08:00", "A2I59UVTUWUFH0"]],
"shareBuyBox": true,
"offers": {
"A11IL2PNWYJU7H": {
"isFBA": true,
"priceHistory": [["2025-06-14 06:22:00", 44999, 0]]
}
},
"stats": {
"buyBoxPriceHistory": [["2025-06-13", 41700], ["2025-06-14", 41800]]
}
},
"success": true
}
buyBoxPrice 41800 is 418,00 €, held by seller A2I59UVTUWUFH0 with merchant fulfilment (buyBoxFulfillment FBM). Amazon's own offer sits under A11IL2PNWYJU7H in offers at 449,99 € (amazonPrice 44999), and shareBuyBox true says Amazon did not hold the Buy Box in the 30 days before that reading. The numbers are the docs' example values, not today's price. A2I59UVTUWUFH0 is an amazon.it seller: a seller ID is the same on every store, but feedback is per store, so check it with /amazon-seller-review and marketplaceId=APJ6JRA9NG5V4, not on amazon.com.
Italian page text: what the API normalises and what stays Italian
amazon.it answers in Italian, so productInfo.title, bulletPoints, lookup's category names and the bestseller tree come back in Italian. Some fields are normalised for you: offer conditions such as "Nuovo" or "Usato - Come nuovo" arrive as "New" and "Used - Like New", and delivery words like "domani" become a deliveryDate (YYYY-MM-DD). Lookup's listedSinceDate works on amazon.it: a product details row such as "Disponibile su Amazon.it a partire dal 9 settembre 2023" comes back as 2023-09-09. A page without that row returns null, and the date is when the listing was created, not necessarily when it first shipped.
Frequently Asked Questions
What is the Amazon Italy marketplace ID?
APJ6JRA9NG5V4. Pass it as marketplaceId and the request goes to amazon.it with prices in EUR. A country code like "IT" or a domain like "amazon.it" is rejected with a free 400 Invalid marketplaceId.
Does the Amazon Italy API include price history?
Yes. amazon.it is one of the 11 marketplaces where /amazon-product-statistics, estimated sales and the ASIN converter answer with data, 1 credit each. History prices come back as integer euro cents, so divide by 100.
What seller ID does Amazon use on amazon.it?
A11IL2PNWYJU7H. Statistics shows it in buyBoxSellerIdHistory and offers and uses it for amazonPrice and shareBuyBox. The offers endpoint shows sellerId "Amazon" with this ID in amazonSellerId.
Do bestseller category names have to be Italian on amazon.it?
Yes. Names are matched against amazon.it's Italian tree, so "Moke e caffettiere" works and "coffee grinder" gets a free 400. Top-level slugs such as kitchen and numeric IDs from amazon.it's tree work as well.
Can I look up amazon.it products by EAN?
Yes. Call /amazon-asin-converter with conversion_direction=ean-to-asin and the barcode in asin. It returns the first matching ASIN on amazon.it. An unknown barcode is a billed 404, so check the EAN's check digit before you send it.
Bottom line: use APJ6JRA9NG5V4 for amazon.it, divide statistics prices by 100, look for A11IL2PNWYJU7H to spot Amazon, and send Italian category names. Because amazon.it has history coverage, one bestseller call plus one statistics call per ASIN tells you where Amazon sells and holds the Buy Box. For the other stores, see the marketplace IDs list and endpoint coverage by marketplace; a free account includes 150 credits.