To get the variations of an Amazon product with an API, look up any ASIN of the family with the SellerMagnet /api/amazon-product-lookup endpoint and read productInfo.variations: one entry per sibling ASIN, each with the attributes that distinguish it - colour, size, style, pattern or bundle. The looked-up ASIN is in the list too, so one request maps the whole family; pricing each variant then costs one lookup per child ASIN.
Key Takeaways
- productInfo.variations lists every sibling ASIN with its attribute values; the looked-up ASIN is included.
- Attribute names are the labels Amazon shows (Style, Pattern Name, Color, Size) in the marketplace language.
- A product without variations returns at most one entry - itself, with empty attributes - or an empty list; test len(variations) > 1.
- The family list costs nothing extra; a price per variant needs one lookup (or offers call) per child ASIN.
- Look up the child ASIN you want to sell, not its siblings: price, Buy Box and images are per child.
What does the variations field contain?
Amazon groups variants of one product under a parent ASIN that cannot be bought itself; the buyable listings are the child ASINs. The product page of any child carries the full family, and the lookup returns it as variations: a list of {asin, attributes} objects. The attribute keys are the dimension labels Amazon uses on that marketplace, so a German listing says Farbe and Größe where an American one says Color and Size.
productInfo.variations for a PlayStation 5 listing on amazon.com (trimmed)
{
"success": true,
"data": {
"productInfo": {
"asin": "B0CL61F39H",
"title": "PlayStation®5 console (slim)",
"variations": [
{"asin": "B0CL61F39H", "attributes": {"Pattern Name": "PS5 Only", "Style": "PlayStation®5 console (slim)"}},
{"asin": "B0CL5KNB9M", "attributes": {"Pattern Name": "PS5 Only", "Style": "PlayStation®5 Digital Edition (slim)"}},
{"asin": "B0F691TJTP", "attributes": {"Pattern Name": "PS5 w/ Black Ops Bundle", "Style": "PlayStation®5 console (slim)"}},
{"asin": "B0F6968Y5G", "attributes": {"Pattern Name": "PS5 w/ Black Ops Bundle", "Style": "PlayStation®5 Digital Edition (slim)"}},
{"asin": "B0FD4WGVH5", "attributes": {"Pattern Name": "PS5 w/ $100 PlayStation Store GC", "Style": "PlayStation®5 console (slim)"}},
{"asin": "B0FD54CGQ8", "attributes": {"Pattern Name": "PS5 w/ $100 PlayStation Store GC", "Style": "PlayStation®5 Digital Edition (slim)"}}
]
}
}
}
| Style \ Pattern Name | PS5 Only | PS5 w/ Black Ops Bundle | PS5 w/ $100 Store GC |
|---|---|---|---|
| PlayStation®5 console (slim) | B0CL61F39H | B0F691TJTP | B0FD4WGVH5 |
| PlayStation®5 Digital Edition (slim) | B0CL5KNB9M | B0F6968Y5G | B0FD54CGQ8 |

How do I get all child ASINs of a product in Python?
One request. The helper below returns the family as a list and, for convenience, the set of attribute dimensions it found. Sort the list by its attributes so the output is stable between runs.
variations.py - the family of any ASIN in one lookup
import os
import requests
API = "https://sellermagnet-api.com/api"
def lookup(asin: str, marketplace_id: str) -> dict:
resp = requests.get(f"{API}/amazon-product-lookup",
params={"asin": asin, "marketplaceId": marketplace_id,
"api_key": os.environ["SELLERMAGNET_API_KEY"]}, timeout=90)
try:
body = resp.json()
except ValueError: # e.g. an HTML error page from a proxy
body = {}
if resp.status_code != 200 or not body.get("success"):
raise RuntimeError(f"{asin}: {resp.status_code} {body.get('message')}")
return body["data"]["productInfo"]
def family(asin: str, marketplace_id: str) -> tuple[list, list]:
"""(variations sorted by their attributes, dimension names in order of appearance)."""
variations = lookup(asin, marketplace_id).get("variations") or []
dimensions = []
for v in variations:
for key in v.get("attributes", {}):
if key not in dimensions:
dimensions.append(key)
variations.sort(key=lambda v: [v["attributes"].get(d, "") for d in dimensions])
return variations, dimensions
variations, dimensions = family("B0CL61F39H", "ATVPDKIKX0DER")
print(dimensions) # ['Pattern Name', 'Style']
for v in variations:
print(v["asin"], " | ".join(v["attributes"].get(d, "-") for d in dimensions))
A product without variations
A standalone listing comes back with at most one entry - its own ASIN with an empty attributes object - or an empty list when the page carries no variation block. Either way, len(variations) > 1 is the test for "this product has variants".
How do I price every variant?
Price, Buy Box, images and reviews are properties of a child ASIN, not of the family, so the sibling list carries none of them. Look up each child you care about (one credit each), or use the product offers endpoint when you need the live offer list rather than the listing page. The loop below adds the Buy Box price to every row.
Price the family: one lookup per child ASIN
import csv
first = lookup("B0CL61F39H", "ATVPDKIKX0DER") # one credit: the family and this child's data
variations = first.get("variations") or []
dimensions = sorted({k for v in variations for k in v.get("attributes", {})})
with open("family.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["asin", *dimensions, "buy_box_price", "currency"])
for v in variations:
info = first if v["asin"] == first["asin"] else lookup(v["asin"], "ATVPDKIKX0DER") # one credit per other child
buy_box = info.get("buyBoxInfo") or {}
writer.writerow([v["asin"], *(v["attributes"].get(d, "") for d in dimensions),
buy_box.get("price"), buy_box.get("currencyCode")])
A family of six costs six credits this way: the first lookup already carries its own child's data. Retries for 429 and 503 belong in lookup() too - the error-handling guide has the policy. For hundreds of families, the worker pool in the bulk ASIN lookup guide keeps this within the concurrency limit.

Which ASIN should I track?
Track the child you sell. Reviews are pooled across a family, but sales rank, price, Buy Box ownership and stock are per child - an out-of-stock sibling sits in the list without any flag, and only its own lookup shows it - and a keyword rank check returns whichever child Amazon chose to show for that search. When you build a watch list from a family, store the child ASIN together with its attributes; the ASIN alone tells a reader nothing about which size or bundle it is.
Frequently Asked Questions
How do I get all variations of an Amazon product with an API?
Look up any child ASIN with /api/amazon-product-lookup and read productInfo.variations: every sibling ASIN with its attributes, the looked-up ASIN included.
Does the API return the parent ASIN?
No. The parent is not a buyable listing; the lookup returns the buyable child ASINs and the attributes that tell them apart.
What if the product has no variations?
variations holds at most one entry - the product itself with an empty attributes object - or is empty. Check len(variations) > 1.
Are variant prices included in the family list?
No. Price, Buy Box, images and reviews belong to each child ASIN; look up each child you need, one credit per lookup.
Why are the attribute names in German or Italian?
They are the dimension labels Amazon shows on that marketplace's product page, such as Farbe or Größe on amazon.de.
Bottom line: one lookup opens the family, the attributes tell the children apart, and each child is priced on its own. The product lookup page shows the full response, and a free account includes 500 credits - about 70 families of seven.