Home / Blog / Amazon Product Variations API: Every Child ASIN of a Listing in One Lookup

Amazon Product Variations API: Every Child ASIN of a Listing in One Lookup

One product lookup returns the whole variation family of a listing: each sibling ASIN with its colour, size, style or bundle attributes. How to read the list, turn it into an attribute matrix, price every variant, and what a product without variations looks like.

September 20, 2026
4 min read
SellerMagnet Team
Share & Bookmark
Blueprint flow from one ASIN through the product lookup API to the variation family and a priced attribute matrix

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)"}}
      ]
    }
  }
}
The two dimensions of that family and the six child ASINs they produce.
Style \ Pattern NamePS5 OnlyPS5 w/ Black Ops BundlePS5 w/ $100 Store GC
PlayStation®5 console (slim)B0CL61F39HB0F691TJTPB0FD4WGVH5
PlayStation®5 Digital Edition (slim)B0CL5KNB9MB0F6968Y5GB0FD54CGQ8
Blueprint table of a variation family: six child ASINs with their Style and Pattern Name attributes
Two dimensions, six children: the list is flat, the matrix is yours to build.

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.

Blueprint breakdown of a product lookup request with the variations part of the response annotated
The request is the ordinary lookup; the family arrives as part of the same response.

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.

Ready to Extract Amazon Data at Scale?

Start building with SellerMagnet API today. Real-time product data, competitive pricing, and review analytics at your fingertips.

500 free API credits • No credit card required • Cancel anytime