Creating Your First Campaign
Step-by-step setup for your first scheduled discount on Shopify.
By the end of this doc you’ll have a discount scheduled to start later today (or this weekend, or next month — your call). The whole process takes about three minutes.
1. Open the Campaigns page
From the Campaignly admin sidebar click Campaigns, then click New campaign in the top-right.
2. Name the campaign
Pick something you’ll recognise on the list later — Spring Sale 2026,
Memorial Day Clearance, Black Friday Doorbusters. The name only
shows up in your admin; customers never see it.
3. Pick the discount type
Two options:
- Percentage off —
20% off the original price. Most promotions. - Fixed amount off —
$5 off, regardless of the original. Good for round-number promos.
Campaignly computes the new price from your original price every time. If two campaigns overlap, the most recent one wins — see the Understanding Overlapping Discounts doc for the full mental model.
4. Pick products
Three ways to choose what’s on sale:
- Specific products — pick from a searchable list. Best for a curated promo.
- By collection — every product in the chosen Shopify collection. Useful for category-wide sales (“everything in Outdoor 20% off”).
- By tag — every product carrying a tag like
sale-eligible. Good for evergreen workflows where you tag products in bulk.
Plan limits: Free tier caps at 50 products per campaign; Starter goes to 500; Pro is unlimited. See Billing Plans for the full matrix.
5. Set start + end times
Pick a date and time for each. Campaignly converts to your store’s configured timezone (which it reads from Shopify automatically).
Two rules:
- End must be after start (obvious but the form checks).
- Minimum 1 hour duration. Anything shorter risks the apply Lambda not finishing before the revert one fires.
Future-dating is fine — schedule something six months out, edit it any time before it fires, and we’ll wake the right Lambda on the right second.
6. Save → confirm → done
Hit Create campaign. Campaignly:
- Persists the campaign with status
scheduled. - Books two EventBridge schedules — one to fire
apply-campaignat start time, one to firerevert-campaignat end time. - Returns you to the Campaigns list with a banner confirming “Campaign scheduled.”
You can edit anything except start/end times while status is
scheduled. To change a time, cancel the campaign and create a new
one (the cancel flow runs an immediate revert so nothing gets stuck).
What happens at start time
- Apply Lambda wakes up at the second you specified.
- It reads your current price for every variant in the campaign (the baseline).
- It computes the discounted price and pushes the change to Shopify in batches (up to 50 variants per GraphQL call).
- The storefront updates within seconds. Customers see the new price.
- The campaign row flips to
active.
What happens at end time
- Revert Lambda wakes up at end time.
- It looks up the baseline from the snapshot table and writes it back to Shopify.
- If you manually edited a price mid-campaign, Campaignly noticed
(via Shopify’s
products/updatewebhook) and respects your edit on revert — your value is what comes back, not the pre-campaign one. - The campaign row flips to
completed.
Common follow-ups
- Cancel a campaign mid-flight — open the campaign and click Cancel campaign. Prices revert within about a minute.
- See what changed — the Audit log screen lists every variant Campaignly touched, with timestamps and the price values before / after.
- Re-run the same campaign — open the completed campaign and click Duplicate. Pre-fills everything except the times.
Stuck? Try Troubleshooting first, or email support.