# sale_price

The sale_price attribute is the temporarily reduced price of an item, submitted alongside the full price so a channel can show the reduction rather than simply a lower number. On Shopify the reliable source is the variant's compare-at price relationship, and discounts applied by code or automatic rule are not visible in the product record at all.

- **Canonical URL:** https://www.feedlab.io/knowledge/attributes/sale-price
- **Last reviewed:** 16 September 2026
- **Source:** feedlab knowledge base
- **Licence:** free to quote and cite with attribution to feedlab


## Specification

| Property | Value |
| --- | --- |
| Attribute | `sale_price` |
| Plain name | Sale price |
| Data type | Price (number and currency) |
| Format | Same format as price: a number, a space, then an ISO 4217 currency code. It must be lower than price and use the same currency. Some channels additionally expect an effective date range through sale_price_effective_date when the reduction is time-limited. |


### Example values

- `11.25 GBP`
- `149.99 USD`



### Support by channel

| Channel | Requirement | Field name | Notes |
| --- | --- | --- | --- |
| Google Shopping | Optional | `sale_price` | Must be lower than price. Pair with sale_price_effective_date when time-limited. |
| Meta | Optional | `sale_price` |  |
| Microsoft Advertising | Optional | `sale_price` |  |
| Pinterest | Optional | `sale_price` |  |
| OpenAI | Optional | `sale_price` | Must be greater than zero and strictly less than price, so an empty or equal sale price has to be dropped rather than sent. |












## Frequently asked questions

### How does Shopify's compare-at price map to a feed?

When a Shopify variant has a compare-at price higher than its price, the compare-at figure is the reference price and the current price is the reduced one. In feed terms that means price takes the compare-at value and sale_price takes the current price.

### Why do my discount codes not show up in the feed?

Shopify discount codes and automatic discounts are applied at checkout, not stored on the product, so nothing in the product record reflects them. Getting them into a feed requires reading the discount rules separately and resolving which ones apply to each product at generation time.

### What happens if sale_price is higher than price?

The channel rejects the sale price, and depending on the channel either ignores it or disapproves the item. sale_price must always be strictly lower than price and in the same currency.




## Primary sources

- [Google: sale_price attribute specification](https://support.google.com/merchants/answer/6324471)



