Home / Blog / Amazon Hijacker Alert via API: Flag Unauthorized Sellers on Your Listing

Amazon Hijacker Alert via API: Flag Unauthorized Sellers on Your Listing

An allow-list of authorized seller IDs plus a dedupe-by-sellerId filter over the live offer list is the honest way to flag hijackers via API - with no overclaiming about account age.

October 20, 2026
3 min read
SellerMagnet Team
Share & Bookmark
Terminal window showing a Python function that flags unauthorized sellers on a listing

To flag a hijacker on your Amazon listing via API, allow-list the sellerId values you actually authorize - including "Amazon" itself when Amazon is a legitimate seller on your listing - then poll /amazon-product-offers and report any live seller outside that list, deduped by sellerId since the same seller can show up more than once. A lifetime feedback count from /amazon-seller-review adds a volume signal worth a closer look, but the API has no account-join-date field, so never report it as a verified account age.

Key Takeaways

  • Allow-list sellerId, the stable identity field - not sellerName, a separate display label.
  • Dedupe by sellerId: the same seller can appear more than once in offers[] across delivery dates/fulfillment types.
  • Lifetime feedback count (/amazon-seller-review) is a volume signal, NOT a verified account age - the API has no join-date field.
  • This is a polling pattern: check on your own schedule, there is no push notification.
  • A delisted ASIN is a billed 404, distinct from a genuinely empty offers list.

What can the API actually tell you about a suspicious seller?

Two signals, two different strengths (October 2026).
FieldEndpointWhat it really tells you
offers[].sellerId/amazon-product-offersthe stable identity to allow-list against
feedback.reviewsCount.lifetime/amazon-seller-reviewa feedback-volume signal, NOT a verified account age

How do I build the allow-list check without overclaiming?

unauthorized_sellers() filters live offers to anything outside your authorized_seller_ids set, deduping as it goes. feedback_volume_signal() reads the lifetime feedback count and flags it low below an arbitrary threshold you choose - it is a lead to investigate manually, not a verdict. get() and new_session() come from the Python quickstart; offer fields are documented in the Offer Listing API guide, seller feedback fields in the Seller Feedback API guide.

hijacker_alert.py - allow-list and a feedback-volume signal

from sellermagnet import get, new_session


def unauthorized_sellers(session, asin: str, marketplace_id: str, authorized_seller_ids: set) -> list[dict]:
    """Live offer sellers NOT in your allow-list, deduped by sellerId (an offer
    list can repeat a seller across delivery dates/fulfillment types - dedupe on
    sellerId, not row count, or you double-count one hijacker)."""
    data = get(session, "amazon-product-offers", asin=asin, marketplaceId=marketplace_id)
    seen, out = set(), []
    for o in data["offers"]:
        sid = o["sellerId"]
        if sid in authorized_seller_ids or sid in seen:
            continue
        seen.add(sid)
        out.append({"sellerId": sid, "sellerName": o["sellerName"], "fulfillmentType": o["fulfillmentType"]})
    return out


def feedback_volume_signal(session, seller_id: str, marketplace_id: str) -> dict:
    """Lifetime feedback volume for a seller - a crude signal for how established
    a seller looks, NOT a verified account age (the API has no join-date field).
    A low lifetime count is worth a closer look, not proof of anything by itself."""
    data = get(session, "amazon-seller-review", sellerId=seller_id, marketplaceId=marketplace_id)
    lifetime = data["feedback"]["reviewsCount"]["lifetime"]
    return {"sellerId": seller_id, "lifetime_feedback_count": lifetime, "low_volume": lifetime < 50}


if __name__ == "__main__":
    session = new_session()
    authorized = {"A1OFFICIAL00"}
    print(unauthorized_sellers(session, "B0CL61F39H", "ATVPDKIKX0DER", authorized))
    print(feedback_volume_signal(session, "A1SUSPECT000", "ATVPDKIKX0DER"))

Example output (illustrative ASIN and sellers)

[{'sellerId': 'A1SUSPECT000', 'sellerName': 'CheapReseller99', 'fulfillmentType': 'FBM'}]
{'sellerId': 'A1SUSPECT000', 'lifetime_feedback_count': 18, 'low_volume': True}

Trimmed offers[] entry (example values)

{
  "sellerId": "A1SUSPECT000",
  "sellerName": "CheapReseller99",
  "fulfillmentType": "FBM"
}
Blueprint anatomy of an offers call highlighting the sellerId field
sellerId is the identity to allow-list, not the display name.
Blueprint table comparing the allow-list and feedback-volume signals
One field is a real identity check; the other is only a lead.

Should I automate takedown requests from this alert?

No - treat this as a detection feed, not an enforcement tool. Report unauthorized_sellers() output to a human review queue (a Slack alert, an inbox item, a dashboard row) and let the brand owner or legal step confirm and act; the API gives you who is selling, not whether they are entitled to.

Frequently Asked Questions

What should I allow-list: sellerId or sellerName?

sellerId. It is the stable identity field the API returns on every offer, the one to compare against your authorized reseller list; sellerName is a separate display label.

Does a low lifetime feedback count prove a seller is new or fake?

No. The API has no account-join-date field, so lifetime feedback count is only a volume signal worth a closer manual look, not proof of anything by itself.

Why dedupe by sellerId instead of counting offer rows?

The same seller can appear more than once in offers[] (different delivery dates or fulfillment types), so counting rows double-counts one hijacker as two.

Can I catch a hijacker the moment they list, or only after a check?

Only after a check - this is a polling pattern, not a push notification; poll offers[] on your own schedule and alert on any sellerId outside your allow-list.

What happens if I check a delisted ASIN?

A billed 404 'Invalid product', distinct from a genuinely empty offers list - handle the two differently in your alerting.

Bottom line: allow-list by sellerId, dedupe before you count, and treat feedback volume as a lead to check manually rather than proof of a hijacker - the API tells you who is selling, not who is new.

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