Supplier Below Cost Review avatar

Supplier Below Cost Review

Pricing

from $0.25 / below-cost review completed

Go to Apify Store
Supplier Below Cost Review

Supplier Below Cost Review

Compare supplied supplier unit costs and store selling prices by exact SKU, with exact decimal differences and explicit unknown or ambiguous rows.

Pricing

from $0.25 / below-cost review completed

Rating

0.0

(0)

Developer

Kagerou AP

Kagerou AP

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Find store selling prices below your supplied supplier unit costs. Paste two CSV exports, declare the headers and common price basis, and get exact SKU comparisons with source row references, coverage counts and explicit unknown or ambiguous results.

This Actor reviews the supplied export pair. It does not fetch supplier data, connect to a store or change selling prices.

Try the original demo

The default input and Console prefill are the same useful, original synthetic demo:

{ "mode": "demo" }

Demo mode accepts only mode; remove custom review fields before using it. It uses bundled CC0 data with supplier costs 8.10 for SKUs 001, 002 and 003, a missing cost for 004, and store prices 7.90, 8.10, 12.00, 9.00 and 3.00 for SKUs 001 through 005. It reports one below-cost row, two not-below-cost rows and two unknown rows. The demo does not trigger the custom completion event. The platform start event still applies.

Review your exports

This useful custom review sample uses the same invented data and triggers one completion event when the budget allows it:

{
"mode": "review",
"supplierCsv": "sku,unit_cost\n001,8.10\n002,8.10\n003,8.10\n004,\n",
"storeCsv": "sku,price\n001,7.90\n002,8.10\n003,12.00\n004,9.00\n005,3.00\n",
"supplierColumns": { "sku": "sku", "unitCost": "unit_cost" },
"storeColumns": { "sku": "sku", "price": "price" },
"currency": "USD",
"comparableUnitAndTaxBasisConfirmed": true,
"rightsConfirmed": true
}

Replace the CSV text with exports you are authorized to process. rightsConfirmed must be true for every custom review. Values are CSV contents, not URLs, paths or uploads. The Actor sends no data to a supplier, store or other external service; input and output are stored in your Apify run storage.

Column mappings are required in review mode. Declare the exact case-sensitive SKU and price headers in each export; for the sample these are sku / unit_cost for the supplier and sku / price for the store. Required header duplicates or mapping two required fields to the same header are invalid. No defaults or aliases are guessed.

Declare one uppercase three-letter currency for both columns and set comparableUnitAndTaxBasisConfirmed to true only when the prices use the same selling unit and tax basis. These are your assertions. The Actor cannot detect a hidden currency, pack-size or tax-basis difference. Missing or invalid currency, or a missing/false basis confirmation, produces diagnostics without price arithmetic or a custom completion event.

Interpret the result

Matching uses exact case-sensitive string SKUs. Leading zeros and whitespace are preserved: 001, 1, SKU001 and sku001 are different identifiers. A SKU duplicated in either export is ambiguous; the Actor does not choose the lowest supplier cost or an arbitrary row.

Row statusMeaning
below_costStore price minus matched supplier unit cost is negative.
not_below_costThe exact difference is zero or positive.
unknownNo unique supplier match, missing/invalid price or another stated prerequisite prevents comparison.
ambiguousDuplicate matching SKU rows prevent a unique comparison.

differenceExact is store selling price minus supplier unit cost, in the declared common currency. A cost of 8.10 and price of 7.90 gives -0.20; 8.10 and 8.10 gives 0; 8.10 and 12.00 gives 3.90. Exact scaled-integer arithmetic avoids binary floating-point money errors. Missing or invalid prices stay unknown and are never estimated.

Outputs

The run's Output tab links to three outputs:

  • Default Dataset: one summary item with numeric schemaVersion: 1, overall status, mode, useful, coverage, detailRows, detailCap, output record keys and billing.
  • REPORT.json in the default key-value store: the complete report with store-row results, declared currency, coverage counts, unmatchedSupplierRows and all mapped sourceRecords. Each result shows at most 20 supplier row references, with supplierMatchCount and supplierRowsTruncated exposing larger ambiguous groups; all source records remain available in JSON.
  • REVIEW.csv in the default key-value store: store-row review results, prices, exact differences and reason codes. Formula-like spreadsheet cells are guarded. Use JSON when exact original cell strings matter.

Coverage includes supplier/store/output row totals, calculable, below-cost, not-below-cost, unknown and ambiguous rows, unmatched store rows, unused supplier rows and duplicate SKU counts. The detail cap is 5,000 store rows, equal to the input cap; over-limit CSVs are rejected rather than silently truncated. Unknown and ambiguous rows remain visible alongside useful comparisons. A useful pair with one valid row and two unknown rows produces one report and one custom completion event.

Pricing and budget

The Pay-per-event completion price is $0.25 for one useful completed export-pair review, event below_cost_review_completed. Useful means at least one store row can be compared to a unique supplier row using valid prices and confirmed common basis. The price is per report, independent of the number of below-cost rows; there is no Dataset item event fee.

Original demo runs, rejected input and reviews with no calculable rows trigger zero custom completion events. Apify's platform-managed $0.00005 start event applies even to demo and diagnostic runs. Platform infrastructure charges, where applicable to your account, are separate.

Budget capacity for the complete $0.25 report event is checked before any useful Dataset, key-value store or checkpoint content is saved. The startup allocation is handled separately. A budget that cannot fund one complete review returns diagnostics without a useful partial report. Useful report outputs are persisted before the completion event is charged. A resumed run checks its saved state to avoid duplicate fees; an uncertain prior charge is left unconfirmed and is not blindly retried. Inspect billing.state and billing.chargedCount in REPORT.json for authoritative confirmation. The Dataset summary is saved before charging and can show confirmation_in_REPORT.json with chargedCount: null even after a confirmed charge.

Limits and scope

  • Maximum 5 MiB UTF-8, 5,000 data rows and 200 columns per CSV. CSV headers and RFC 4180 quoting are supported.
  • Prices must be nonnegative decimal strings, with at most 12 integer digits and 6 decimal places. No exponent notation, thousands separators, currency symbols or currency conversion.
  • No title, GTIN or fuzzy matching; no supplier SKU map, automatic header inference, tax/pack conversion or guessed prices.
  • No landed-cost or net-profit calculation, shipping/tax/fee deductions, profitability claim, retail price recommendation, stock sync or automatic store update.

The result flags a supplied selling price below a supplied comparable unit cost. It does not establish profitability, a safe selling price, or whether either export is current or complete.

Source and licenses

No external data source is fetched. Your exports provide the prices and identifiers. The original synthetic demo data is dedicated under CC0 1.0 Universal. Product code is MIT licensed; see LICENSE. Dependencies are pinned to Apify SDK 3.7.2 (Apache-2.0) and csv-parse 7.0.2 (MIT).

Actor metadata follows the official input schema, Dataset schema and Actor output schema formats. The container runs Node.js 24 with lockfile installation. Native build, platform schema recognition and live pricing configuration require release validation; a local source package alone does not confirm those platform states.