Amazon Unit Price & Pack Size Audit
Pricing
from $20.00 / 1,000 offer auditeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Security
Limited permissionsShare
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,unitSizeandunit(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"}]
| Field | Required | Notes |
|---|---|---|
asin or productGroup | one of them | Offers are compared within this key. Use productGroup to compare different ASINs of the same product. |
price | yes | Positive number. |
currency | yes | Three-letter code. Never converted. |
packCount | yes | Whole number. Never assumed to be 1. |
unit | yes | One of the supported units. |
unitSize | for weight/volume | Size of one pack item. Optional for count units (defaults to 1). |
seller | recommended | Used 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.
ozis treated as weight ounces andfl ozas 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 inOUTPUT.
Local tests
Offline unit tests are in tests/ (python -m unittest discover -s tests).