How to

Bulk update sale prices

Reset sale prices from a previous promotion and apply new sale prices across markets using the bulk update prices API.

Overview

Perform a bulk reset of sale prices from a previous promotion and apply new sale prices for the current promotion across one or more markets.

Prerequisites

  • Management API access (X-ApiKey + Basic auth credentials)
  • Market ID(s) where the promotion runs
  • Knowledge of Geins standard price list IDs:
    • Sale price lists have IDs ending in 1
    • Campaign price lists (ID ending in 2) cannot be updated; such entries will be ignored and can only be updated by the campaign service
    • Standard ID formula: Market ID × 1000000 + Price list type
      • Ordinary = 0
      • Sale = 1
      • Campaign = 2
    • Examples:
      • Market 1, Sale → 1000001
      • Market 2, Sale → 2000001
  • Access to Merchant Center for verification

Goal

  • Remove/clear sale prices that belonged to the previous promotion
  • Set new sale prices for the current promotion
  • Do this reliably in bulk with the Management API

Architecture at a glance

  • Prepare two payloads (reset payload, new-sale payload) → call Management API bulk update → verify results

APIs used

  • Management API: (bulk update price list prices):
    • PUT /api/pricelist/price

Plan

  1. Create a reset payload to clear previous promotion sale values. Use -1 as value to remove Sale price.
  2. Create a new-sale payload with the new sale prices.
  3. Run a dry-run against a test market or small SKU set.
  4. Execute bulk update in batches for production markets.
  5. Verify.

Step-by-step

Build reset payload for previous promotion

  • For each sale price entry to clear, prepare an update that:
    • Sets the sale price to -1
  • Example:
[
  { "priceListId": 1000001, "productId": "10001", "price": -1, "currency": "SEK" },
  { "priceListId": 1000001, "productId": "10002", "price": -1, "currency": "SEK" }
]
  • Use a dry-run on a small sample to confirm the API accepts the reset format.

Build new-sale payload for current promotion

  • Prepare updates with new sale price values and currency:
[
  { "priceListId": 1000001, "productId": "10003", "price": 49.99, "currency": "SEK" },
  { "priceListId": 1000001, "productId": "10004", "price": 29.99, "currency": "SEK" }
]

Execute updates in safe batches

  • Run the reset payload first in a dry-run or small production batch, verify results.
  • Next, apply the new-sale payload in batches (e.g., 500–2000 records per request. Do not exceed 5000 records per request.).
  • Monitor success/failure responses; retry transient failures.

Verify and publish

  • Spot-check Products in each market and compare to the backup.
  • Confirm storefront/checkout pricing reflects changes.
  • Compare counts: number of records updated vs expected from export.
response.json
{
    "Message": "Update success.",
    "Invalid": null,
    "NotFound": null,
    "UpdateCount": 2
}
If errors occurred, review `Invalid` and `NotFound` arrays in the response for troubleshooting.
Related