{"id":1337,"date":"2026-06-05T13:00:00","date_gmt":"2026-06-05T18:00:00","guid":{"rendered":"https:\/\/tolinku.com\/blog\/?p=1337"},"modified":"2026-03-07T03:35:07","modified_gmt":"2026-03-07T08:35:07","slug":"banner-scheduling-campaigns","status":"publish","type":"post","link":"https:\/\/tolinku.com\/blog\/banner-scheduling-campaigns\/","title":{"rendered":"Scheduling Smart Banners for Campaign Launches"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Smart banners are most effective when they are timed to match your marketing campaigns. A banner promoting your Black Friday sale should appear on November 28, not November 15. A banner for a product launch should go live when the product is available, not a week early. And a seasonal campaign banner should disappear automatically when the campaign ends, not linger until someone remembers to remove it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Banner scheduling lets you set start dates, end dates, and time-based rules so banners appear and disappear automatically. This guide covers scheduling patterns, campaign coordination, and implementation approaches. For the smart banner setup, see <a href=\"https:\/\/tolinku.com\/features\/smart-banners\">Tolinku&#39;s smart banner feature<\/a>. For the complete smart banners guide, see the <a href=\"https:\/\/tolinku.com\/blog\/smart-app-banners-complete-guide\/\">smart banners overview<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><img decoding=\"async\" src=\"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/screenshot-banners-list-1772822961077.png\" alt=\"Tolinku smart banners list with status, segment, and scheduling info\">\n<em>The smart banners list showing banner titles, status toggles, segments, and action buttons.<\/em><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Schedule Banners<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Campaign Alignment<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Your website traffic peaks at different times depending on the campaign:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Product launches:<\/strong> Traffic spikes on launch day. The banner should be live and ready.<\/li>\n<li><strong>Sales and promotions:<\/strong> The banner should match the sale period exactly. Showing a &quot;20% off&quot; banner after the sale ends erodes trust.<\/li>\n<li><strong>Seasonal campaigns:<\/strong> Holiday promotions, back-to-school, summer sales. Banners rotate with the season.<\/li>\n<li><strong>Event-driven:<\/strong> Conference announcements, sports events, live streams. Banners are relevant for a short window.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Avoiding Banner Fatigue<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If the same banner runs indefinitely, users stop noticing it. Scheduled rotation keeps the messaging fresh:<\/p>\n\n\n\n<pre><code>Week 1: &quot;New: Try our mobile app for faster checkout&quot;\nWeek 2: &quot;Summer sale: 30% off in the app&quot;\nWeek 3: &quot;Rate us 5 stars and get free shipping&quot;\nWeek 4: Rotate back to Week 1 or pause\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Reducing Manual Work<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Without scheduling, someone has to remember to enable the banner at the right time and disable it when the campaign ends. Scheduling automates this, reducing the risk of stale banners and last-minute scrambles.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Scheduling Patterns<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Pattern 1: Fixed Start and End Dates<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The simplest pattern. The banner appears on a specific date and disappears on another:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">const bannerConfig = {\n  message: &quot;Summer Sale: 30% off everything in the app!&quot;,\n  schedule: {\n    startDate: &quot;2026-06-15T00:00:00Z&quot;,\n    endDate: &quot;2026-07-15T23:59:59Z&quot;,\n  },\n  cta: &quot;Shop Now&quot;,\n  deepLink: &quot;\/sale\/summer-2026&quot;,\n};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases: seasonal sales, limited-time promotions, event tie-ins.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pattern 2: Recurring Schedule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The banner appears at specific times on a recurring basis:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">const bannerConfig = {\n  message: &quot;Happy Hour: Free delivery in the app, 4-6pm daily!&quot;,\n  schedule: {\n    recurring: true,\n    days: [&quot;monday&quot;, &quot;tuesday&quot;, &quot;wednesday&quot;, &quot;thursday&quot;, &quot;friday&quot;],\n    startTime: &quot;16:00&quot;,\n    endTime: &quot;18:00&quot;,\n    timezone: &quot;America\/New_York&quot;,\n  },\n  cta: &quot;Order Now&quot;,\n  deepLink: &quot;\/menu&quot;,\n};\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases: daily promotions (lunch specials, happy hours), weekend-only banners, weekday commuter offers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Pattern 3: Launch Countdown<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Show a countdown banner before a product launch, then switch to the launch banner:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Phase 1: Countdown banner (shows until launch)\nconst countdownBanner = {\n  message: &quot;New product drops in {countdown}!&quot;,\n  schedule: {\n    startDate: &quot;2026-06-01T00:00:00Z&quot;,\n    endDate: &quot;2026-06-15T09:00:00Z&quot;,  \/\/ Ends when launch banner starts\n  },\n  cta: &quot;Get Notified&quot;,\n  deepLink: &quot;\/products\/upcoming&quot;,\n};\n\n\/\/ Phase 2: Launch banner (shows after launch)\nconst launchBanner = {\n  message: &quot;It&#39;s here! Shop the new collection in our app.&quot;,\n  schedule: {\n    startDate: &quot;2026-06-15T09:00:00Z&quot;,\n    endDate: &quot;2026-06-30T23:59:59Z&quot;,\n  },\n  cta: &quot;Shop Now&quot;,\n  deepLink: &quot;\/products\/new-collection&quot;,\n};\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Pattern 4: A\/B Test Schedule<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Run different banners for different time periods to test messaging:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">const variants = [\n  {\n    id: &quot;variant-a&quot;,\n    message: &quot;Get the app for exclusive deals&quot;,\n    schedule: { startDate: &quot;2026-06-01&quot;, endDate: &quot;2026-06-08&quot; },\n  },\n  {\n    id: &quot;variant-b&quot;,\n    message: &quot;Shop faster with our mobile app&quot;,\n    schedule: { startDate: &quot;2026-06-08&quot;, endDate: &quot;2026-06-15&quot; },\n  },\n];\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Compare click-through rates and install rates between the time periods.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementation Approaches<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Client-Side Scheduling<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The banner script checks the current time against the schedule before rendering:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">function shouldShowBanner(config) {\n  const now = new Date();\n\n  if (config.schedule) {\n    const { startDate, endDate, recurring, days, startTime, endTime, timezone } = config.schedule;\n\n    \/\/ Fixed date range\n    if (startDate &amp;&amp; new Date(startDate) &gt; now) return false;\n    if (endDate &amp;&amp; new Date(endDate) &lt; now) return false;\n\n    \/\/ Recurring schedule\n    if (recurring) {\n      const localTime = now.toLocaleString(&#39;en-US&#39;, { timeZone: timezone });\n      const localDate = new Date(localTime);\n      const dayName = localDate.toLocaleDateString(&#39;en-US&#39;, { weekday: &#39;long&#39; }).toLowerCase();\n\n      if (days &amp;&amp; !days.includes(dayName)) return false;\n\n      const currentTime = localDate.toTimeString().slice(0, 5); \/\/ &quot;HH:MM&quot;\n      if (startTime &amp;&amp; currentTime &lt; startTime) return false;\n      if (endTime &amp;&amp; currentTime &gt; endTime) return false;\n    }\n  }\n\n  return true;\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pros:<\/strong> No server calls needed. Works with static configuration.\n<strong>Cons:<\/strong> Clock-dependent (user&#39;s device clock may be wrong). Configuration changes require a code deploy.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Server-Side Scheduling<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The server decides which banner to serve based on the current time:<\/p>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ API endpoint: GET \/api\/banners\/active\napp.get(&#39;\/api\/banners\/active&#39;, (req, res) =&gt; {\n  const now = new Date();\n  const activeBanners = banners.filter(b =&gt; {\n    if (b.schedule.startDate &amp;&amp; new Date(b.schedule.startDate) &gt; now) return false;\n    if (b.schedule.endDate &amp;&amp; new Date(b.schedule.endDate) &lt; now) return false;\n    return true;\n  });\n\n  \/\/ Return the highest-priority active banner\n  const banner = activeBanners.sort((a, b) =&gt; b.priority - a.priority)[0];\n  res.json(banner || null);\n});\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pros:<\/strong> Centralized control. No code deploy needed to change schedules. Server clock is authoritative.\n<strong>Cons:<\/strong> Requires an API call on each page load (mitigated with caching).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Dashboard-Based Scheduling<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Most smart banner platforms provide a UI for scheduling:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Create the banner content and design.<\/li>\n<li>Set the start date and time.<\/li>\n<li>Set the end date and time (optional; leave blank for indefinite).<\/li>\n<li>Set targeting rules (which pages, which users).<\/li>\n<li>Publish. The banner appears and disappears automatically.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">This is the approach used by <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/smart-banners\/targeting-and-scheduling\/\">Tolinku&#39;s smart banners<\/a>. No code changes needed for scheduling; everything is configured in the dashboard.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Campaign Coordination<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Aligning with Email Campaigns<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When you send a promotional email, schedule the smart banner to go live at the same time. The email drives traffic to your website; the banner converts that traffic to app installs:<\/p>\n\n\n\n<pre><code>Email sends: June 15, 9:00 AM\nBanner starts: June 15, 8:55 AM (5 minutes buffer)\nBanner message matches email subject: &quot;Summer Sale: 30% off&quot;\nBanner deep link: \/sale\/summer-2026 (same destination as email CTA)\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">Aligning with Paid Ads<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">If you are running paid ads that drive traffic to your website (not directly to the app store), the smart banner captures users who are already on your site:<\/p>\n\n\n\n<pre><code>Ad campaign: June 1-30\nLanding page: yourapp.com\/summer-sale\nSmart banner on that page: &quot;Get 30% off in the app&quot; (scheduled June 1-30)\nBanner deep link: \/sale\/summer-2026\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The ad drives the traffic; the banner converts it to app installs with deferred deep linking.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Multi-Banner Campaigns<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">For campaigns with multiple phases:<\/p>\n\n\n\n<pre><code>Phase 1 (Teaser): June 1-14\n  Banner: &quot;Something big is coming June 15&quot;\n\nPhase 2 (Launch): June 15-30\n  Banner: &quot;Summer Sale is live! 30% off in the app&quot;\n\nPhase 3 (Last Chance): July 1-7\n  Banner: &quot;Last chance: Summer Sale ends July 7&quot;\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Each phase has a different banner with different messaging, all scheduled in advance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Timezone Handling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Scheduling across timezones requires care:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Global campaigns:<\/strong> Schedule in UTC. The banner goes live at the same moment worldwide.<\/li>\n<li><strong>Regional campaigns:<\/strong> Schedule in the target timezone. A US-focused sale should start at midnight EST, not midnight UTC.<\/li>\n<li><strong>User-local scheduling:<\/strong> Use the visitor&#39;s detected timezone to show the banner at the right local time. This requires client-side scheduling or server-side timezone detection.<\/li>\n<\/ul>\n\n\n\n<pre><code class=\"language-javascript\">\/\/ Client-side: check against user&#39;s local time\nfunction isWithinSchedule(startTime, endTime) {\n  const now = new Date();\n  const hours = now.getHours();\n  const minutes = now.getMinutes();\n  const currentTime = `${hours.toString().padStart(2, &#39;0&#39;)}:${minutes.toString().padStart(2, &#39;0&#39;)}`;\n  return currentTime &gt;= startTime &amp;&amp; currentTime &lt;= endTime;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tolinku Banner Scheduling<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/tolinku.com\/features\/smart-banners\">Tolinku&#39;s smart banners<\/a> support scheduling through the dashboard. Set start and end dates for each banner, configure targeting rules, and the banner appears and disappears automatically. No code changes needed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For banner display behavior, see <a href=\"https:\/\/tolinku.com\/blog\/banner-dismiss-behavior\/\">banner dismiss behavior<\/a>. For the complete smart banners setup, see the <a href=\"https:\/\/tolinku.com\/blog\/smart-app-banners-complete-guide\/\">smart banners guide<\/a>. For banner targeting and scheduling configuration, see the <a href=\"https:\/\/tolinku.com\/docs\/user-guide\/smart-banners\/targeting-and-scheduling\/\">Tolinku documentation<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schedule smart banners for product launches, sales, and seasonal campaigns. Control start dates, end dates, time-based display rules, and campaign coordination.<\/p>\n","protected":false},"author":2,"featured_media":1336,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rank_math_title":"Scheduling Smart Banners for Campaign Launches","rank_math_description":"Schedule smart banners for product launches, sales, and seasonal campaigns. Control start dates, end dates, and time-based display rules.","rank_math_focus_keyword":"scheduling smart banners","rank_math_canonical_url":"","rank_math_facebook_title":"","rank_math_facebook_description":"","rank_math_facebook_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-banner-scheduling-campaigns.png","rank_math_facebook_image_id":"","rank_math_twitter_title":"","rank_math_twitter_description":"","rank_math_twitter_image":"https:\/\/tolinku.com\/blog\/wp-content\/uploads\/2026\/03\/og-banner-scheduling-campaigns.png","footnotes":""},"categories":[16],"tags":[38,39,110,69,334,40,26,41],"class_list":["post-1337","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-marketing","tag-campaign-tracking","tag-conversion","tag-marketing","tag-mobile-development","tag-scheduling","tag-smart-banners","tag-user-acquisition","tag-web-to-app"],"_links":{"self":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1337","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/comments?post=1337"}],"version-history":[{"count":3,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1337\/revisions"}],"predecessor-version":[{"id":2284,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/posts\/1337\/revisions\/2284"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media\/1336"}],"wp:attachment":[{"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/media?parent=1337"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/categories?post=1337"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tolinku.com\/blog\/wp-json\/wp\/v2\/tags?post=1337"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}