Sales targets are a measurement and motivation tool. They don’t affect order routing or fulfillment constraints.
What you can track
Three metrics, configurable per location and period:| Metric | Description | Value type |
|---|---|---|
| Gross sales | Total sales revenue for the period | Money |
| Average order value (AOV) | Average revenue per order | Money |
| Units per transaction (UPT) | Average items per order | Decimal |
Period types
| Period | Length |
|---|---|
| Day | 1 day |
| Week | 7 days |
| Month | 1 calendar month from the start date |
| Year | 1 calendar year from the start date |
Target status
Charlie computes the status of each target based on its current value, target value, and period dates:| Status | When |
|---|---|
| Upcoming | Period hasn’t started yet |
| In progress | Period is active and hasn’t ended |
| Achieved | Period ended and the target was met |
| Not achieved | Period ended and the target wasn’t met |
Setting up targets
Single target
Create a target
Click Add target and fill in the form:
| Field | Description |
|---|---|
| Location | The location this target applies to |
| Metric | Gross sales, AOV, or UPT |
| Period type | Day, Week, Month, or Year |
| Period start | The date the period begins (YYYY-MM-DD) |
| Target value | The goal value in your store currency (or decimal for UPT) |
Bulk import via CSV
For setting many targets at once across locations and periods.Download the template
On the Sales targets page, click Download template. The template pre-fills a row for each of your locations so you can fill in the metric and target value without looking up IDs.
Fill in the CSV
Edit the template in your spreadsheet of choice.
| Column | Required | Description |
|---|---|---|
location_id | Yes | Shopify location GID (gid://shopify/Location/...) |
location_name | No | For your reference, ignored on import |
metric | Yes | GROSS_SALES, AOV, or UPT |
period_type | Yes | DAY, WEEK, MONTH, or YEAR |
period_start | Yes | ISO date YYYY-MM-DD |
period_end | No | Computed automatically if omitted |
target_value | Yes | Positive number in major units (e.g. 80000.50) |
currency | No | 3-letter ISO currency code, defaults to your store currency |
Export current targets
Click Export on the Sales targets page to download all current targets as CSV. Useful for backup, review, or making bulk edits before re-importing.Tracking from Shopify POS
The POS Sales targets tile lets your retail team see how they are tracking against the day’s goals without leaving POS.The tile
The tile appears on the POS smart grid for the active location and shows a quick on-track summary (e.g. “2 / 3 on track”). Tap the tile to open the modal.The modal
The modal shows one card per metric (Gross sales, AOV, UPT):- Current value for the active period at the current POS location
- Target value as configured in admin
- Progress percentage of current vs target
- Status badge (Upcoming, In progress, Achieved, or Not achieved)
- Period dates the target applies to
Offline behavior
The POS extension caches the last known values per device so the tile and modal still work without a connection. The cache refreshes every time the modal opens online.The POS tile queries up to 5,000 orders per period for performance. If a period exceeds this volume, totals are approximate and a console warning is logged.
Languages
The POS tile and modal are translated into English and French out of the box. POS picks the language based on the device’s POS language setting.How values are computed
For each target:- Charlie queries Shopify orders for the target’s location and period via the Admin API.
- Aggregates the orders into a
currentValueper metric:- Gross sales — sum of order totals across the period
- AOV — gross sales / order count
- UPT — total line item quantity / order count
progressPct= currentValue / targetValue × 100.- Status is recomputed on every page load from the current date and the period dates.
Money values (Gross sales, AOV) are stored in cents internally and displayed in your store currency. UPT is stored as a raw decimal (e.g.
2.5 units per transaction).Best practices
Start with one metric per location
Pick the most actionable metric per location (often gross sales for stores) before layering AOV and UPT.
Use the template for bulk setup
Download the CSV template before bulk import — it’s pre-filled with your location IDs so you don’t have to look them up.
Re-export before big changes
Export current targets before making sweeping edits so you can roll back via re-import if needed.
Refresh during shifts
Encourage retail staff to open the POS modal at key shift times — totals refresh on every open.
Troubleshooting
POS tile shows old values
POS tile shows old values
The POS extension caches the last known values per device. If you just edited a target in admin, open the modal once to trigger a refresh. The next render of the tile will reflect the new values.
POS tile shows no targets
POS tile shows no targets
Check:
- Is there a target for the current period (today’s date falls within
periodStartandperiodEnd) at the active POS location? - Did the metafield sync run after creating the target? Edits flow to the shop metafield
$app:sales_targets.dataautomatically. - Is the POS device online to fetch the latest metafield?
CSV import fails validation
CSV import fails validation
Common causes:
location_idis not the full Shopify GID (gid://shopify/Location/123)metricis lowercase or contains typos (must beGROSS_SALES,AOV, orUPT)period_startis not inYYYY-MM-DDformattarget_valueincludes a currency symbol — use plain numbers like80000.50
Related
Location capacity
Daily order limits per location
Analytics
Historical sales and fulfillment metrics