Home / Blog / Amazon Australia Product API: amazon.com.au Data in AUD, No Price History

Amazon Australia Product API: amazon.com.au Data in AUD, No Price History

Get Amazon Australia product data with an API: marketplace ID A39IBJ37TRP1C6 queries amazon.com.au and returns AUD prices. Which endpoints answer, why price history is a free 400, the default delivery postcode, and a tested Python script that compares the same ASINs on amazon.com.au and amazon.com.

November 02, 2026
6 min read
SellerMagnet Team
Share & Bookmark
Terminal running a Python script that compares the same ASIN on amazon.com.au in AUD and amazon.com in USD

To get Amazon Australia product data, call the SellerMagnet API with marketplaceId=A39IBJ37TRP1C6: the request goes to amazon.com.au and prices come back in AUD. Offers, product lookup, search, deals, bestsellers and seller feedback all answer for amazon.com.au. Price history, sales estimates and the ASIN converter do not; they reject amazon.com.au with a free 400. Unlike amazon.se, listedSinceDate from /amazon-product-lookup works normally on amazon.com.au, because the backend's "Date First Available" label matching does recognise the English-language label.

Key Takeaways

  • amazon.com.au is marketplace A39IBJ37TRP1C6 and is priced in AUD.
  • Six endpoints answer on amazon.com.au; statistics, estimated sales and the converter return a free 400 and no data, the same gate amazon.se and amazon.ie hit.
  • listedSinceDate is populated normally on amazon.com.au: the label-matching list has an English entry, so the English "Date First Available" label on amazon.com.au matches, unlike the Swedish label on amazon.se.
  • amazon.com.au has its own bestseller category tree; it is not aliased to another marketplace.
  • The default delivery postcode (geo_location) for amazon.com.au is 2601; pass a different Australian postcode to check a different area.

What is different about the Amazon Australia API?

The request format is the same as for every other store: GET, query parameters, the key in the X-Api-Key header. What changes are a few values, the endpoint coverage and the default delivery postcode. The API resolves the amazon.com.au domain itself and reads prices in Australian dollars, so the decimal values you get back are plain numbers in AUD.

amazon.com.au at a glance.
Itemamazon.com.au
Marketplace IDA39IBJ37TRP1C6
Storeamazon.com.au
CurrencyAUD (Australian Dollar)
Default geo_location (postcode)2601 (Canberra)
listedSinceDatepopulated normally (English date phrase matched)
Bestseller category treeamazon.com.au's own tree
History endpointsfree 400, no data

The amazon.com.au entry of /amazon-get-marketplaces (data is keyed by marketplace ID)

{
  "A39IBJ37TRP1C6": {
    "marketplace_domain": "amazon.com.au",
    "marketplace_name": "Amazon AU",
    "currency_code": "AUD",
    "currency_name": "Australian Dollar",
    "currency_symbol": "A$",
    "geo_location": "2601"
  }
}

Which endpoints work on amazon.com.au?

Six of the ten endpoints only check that the marketplace ID is valid, so they answer on all 23 marketplaces, amazon.com.au included. The three history endpoints read a data source that covers only 11 marketplaces and turn every other one away before the credit is taken: amazon.com.au gets a 400 with the message "This endpoint is not available for the requested marketplace" followed by the list of supported stores. That call costs nothing, but it returns no data either.

Terminal-theme table of which SellerMagnet API endpoints answer for amazon.com.au and what each costs
Six endpoints answer on amazon.com.au; the three history endpoints return a free 400.

Why does listedSinceDate work on amazon.com.au but not amazon.se?

productInfo.listedSinceDate is set by matching the page's "Date First Available" label text against a single hardcoded phrase list shared by every marketplace. That list has an entry for English, among others, and amazon.com.au shows the same English-language label as amazon.com, so the match succeeds and listedSinceDate comes back populated like on any other English-language store. amazon.se shows the label in Swedish, which has no entry in that list, so the same field is always null there. Treat listedSinceDate as reliable on amazon.com.au, but check the Amazon Sweden guide before relying on it for every marketplace.

How do I compare amazon.com.au with amazon.com in Python?

The script below reads listedSinceDate for one ASIN on both stores, then reads the live offers of three ASINs on each store side by side, and prints each store's default delivery postcode. It skips anything that is not a 10-character ASIN before paying, because the offers endpoint bills a malformed ASIN like any other request, and it stops the whole run on a 401/403 instead of looping. It uses sellermagnet.py (ApiError, new_session) and retry.py (get_with_retry) from the Python quickstart.

au_vs_us.py - the same ASINs on amazon.com.au and amazon.com

