> ## Documentation Index
> Fetch the complete documentation index at: https://docs.merchantops.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Price records

> How MerchantOps stores prices — per-variant records with a price type and effective date.

A price record is a single price for a single variant: an amount, a currency, a
price type, and the date it takes effect. Prices always attach to a variant, so
a product with several sizes or colors has one record per variant per price
type. This page is for merchandisers and integrators managing pricing in
MerchantOps. New to the vocabulary? See [Core concepts](/getting-started/concepts).

## What a price record holds

<ResponseField name="product_key / variant_key" type="what the price applies to">
  The product and the specific variant the price belongs to. Prices are set at
  the variant level — MSRP and every other price type live on the variant, not
  the parent product.
</ResponseField>

<ResponseField name="price_type" type="which price this is">
  One of five canonical types (see the table below). A variant can carry several
  records at once — for example an MSRP and a sale price with different effective
  dates.
</ResponseField>

<ResponseField name="amount / currency" type="the price">
  The numeric price and its currency (default `USD`).
</ResponseField>

<ResponseField name="effective_from" type="when it takes effect">
  The date the price becomes active. A date-only value is interpreted as
  midnight in your organization's publishing time zone.
</ResponseField>

<ResponseField name="status" type="lifecycle state">
  A record starts as `draft` and moves through `active`, then `expired` or
  `superseded` as newer prices take over.
</ResponseField>

## Price types

MerchantOps recognizes exactly these five price types. Any other value is
rejected when the record is saved.

| Type           | Meaning                                                                 |
| -------------- | ----------------------------------------------------------------------- |
| `map`          | Minimum Advertised Price — the floor a product may be advertised at.    |
| `map_stepdown` | A scheduled reduction to a MAP floor that takes effect on a later date. |
| `sale`         | A temporary promotional price.                                          |
| `markdown`     | A permanent price reduction.                                            |
| `msrp`         | Manufacturer's Suggested Retail Price.                                  |

<Note>
  MAP as a *policy* (the legal document a brand issues) is tracked separately from
  MAP price *records*. See [MAP policies](/pricing/map-policies).
</Note>

## Effective dates

Every record carries an `effective_from` date. When you pick a calendar date,
MerchantOps treats it as local midnight in your organization's publishing time
zone and stores the exact instant, so a price scheduled for a given day goes
live at the start of that day for your business — not at UTC midnight.

Because records are dated, a variant can hold today's active price alongside a
future price that has not taken effect yet. Listing and filtering tools let you
view the current price, the next upcoming price, or prices within a date range.

## Creating prices

You can create prices a few ways, depending on scale:

<Steps>
  <Step title="One record at a time">
    Create a single price for one variant — useful for a one-off correction.
  </Step>

  <Step title="Mass-create across variants">
    Apply one price type and amount to many variants of a product at once (for
    example, the same MSRP across every size of a style).
  </Step>

  <Step title="Bulk set several prices">
    Submit multiple price lines — different types and effective dates — for a
    set of variants in one call. Lines that share an effective date are grouped
    together automatically.
  </Step>

  <Step title="Import from CSV">
    Upload a CSV to create many records at once. The import runs in the
    background as a [job](/getting-started/concepts). A downloadable template
    shows the expected columns (`product_key`, `variant_key`, `price_type`,
    `amount`, `effective_from`, `currency`, `brand_key`, `notes`).
  </Step>
</Steps>

When you create prices, MerchantOps can group them into a **price batch** for
review and scheduled publishing. Batching is on by default — mass-create and
bulk-set find or create an open batch keyed on the effective date. See
[Price batches](/pricing/price-batches).

## Viewing and editing

Records can be listed per product, filtered by brand, status, or price type, and
grouped by product with summary counts. You can update an individual record's
amount, dates, or notes, and delete records individually or in bulk. Exports let
you pull records into a spreadsheet — see [Export](/pricing/export).

<CardGroup cols={2}>
  <Card title="Price batches" icon="layer-group" href="/pricing/price-batches">
    Group price changes, review them, and schedule publishing.
  </Card>

  <Card title="MAP policies" icon="scale-balanced" href="/pricing/map-policies">
    Minimum Advertised Price as legal/compliance data.
  </Card>

  <Card title="Comparison & proposals" icon="code-compare" href="/pricing/comparison-proposals">
    Compare current prices against a policy and review proposed changes.
  </Card>

  <Card title="Export" icon="file-export" href="/pricing/export">
    Export prices with selectable fields and reusable templates.
  </Card>
</CardGroup>
