Amazon Unit Price & Pack Size Audit avatar

Amazon Unit Price & Pack Size Audit

Pricing

from $20.00 / 1,000 offer auditeds

Go to Apify Store
Amazon Unit Price & Pack Size Audit

Amazon Unit Price & Pack Size Audit

Audit offer exports you already hold: normalize explicit pack counts and units, compute unit prices, and flag misleading comparisons and missing quantity data.

Pricing

from $20.00 / 1,000 offer auditeds

Rating

0.0

(0)

Developer

Practical AI Lab

Practical AI Lab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Security

Limited permissions

Share

Audit multi-seller offer exports that you already hold and are authorized to analyze. The Actor normalizes the pack counts and units you supply, computes comparable unit prices, and flags offers where the headline price is misleading or quantity data is missing.

It does not scrape Amazon or any other site, call any API, or fetch anything from the network. It only processes the JSON rows you give it.

What it checks

  • Normalizes explicit packCount, unitSize and unit (mg, g, kg, oz, lb, ml, cl, l, fl oz, count/each/piece) into a single base unit per measurement type.
  • Computes unit price per 100 g, per 100 ml or per count.
  • Compares offers only within the same product group, same currency and same measurement type.
  • Flags:
    • LOWEST_HEADLINE_PRICE_NOT_BEST_UNIT_PRICE – the cheapest sticker price is not the cheapest per unit.
    • WIDE_UNIT_PRICE_SPREAD – best and worst unit price differ by at least your threshold.
    • MISSING_PACK_COUNT, MISSING_UNIT, MISSING_UNIT_SIZE, UNKNOWN_UNIT, INVALID_* – quantity data is missing or unusable, so no unit price is produced.
    • MIXED_CURRENCY_GROUP, MIXED_UNIT_TYPES_IN_GROUP – a group contains data that cannot be compared directly.
    • SINGLE_COMPARABLE_OFFER, SMALL_SAMPLE, DUPLICATE_OFFER.

Input

Copy this into the Offers field:

[
{"asin": "B0SAMPLE01", "seller": "Seller A", "price": 12.99, "currency": "USD", "packCount": 1, "unitSize": 32, "unit": "oz"},
{"asin": "B0SAMPLE01", "seller": "Seller B", "price": 9.99, "currency": "USD", "packCount": 1, "unitSize": 12, "unit": "oz"},
{"asin": "B0SAMPLE01", "seller": "Seller C", "price": 24.5, "currency": "USD", "packCount": 2, "unitSize": 16, "unit": "oz"},
{"asin": "B0SAMPLE01", "seller": "Seller D", "price": 11.5, "currency": "USD", "unitSize": 24, "unit": "oz"},
{"asin": "B0SAMPLE02", "seller": "Seller A", "price": 8.0, "currency": "USD", "packCount": 4, "unit": "count"},
{"asin": "B0SAMPLE02", "seller": "Seller B", "price": 14.0, "currency": "USD", "packCount": 12, "unit": "count"},
{"asin": "B0SAMPLE02", "seller": "Seller E", "price": 12.0, "currency": "EUR", "packCount": 6, "unit": "count"}
]
FieldRequiredNotes
asin or productGroupone of themOffers are compared within this key. Use productGroup to compare different ASINs of the same product.
priceyesPositive number.
currencyyesThree-letter code. Never converted.
packCountyesWhole number. Never assumed to be 1.
unityesOne of the supported units.
unitSizefor weight/volumeSize of one pack item. Optional for count units (defaults to 1).
sellerrecommendedUsed for labels and duplicate detection.

Other options: fieldMap (map your column names to the standard ones), priceSpreadThresholdPercent (default 25), maxOffers (default 5000, max 20000).

Output

One dataset row per input offer with normalized fields, unitPrice, unitPriceBasis, unitPriceVsBestPercent, status (ok, needs_data, invalid, duplicate) and flags. The key-value store record OUTPUT contains per-group summaries (best seller, spread, counts) and status totals.

Pricing event

The code emits the event offer-audited once per offer with a computed unit price (status: ok). Invalid input, invalid rows, rows missing quantity data and duplicates are never charged. No payable plan is configured in this repository.

Limitations

  • Garbage in, garbage out: results are only as good as the supplied fields. Pack counts and sizes are never inferred from titles or descriptions, so rows without explicit structured quantities get no unit price.
  • oz is treated as weight ounces and fl oz as US fluid ounces. Convert other conventions beforehand.
  • All count-type units (each, piece, count) are treated as the same measure; sheets vs. capsules are not distinguished.
  • No currency conversion, taxes, shipping, coupons, subscription discounts or availability are considered.
  • Comparisons with only two offers are marked SMALL_SAMPLE; spread percentages from so few offers are indicative only and do not prove a product is overpriced.
  • Offer data may be out of date by the time it is analyzed; the Actor cannot verify its accuracy or your right to use it.
  • Runs are in memory: keep exports within maxOffers; extra rows are ignored and reported in OUTPUT.

Local tests

Offline unit tests are in tests/ (python -m unittest discover -s tests).