GMS × Sparkart
Internal · Process Walkthrough

Holiday Sale Automation

How a holiday sale gets set up on a Global store today, and where a tool could do the work.

Manual today A tool could do this Depends on the app vendor TrackedStatus shown automatically on the sale dashboard
Sale planned
Asana project created
Automate
Asana · Google Sheet
Get sale details from the Asana parent task
Sale link, bucket links, start and end date/time, phrasing
Tracked
Could do: flag missing details and nudge the store manager in Asana, instead of us chasing

Starting with BFCM, a sale dashboard replaces the tracker sheet: sale details plus live asset, email and ad status, and the buttons for our review steps.

Discount setup
Runs at the same time as marketing
Sitewide or collection-based?
Sitewide
Use the store’s sitewide sale collection (already excludes media, POD, pre-sale)
Collection-based
“Up to __% off.” Store manager fills a sub-collection per 10% bucket
↻ Repeat per bucket
Vendor?
GetSale
Name the discount
SALE NAME - __% OFF
Vendor?
GetSale
Choose the collection
Vendor?
GetSale
Choose the discount depth
Vendor?
GetSale
Schedule start and end
Depends: no public API. It lists Shopify Flow support, so ask the developer (506) if Flow can create a sale. If not, our own tool could set sale and compare-at prices directly, the same thing GetSale does.

Save, then duplicate for the next bucket and swap the collection and depth. Discounts are never combined.

Why GetSale: strikethrough pricing sitewide, and real price changes for post-sale analysis. Shopify discounts only apply at cart.

Marketing
Runs at the same time as discounts
Global assigns asset task to?
Global’s creative team
Sparkart
Kevin assigns to Cade
Asana
Art folder shared
Public Dropbox or G-Drive link
Global
Artist management approves
Tracked
Store banners
Automate
Shopify
Duplicate the current theme
Could do: Shopify’s API can copy a theme. Needs theme write access, so test on one store first.
Automate
Shopify
Swap desktop and mobile banners
Link to the sale collection. Save, don’t publish.
Could do: pull the Desktop and Mobile files from the art folder (the campaign bot already does this for email heroes) and set the link from the sale details
Vendor?
Theme On Time
Schedule publish and revert
Depends: no API. Our own tool could replace it: publish the sale theme at start, the old theme at end.
Paid ads
Automate
Paid Ads Sheet
Request the ad
Copy comes from Global Marketing in Asana
Tracked
Could do: once assets are approved, fill the request row from the Asana Marketing task (store, copy, art link, dates)
Speakeasy · Meta
Speakeasy builds the ad
Sends us a preview link
Automate
Sparkart
Preview lands in front of us
Could do: send new preview links to the sale dashboard (with a Slack ping), not to the client
We clear it for the client?

No: edits go back to Speakeasy

Automate
Asana
Post preview link for approval
Could do: once we mark it cleared, post the link in Asana
Automate
Paid Ads Sheet
Mark approved
Speakeasy then schedules the ad
Could do: flip the ads sheet when Asana is approved (the tracker already reads both)
Sale launches
Automate
QA · Incognito
Launch check
  • Everything in the sale shows strikethrough pricing
  • Banners are live and linked correctly
Could do: check every product in the sale collection for a sale price, and the live theme’s banner link, then flag misses on the dashboard and in Slack

Usual miss: product has the sale tag but isn’t in the sub-collection that drives the discount.

Sale ends
Automate
QA · Incognito
End check
  • All discounts have stopped
  • Banners have reverted
Could do: same check in reverse
Proposed

Sale dashboard: mission control

One page per sale that replaces the tracker sheet. It reads every source live, shows where each store stands, and puts anything that needs us at the top with a button to act on it.

Sale dashboardConcept · example data

BFCM 2026 · Setup

Sale starts in 12 days
Details complete
18 / 26
Discounts scheduled
11 / 26
Banners scheduled
7 / 26
Ads live or approved
4 / 13
Needs us 4
DETH
Meta ad preview ready from Speakeasy
Not visible to Global until cleared
Send backClear for client
MAST
Banner theme built, unpublished
Desktop and mobile art pulled from the approved folder
Preview themeApprove schedule
STPI
Missing bucket links and end time
Store manager nudged in Asana 2 days ago
Nudge again
DETH
QA: 3 products in the sale show no sale price
Tagged for the sale but not in a bucket collection
See products
Every store
StoreDetailsDiscountsBannersEmailAdQA
DETHCompleteScheduledScheduledSent/ScheduledNeeds our review3 misses
MASTCompleteScheduledNeeds our reviewPreview ProvidedOut for ApprovalAfter launch
STPIMissing 2Waiting on detailsWaiting on assetWaiting On AssetNot StartedAfter launch

Statuses use the tracker’s existing vocabulary. Store rows and numbers are illustrative.

Reads live

  • Asana: sale details, asset and ad approvals
  • Klaviyo: email drafts and sends
  • Paid ads sheet: ad status and previews
  • Shopify: sale prices, banner themes, QA checks

Does the work

  • Nudges store managers for missing details
  • Builds banner themes and fills ad requests
  • Queues ad previews and themes for our review
  • Runs QA at launch and end, flags misses

Who sees what

  • Sparkart: everything, plus the action buttons
  • Global: sale details and status, via emailed login code
  • Ad previews reach Global only after we clear them
  • Starts with BFCM, no tracker sheet in parallel