Amazon Landed Cost Margin Audit avatar

Amazon Landed Cost Margin Audit

Pricing

from $20.00 / 1,000 offer pair auditeds

Go to Apify Store
Amazon Landed Cost Margin Audit

Amazon Landed Cost Margin Audit

Offline audit of two seller offer and cost exports: finds margin erosion by seller and SKU, rejects mixed currencies and missing freight.

Pricing

from $20.00 / 1,000 offer pair 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

Compare two exports of your own (or a client-authorized) ASIN seller offers and cost/fee data, and get a reproducible list of offers whose profit margin got worse, rolled up by seller and SKU.

This Actor does not scrape Amazon or any other site and makes no network requests. It only analyzes the data you paste in.

What it does

  1. Validates every row of a baseline and a current export.
  2. Rejects rows with missing freight cost, mixed currencies (never converts), invalid ASINs, ambiguous fees, or duplicate ASIN + seller + SKU keys.
  3. Matches offers on ASIN + seller + SKU and computes landed-cost margin for each side: margin = price - unit_cost - freight - duty - other - referral_fee - fba_fee (per unit).
  4. Reports an exception when margin percentage falls by at least your threshold (default 3 points) or an offer flips from profit to loss, with the largest cost driver, per-unit and per-volume impact, both row snapshots, and a SHA-256 evidence hash.
  5. Adds per-seller rollups and a SUMMARY record with an input fingerprint so the same input always gives the same result.

Input columns

Required: asin, seller, sku, currency, price, unit_cost, freight_cost, and exactly one of referral_fee_pct (e.g. 15) or referral_fee (amount). Optional: duty_cost, other_cost, fba_fee (default 0), units (default 1, used to weight volume impact). Blank freight means "unknown" and is rejected; enter 0 if there truly is none.

Sample input

{
"baselineCsv": "asin,seller,sku,currency,price,unit_cost,freight_cost,referral_fee_pct,fba_fee,units\nB000000001,Northwind Goods,NW-100,USD,29.99,9.50,1.20,15,5.10,120",
"currentCsv": "asin,seller,sku,currency,price,unit_cost,freight_cost,referral_fee_pct,fba_fee,units\nB000000001,Northwind Goods,NW-100,USD,27.99,9.50,2.90,15,5.40,130",
"expectedCurrency": "USD",
"marginDropPoints": 3
}

You can also pass baselineRecords / currentRecords as JSON arrays of row objects. Common header spellings (for example Seller SKU, COGS, Offer Price) are recognized.

Output

  • Dataset records with recordType of exception, seller_rollup, or rejected (separate views in the Console).
  • Key-value store SUMMARY: counts, rejection reasons, unmatched offers, fingerprint, caveats.

Pricing event

The code emits the event offer-pair-audited (one per matched offer, capped by maxPairs) only after results are stored. Failed runs are not charged. No payable plan is configured in this repository.

Limitations

  • Garbage in, garbage out: results are only as accurate as your cost and fee columns. Fees are not looked up or estimated.
  • Currencies are never converted; use one currency per audit.
  • Seller-level averages from fewer than 30 matched offers are anecdotal; the summary says so.
  • Offers present in only one export are counted but not compared.
  • Input is capped (default 20,000 rows per export) to keep memory low.
  • You are responsible for having the right to use the data you supply.