S

Shopify Sale Manager

Website team access only. This app connects directly to Shopify and nothing else.

S
Shopify SaleManager
Checking…

Dashboard

Safe Shopify markdowns with exact restore.

STANDALONE APP

Website sale control, directly on Shopify

Apply real selling-price markdowns, preserve original prices as compare-at prices, and restore exact values when the sale ends.

Recent campaigns

Latest pricing activity

Shopify connection

Current live status

Storefront result: old selling price becomes Shopify compareAtPrice; discounted amount becomes the actual variant price. Cart and checkout therefore use the discounted selling price.

Shopify products

Select variants or filter by collection.

0 selected
Product / VariantSKUCurrent PriceCompare-atPricing
CREATE SALE

Markdown setup

0 variants
Timezone: Pakistan Time (Asia/Karachi). Manual Start Now / End Sale remains available.
Build discount rulesFilter/select a product, collection or SKU group, set its discount above, then add it as a rule.
Select variants and preview final Shopify prices.

No Shopify price changes happen here. After creating the draft, a separate “Apply Sale” confirmation is required.

Sale campaigns

Automatic Start / End scheduling with manual Start Now and End Sale controls.

Price change audit

Every attempted Shopify price write is recorded.

Export CSV
TimeUserActionProduct / SKUBeforeAfterResultError

Shopify connection

Server configuration

SHOPIFY_STORE_DOMAIN=your-store.myshopify.com
SHOPIFY_CLIENT_ID=...
SHOPIFY_CLIENT_SECRET=...
SHOPIFY_API_VERSION=2026-07

Keep Client Secret on the server only. Required app scopes: read_products and write_products.

Demo tools

Available only when Shopify credentials are not configured.

THEME HELP

Strike-through sale price on storefront

Most Shopify themes automatically show a sale when a variant has compare_at_price > price. This app changes the actual Shopify variant price, not a coupon display.

BeforeRs. 25,500
→
During SaleRs. 25,500   Rs. 20,400

If the theme does not show compare-at pricing

{% assign v = product.selected_or_first_available_variant %}
{% if v.compare_at_price > v.price %}
  <s class="compare-price">{{ v.compare_at_price | money }}</s>
  <span class="sale-price">{{ v.price | money }}</span>
{% else %}
  <span>{{ v.price | money }}</span>
{% endif %}
Operational rule: while a campaign is active, do not use another bulk-price tool on the same variants. End the campaign first so its exact saved snapshot can restore cleanly.
!

Confirm