"""Amazon Australia (amazon.com.au) product check: history coverage and default delivery postcode, next to amazon.com.

amazon.com.au is marketplace A39IBJ37TRP1C6, priced in AUD. Two things to know before building on it:

1. amazon.com.au is NOT one of the 11 marketplaces with full price-history support (the SellerMagnetAPILambda
   config has no amazon.com.au entry in its history-domain map), so /amazon-product-statistics, estimated sales
   and the ASIN converter all answer it with a free 400 "This endpoint is not available for the requested
   marketplace", the same gate amazon.se and amazon.ie hit.
2. Unlike amazon.se, amazon.com.au does NOT have a listedSinceDate gap: productInfo.listedSinceDate comes from
   matching the page's "Date First Available" label against a shared, hardcoded phrase list
   (SellerMagnetAPILambda language_translation.py date_phrases), and that list has an English entry
   ("date first available"), the same label amazon.com.au and amazon.com both show. So listedSinceDate is
   populated normally on amazon.com.au, exactly like on amazon.com.

Helpers: sellermagnet.py and retry.py from https://sellermagnet-api.com/blog/amazon-product-api-python
"""
import re

import requests

from retry import get_with_retry
from sellermagnet import ApiError, new_session

MARKETS = {"AU": "A39IBJ37TRP1C6", "US": "ATVPDKIKX0DER"}   # amazon.com.au (AUD), amazon.com (USD)
HISTORY_MARKETS = {"ATVPDKIKX0DER", "A2EUQ1WTGCTBG2", "A1AM78C64UM0Y8", "A2Q3Y263D00KWC", "A1F83G8C2ARO7P",
                   "A1PA6795UKMFR9", "A13V1IB3VIYZZH", "APJ6JRA9NG5V4", "A1RKKUPIHCS9HS", "A21TJRUUN4KGV",
                   "A1VC38T7YXB528"}   # the 11 marketplaces with full statistics, estimated sales, converter
DEFAULT_POSTCODES = {"A39IBJ37TRP1C6": "2601", "ATVPDKIKX0DER": "20001"}   # geo_location default per store
ASINS = ["B0CL61F39H", "B0IEONLY01", "B0NOOFFER1", "not-an-asin"]
MAX_FAILED = 3                         # 502/503 are billed on every attempt: stop after 3 calls that keep failing


def history_allowed(marketplace_id):
    return marketplace_id in HISTORY_MARKETS


def product_info(session, asin, marketplace_id):
    """Read productInfo directly (not through lookup()): we need listedSinceDate, which lookup() drops."""
    from sellermagnet import get   # the quickstart's low-level helper, used by lookup() internally
    return get(session, "amazon-product-lookup", asin=asin, marketplaceId=marketplace_id)["productInfo"]


def featured(data):
    """(price, currency, holder, unique sellers) from one offers answer; price None when nothing is featured."""
    box, offers = data.get("buyBox") or {}, data.get("offers") or []
    sellers = len({o.get("sellerId") for o in offers if o.get("sellerId")})   # a seller can be listed twice
    currency = (data.get("currency") or {}).get("code", "")
    if data.get("buyBoxSuppressed") or not box.get("totalPrice"):
        return None, currency, "no featured offer", sellers
    if box.get("sellerId") == "Amazon":
        holder = f"Amazon ({box.get('amazonSellerId') or 'no first-party ID'})"
    else:
        holder = f"{box.get('fulfillmentType', '?')} seller {box.get('sellerId', '?')}"
    return round(box["totalPrice"], 2), currency, holder, sellers   # buyBox.totalPrice is not rounded upstream


def main():
    session = new_session()
    failed = 0
    for code, marketplace in MARKETS.items():
        note = "history endpoints answer" if history_allowed(marketplace) else \
            "history endpoints skipped (free 400)"
        print(f"{code} {marketplace}: {note}, default geo_location {DEFAULT_POSTCODES[marketplace]}")

    print("\nlookup: listedSinceDate")
    for code, marketplace in MARKETS.items():
        try:
            info = product_info(session, "B0CL61F39H", marketplace)
        except ApiError as err:
            if err.status in (401, 403):   # key or credits: every other call fails the same way
                print(f"stopped: {err}")
                return
            print(f"{code:<5} error {err}")
            continue
        since = info.get("listedSinceDate") or "null"
        print(f"{code:<5} listedSinceDate={since}")

    print(f"\n{'asin':<11} {'store':<5} {'featured':>10} {'cur':<4} {'sellers':>7}  holder / note")
    for raw in ASINS:
        asin = raw.strip().upper()
        if not re.fullmatch(r"[A-Z0-9]{10}", asin):
            print(f"{raw:<11} {'-':<5} {'-':>10} {'-':<4} {'-':>7}  skipped: not an ASIN (offers would bill it)")
            continue
        for code, marketplace in MARKETS.items():
            if failed >= MAX_FAILED:
                print(f"stopped after {MAX_FAILED} failed calls")
                return
            try:
                data = get_with_retry(session, "amazon-product-offers", asin=asin, marketplaceId=marketplace)
            except ApiError as err:
                if err.status in (401, 403):   # key or credits: every other call fails the same way
                    print(f"stopped: {err}")
                    return
                label = "not listed in this store (billed 404)" if err.status == 404 else f"error {err}"
                print(f"{asin:<11} {code:<5} {'-':>10} {'-':<4} {'-':>7}  {label}")
                failed += err.status >= 500
                continue
            except (requests.ConnectionError, requests.Timeout) as err:
                print(f"{asin:<11} {code:<5} {'-':>10} {'-':<4} {'-':>7}  error {type(err).__name__}")
                failed += 1
                continue
            price, currency, holder, sellers = featured(data)
            shown = f"{price:.2f}" if price is not None else "-"
            print(f"{asin:<11} {code:<5} {shown:>10} {currency:<4} {sellers:>7}  {holder}")


