Amazon Brand Price Segments avatar

Amazon Brand Price Segments

Pricing

from $2.00 / 1,000 segment rows

Go to Apify Store
Amazon Brand Price Segments

Amazon Brand Price Segments

Turn your authorized Amazon product exports into brand-by-category price segments, seller offer gaps and currency-separated summaries. Useful for recurring assortment and competitor pricing reviews; no scraping or price predictions.

Pricing

from $2.00 / 1,000 segment rows

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

10 days ago

Last modified

Security

Limited permissions

Share

Paste product records you already have and get transparent price bands per brand, the bands where a brand has no offers, and separate market splits for each currency. The Actor works only on the data you supply. It does not visit Amazon or any other website, uses no proxies and makes no network requests.

What you get

For every category and currency combination:

  • market_split row: listing count, min / p25 / median / p75 / max / mean, the exact price range of each band, and bands that hold fewer listings than your minimum group size.
  • brand_segment rows: the same statistics per brand, share of listings, brand median versus market median (percent), how many listings fall in each band, the dominant band, and offer gap bands (bands where the market has listings but this brand has none).

Currencies are never mixed or converted. EUR and USD records form separate markets.

How bands work

Bands are quantile cut points of all supplied prices in one category and currency (for example quartiles when bandCount is 4). Cut points equal to the market minimum are dropped, so a market with identical prices has a single band. A price exactly on a cut point belongs to the higher band. Labels are B1 (lowest) upward.

Input

FieldMeaning
productsArray of objects (required).
defaultCurrencyUsed only when a record has no currency. Empty means such records are grouped as UNKNOWN.
bandCount2 to 6, default 4.
minGroupSizeThreshold for low-sample flags, default 3.
maxRecordsCap on processed records, default 5000.
includeMarketRowsDefault true.

Recognised record fields (first non-empty wins): brand (brand, brandName, manufacturer), category (category, categoryName, productCategory, department), price (price, currentPrice, salePrice, offerPrice; numbers, strings such as "$1,299.50" or "1.299,50 €", or {"value": 12, "currency": "EUR"}), currency (currency, priceCurrency, currencyCode), identifier (asin, sku, productId). Records with the same identifier, currency and category are de-duplicated (first one kept).

Example input

{
"products": [
{"asin": "A1", "brand": "Alpha Audio", "category": "Headphones", "price": 24.99, "currency": "USD"},
{"asin": "A2", "brand": "Alpha Audio", "category": "Headphones", "price": 34.5, "currency": "USD"},
{"asin": "A3", "brand": "Alpha Audio", "category": "Headphones", "price": 39.0, "currency": "USD"},
{"asin": "B1", "brand": "Beta Sound", "category": "Headphones", "price": "$59.00", "currency": "USD"},
{"asin": "B2", "brand": "Beta Sound", "category": "Headphones", "price": "$74.90", "currency": "USD"},
{"asin": "B3", "brand": "Beta Sound", "category": "Headphones", "price": "$89.00", "currency": "USD"},
{"asin": "G1", "brand": "Gamma Gear", "category": "Headphones", "price": "29,90 €", "currency": "EUR"}
],
"bandCount": 2,
"minGroupSize": 3
}

The brand and product names above are illustrative placeholders, not real market data.

Output

Rows go to the default dataset. A SUMMARY record in the key-value store lists records received, used, de-duplicated, truncated and skipped (with reasons: missing_brand, invalid_price, not_an_object).

Key fields: recordType, category, currency, brand, listings, minPrice, p25, medianPrice, p75, maxPrice, meanPrice, medianVsMarketPct, shareOfListingsPct, bandCounts, dominantBand, offerGapBands, lowBrandSample, thinMarket, notes.

Limitations and sample-size caveats

  • Results describe only the records you provide. An "offer gap" means no supplied listing in that band, not that the real marketplace lacks such offers.
  • Small samples are unreliable. Brands with fewer listings than minGroupSize are flagged lowBrandSample; markets with fewer than two listings per band are flagged thinMarket. Quantiles of a handful of prices move a lot when one record changes.
  • Prices are taken as given: no fees, shipping, coupons, variants or time-of-capture adjustments. Mixed capture dates distort comparisons.
  • Brand names are matched case-insensitively after whitespace cleanup, with no alias merging (for example "Acme" and "Acme Official" stay separate).
  • A bare $ is ambiguous (USD, CAD, AUD and others), so it is not interpreted. Provide a currency field or defaultCurrency. Thousands/decimal separators in strings are inferred heuristically; use numeric prices when exactness matters.
  • Only the first maxRecords records are processed.
  • No currency conversion, forecasting or demand estimation.

Pricing

The code defines a segment-row charge event, charged once per dataset row after results are stored. Nothing is charged when input is invalid or no row is produced. Pay-per-event pricing is not configured in this repository; any plan is set separately on the platform.

Local tests

python -m unittest discover -s tests runs offline tests of the aggregation logic.