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

# Sales and promotions

> Automatic sale detection and the promotion calendar

## Automatic sale detection

Promotions create demand spikes that aren't your real baseline, so Stockful detects sale days automatically and leaves them out of velocity, demand variability, and model training. No setup needed - detection covers:

| Detected                                      | How                                                                                                                                       |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| **Price markdowns**                           | A compare-at price above the selling price, or a price meaningfully below the SKU's recent regular price                                  |
| **Discount codes and order-level promotions** | Days where at least half a SKU's ordered units sold with a 10%+ discount (small sweeteners like a 5% loyalty code are ignored on purpose) |

This means a flash sale or BFCM weekend won't inflate reorder points, stockout forecasts, or trigger "unusual sales spike" alerts - spikes that line up with your own promotion are annotated, not alarmed on. If a SKU effectively only ever sells on sale, Stockful falls back to using its full history rather than leaving the forecast empty.

## Promotion calendar

Sale detection handles promotions after the fact. The promotion calendar goes further: tell Stockful what's coming, and the forecast prepares for it.

From **Settings → Forecasting**, add an event with a date range, the sales uplift you expect, and which products it covers - your whole store, one or more collections, or specific SKUs. Events show as **upcoming**, **active** or **past** based on their dates.

One declaration then feeds everything that would otherwise misread the window:

| Where                             | What changes                                                                                                                                                                                            |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Reorder points and quantities** | Ahead of the event, both include the extra demand inside the window, so reorders land before the rush rather than after it                                                                              |
| **Your baseline**                 | Afterwards, days inside a declared window stay out of your baseline velocity and model training, so a big weekend doesn't read as your new normal and over-order you into the quieter weeks that follow |
| **The forecast chart**            | The projected stock line steepens across the window instead of depleting at your everyday rate straight through it, so the graph agrees with the reorder numbers beside it                              |
| **Stock alerts**                  | Low stock and reorder point alerts are held back inside the window. Stock falling fast during a promotion you planned is the promotion working, not an emergency                                        |
| **Reports**                       | Sales can be grouped or filtered by promotion, so you can compare a campaign against your ordinary trading rather than eyeballing a chart                                                               |
| **Report charts**                 | Past windows are labelled on the events rail, so last year's spike reads as the promotion that caused it rather than an unexplained anomaly                                                             |

<Note>
  Out of stock alerts are deliberately **not** held back during a promotion. Running out mid-campaign is lost sales and possibly a storefront problem, so it matters more then, not less. Back in stock alerts keep firing too, since a recovery is worth hearing about immediately.
</Note>

Details worth knowing:

| Detail                 | Behaviour                                                                                                                                                                           |
| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Uplift**             | A percentage on top of your usual daily rate: +100% means double the usual sales, and a negative value models an expected dip. It combines with any demand adjustment you have set. |
| **Overlapping events** | They don't stack - where two windows cover the same day, the larger uplift applies                                                                                                  |
| **Repeat events**      | Work best declared both ways - add this year's BFCM dates for the pre-build, and last year's dates too so the old spike stays out of your baseline                                  |
| **Recompute timing**   | Forecasts recompute within a few minutes of saving, editing or deleting an event                                                                                                    |

<Tip>
  If you ran the same promotion last year, use the lift you actually saw as your starting point for the uplift. A rough number from real history beats a precise guess.
</Tip>