if __name__ == "__main__":
    main()

Output (illustrative data: two stores, a billed 404, a retried 502 and a skipped input)

AU A39IBJ37TRP1C6: history endpoints skipped (free 400), default geo_location 2601
US ATVPDKIKX0DER: history endpoints answer, default geo_location 20001

lookup: listedSinceDate
AU    listedSinceDate=2023-07-14
US    listedSinceDate=2022-11-02

asin        store   featured cur  sellers  holder / note
B0CL61F39H  AU         89.00 AUD        1  FBA seller FBA01
B0CL61F39H  US         59.99 USD        1  FBA seller FBA01
B0IEONLY01  AU         35.00 AUD        1  FBM seller FBM03
B0IEONLY01  US             - -          -  not listed in this store (billed 404)
B0NOOFFER1  AU             - AUD        0  no featured offer
B0NOOFFER1  US         12.50 USD        1  FBM seller FBM07
not-an-asin -              - -          -  skipped: not an ASIN (offers would bill it)

calls= 9
  • sellers counts distinct seller IDs: the offers list can show the same seller twice (different delivery date or condition), so len(offers) overcounts.
  • default geo_location differs per store (2601 for amazon.com.au, 20001 for amazon.com): pass your own geo_location postcode on /amazon-product-offers to check a specific area instead of the default.
  • not listed in this store (billed 404): the offers endpoint answers an unknown ASIN with 404 "Invalid product" and charges the credit. The ASIN may well exist on the other store.
  • no featured offer with 0 sellers is a listing without offers on that page, not an error. Confirm a stock-out with a second check before acting on it.
Terminal-theme sequence of one ASIN checked on amazon.com.au and amazon.com, both stores returning a populated listedSinceDate
Two lookup calls per ASIN; listedSinceDate comes back populated on both amazon.com.au and amazon.com.

Does amazon.com.au use its own bestseller category tree?

Yes. amazon.ie borrows the UK category tree because it has none of its own; amazon.com.au is not in that alias list, so category_id for amazon.com.au must come from amazon.com.au's own tree (category explorer). An ID from another marketplace's tree, a US one for example, fails with "Invalid CategoryId", a billed 400.

What does an amazon.com.au check cost?

1 credit per request, as on every store. The comparison script costs 2 credits per ASIN (one lookup call per store), plus each billed retry: a 502 or 503 is charged on every attempt, a 500 without Retry-After is refunded. The 404 for an ASIN that a store does not have is billed; an invalid marketplace ID and the history endpoints' amazon.com.au 400 are free. The example run made 9 calls, 2 for the listedSinceDate check, 6 for three ASINs and 1 retried 502. For the whole picture across stores, see API marketplace coverage and the marketplace IDs list.

Frequently Asked Questions

What is the Amazon Australia marketplace ID?

A39IBJ37TRP1C6. Pass it as marketplaceId and the request goes to amazon.com.au, with prices in AUD. A country code like "AU" or a domain like "amazon.com.au" is rejected with a free 400 Invalid marketplaceId.

Can I get Amazon Australia price history?

Not from this API. The statistics, estimated sales and converter endpoints cover only 11 marketplaces and answer amazon.com.au with a free 400, the same gate amazon.se and amazon.ie hit. Store your own offers snapshots if you need a history.

Is listedSinceDate populated on amazon.com.au?

Yes, normally. The backend matches the page's "Date First Available" label against a shared phrase list, and that list has an English entry, the same label amazon.com.au and amazon.com both show. This is different from amazon.se, where no Swedish phrase is in the list and the field is always null.

Does amazon.com.au use its own bestseller category tree?

Yes. Unlike amazon.ie, which borrows the UK category tree, amazon.com.au is not in that alias list, so category IDs must come from amazon.com.au's own tree; an ID from another marketplace's tree is a billed 400.

What is the default geo_location for amazon.com.au?

2601 (Canberra), used for delivery-date and availability fields when a request omits geo_location. Pass a different Australian postcode in that parameter to check availability for another area; the response marks the pin that was actually used.

Does the API hold an Australian seller account?

No. SellerMagnet reads public amazon.com.au pages; it does not sell on the marketplace or hold an Australian Seller Central account, so results come from the same public listing every shopper on amazon.com.au sees.

Bottom line: use A39IBJ37TRP1C6 for amazon.com.au, expect AUD, keep history calls for the 11 covered stores, and remember amazon.com.au's own category tree and 2601 default postcode. To compare prices across more stores, see comparing Amazon prices across marketplaces; the offers endpoint page lists every field, and a free account includes 150 credits.

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.

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