PageSourceSearch

https://kickofflabs.com/campaign-types/

html kickofflabs.com collected 2026-09-24 15:22:53 UTC 57,811 bytes, 1,394 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta charset="UTF-8">
5<meta name="viewport" content="width=device-width, initial-scale=1.0">
6<meta http-equiv="X-UA-Compatible" content="ie=edge">
7
8<link rel="shortcut icon" href="/favicon.ico">
9<title>
10  
11  Giveaway, Waitlist & Rewards Campaign Types | KickoffLabs
12  </title>
13  
14    <!-- Begin Jekyll SEO tag v2.8.0 -->
15<meta name="generator" content="Jekyll v4.3.4" />
16<meta property="og:title" content="Giveaway, Waitlist &amp; Rewards Campaign Types" />
17<meta property="og:locale" content="en_US" />
18<meta name="description" content="Every campaign KickoffLabs runs, grouped the way you pick one — giveaways and contests, waitlists, milestone rewards, lead magnets, and events." />
19<meta property="og:description" content="Every campaign KickoffLabs runs, grouped the way you pick one — giveaways and contests, waitlists, milestone rewards, lead magnets, and events." />
20<link rel="canonical" href="https://kickofflabs.com/campaign-types/" />
21<meta property="og:url" content="https://kickofflabs.com/campaign-types/" />
22<meta property="og:site_name" content="KickoffLabs" />
23<meta property="og:image" content="https://kickofflabs.com/assets/images/social/create-giveaway-minutes.webp" />
24<meta property="og:type" content="website" />
25<meta name="twitter:card" content="summary_large_image" />
26<meta property="twitter:image" content="https://kickofflabs.com/assets/images/social/create-giveaway-minutes.webp" />
27<meta property="twitter:title" content="Giveaway, Waitlist &amp; Rewards Campaign Types" />
28<meta name="twitter:site" content="@kickofflabs" />
29<script type="application/ld+json">
30{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-07-26T05:36:32+00:00","description":"Every campaign KickoffLabs runs, grouped the way you pick one — giveaways and contests, waitlists, milestone rewards, lead magnets, and events.","headline":"Giveaway, Waitlist &amp; Rewards Campaign Types","image":"https://kickofflabs.com/assets/images/social/create-giveaway-minutes.webp","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://kickofflabs.com/assets/images/logo_on_light_473x102.webp"}},"url":"https://kickofflabs.com/campaign-types/"}</script>
30
31<!-- End Jekyll SEO tag -->
32
33  
34
35
36
37
38
39<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
40<link rel="preconnect" href="https://kit.fontawesome.com" crossorigin>
41<link rel="preconnect" href="https://challenges.cloudflare.com" crossorigin>
42<link rel="preconnect" href="https://cdnjs.cloudflare.com">
43<link rel="preconnect" href="https://fonts.googleapis.com">
44<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
45<link rel="preconnect" href="https://usefathom.com">
46<link rel="preload" href="/assets/css/main.css?v=1787423337" as="style">
47<link rel="stylesheet" href="/assets/css/main.css?v=1787423337">
48<script>
49// A/B Test: Dark Hero (single-branch)
50(function() {
51  var key = 'ab_dark_hero_v1';
52  var urlParam = new URLSearchParams(window.location.search).get('ab');
53  var v;
54  if (urlParam === 'exp' || urlParam === 'ctrl') {
55    v = urlParam;
56    localStorage.setItem(key, v);
57  } else {
58    v = localStorage.getItem(key);
59    if (!v) {
60      v = 'ctrl';
61      localStorage.setItem(key, v);
62    }
63  }
64  document.documentElement.setAttribute('data-ab', v);
65
66  function shouldLoadHeroTerrain() {
67    var mobileUserAgent = /Android|iPhone|iPad|iPod|IEMobile|Mobile/i.test(navigator.userAgent);
68    return v === 'exp' &&
69      !mobileUserAgent &&
70      !window.matchMedia('(prefers-reduced-motion: reduce)').matches &&
71      !window.matchMedia('(max-width: 767px)').matches &&
72      !window.matchMedia('(pointer: coarse)').matches;
73  }
74
75  function loadHeroTerrain() {
76    var s = document.createElement('script');
77    s.src = '/assets/js/hero-terrain.js';
78    s.defer = true;
79    document.head.appendChild(s);
80  }
81
82  window.addEventListener('load', function() {
83    if (typeof fathom !== 'undefined') {
84      fathom.trackEvent('ab_dark_hero_v1_' + v);
85    }
86    if (shouldLoadHeroTerrain()) {
87      if ('requestIdleCallback' in window) {
88        window.requestIdleCallback(loadHeroTerrain, { timeout: 3000 });
89      } else {
90        window.setTimeout(loadHeroTerrain, 1500);
91      }
92    }
93  });
94})();
95</script>
95
96
97    <link type="application/atom+xml" rel="alternate" href="https://kickofflabs.com/feed.xml" title="KickoffLabs" />
98    <!-- Organization Schema - Include in _layouts/default.html -->
99<script type="application/ld+json">
100{
101  "@context": "https://schema.org",
102  "@type": "Organization",
103  "name": "KickoffLabs",
104  "url": "https://kickofflabs.com",
105  "logo": "https://kickofflabs.com/assets/images/logo_on_light_473x102.webp",
106  "description": "Word of mouth marketing made easy with viral giveaways, referral programs, or product launches designed to grow your business.",
107  "foundingDate": "2011",
108  "sameAs": [
109    "https://www.facebook.com/kickofflabs",
110    "https://twitter.com/kickofflabs",
111    "https://www.threads.net/@usekickofflabs"
112  ],
113  "contactPoint": {
114    "@type": "ContactPoint",
115    "contactType": "customer support",
116    "url": "https://support.kickofflabs.com",
117    "email": "[email protected]"
118  },
119  "founders": [
120    {
121      "@type": "Person",
122      "name": "Josh Ledgard",
123      "url": "https://twitter.com/joshaledgard"
124    },
125    {
126      "@type": "Person",
127      "name": "Scott Watermasysk",
128      "url": "https://twitter.com/scottw"
129    }
130  ]
131}
132</script>
132
133
134    
135    
136    
137    
138  <!-- Facebook Pixel Code -->
139<script>
vendor: 417 bytes, lines 139-148
139
140  !function(f,b,e,v,n,t,s)
141  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
142  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
143  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
144  n.queue=[];t=b.createElement(e);t.async=!0;
145  t.src=v;s=b.getElementsByTagName(e)[0];
146  s.parentNode.insertBefore(t,s)}(window, document,'script',
147  'https://connect.facebook.net/en_US/fbevents.js');
148  fbq('init', '
148277430412608891
vendor: 32 bytes, lines 148-149
148');
149  fbq('track', 'PageView');
150</script>
150
151<noscript><img height="1" width="1"  alt="Facebook" style="display:none"
152  src="https://www.facebook.com/tr?id=277430412608891&ev=PageView&noscript=1"
153/></noscript>
154<!-- End Facebook Pixel Code --><meta name="facebook-domain-verification" content="nle84tew2g6isbvihvnh3uxjdmz0ta" /><!-- Fathom - beautiful, simple website analytics -->
155                
155<script src="https://cdn.usefathom.com/script.js" data-site="SWRTKYWT" defer></script>
155
156              <!-- / Fathom --><!-- Global site tag (gtag.js) - Google Ads: 992175653 -->
vendor: 64 bytes, lines 156-157
156
157<script async src="https://www.googletagmanager.com/gtag/js?id=
157AW-992175653
vendor: 12 bytes, line 157
157"></script>
158<script>
159  
vendor: 134 bytes, lines 159-163
159window.dataLayer = window.dataLayer || [];
160  function gtag(){dataLayer.push(arguments);}
161  gtag('js', new Date());
162
163  gtag('config', '
163AW-992175653
vendor: 40 bytes, line 163
163',{'allow_enhanced_conversions':true});
164</script>
164<meta name="google-site-verification" content="RBwetj_Er8Q2gftTNbu-WLErGGJKHfATrPx-bNHIUu8" /></head>
165  <body>
166    <nav id="primary-top-nav" class="navbar navbar-expand-lg navbar-light bg-light fixed-top" role="navigation">
167
168	<div class="container">
169		<button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarContent"
170			aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle topbar navigation">
171			<span class="icon-bar"></span>
172			<span class="icon-bar"></span>
173			<span class="icon-bar"></span>
174		</button>
175		<a class="navbar-brand" href="/" rel="home">
176			<img src="/assets/images/logo_on_light_473x102.webp" width="146" alt="KickoffLabs">
177		</a>
178
179		<button class=" d-block d-lg-none btn btn-pink btn-pill btn-md  btn-free" href="https://app.kickofflabs.com/signup/free"
180			data-bs-toggle="modal" style="padding:.75rem 1rem;min-height:48px" data-bs-target="#signup-free">Start Free!</button>
181
182
183
184
185
186		<div class="collapse navbar-collapse" id="navbarContent">
187			<ul class="navbar-nav me-auto">
188
189				<li id="template-menu-item" class="nav-item dropdown ">
190					<a class="nav-link dropdown-toggle" href="#" id="templatesTopNav" role="button" data-bs-toggle="dropdown"
191						aria-haspopup="true" aria-expanded="false">Campaign Types</a>
192					<div id="templates-dropdown" class="dropdown-menu" aria-labelledby="templateTopNav">
193						<div class="row">
194							<div class="col-12">
195								
196								<a class="what dropdown-item" href="/campaign-types/"><strong>Overview</strong> - See All Types</a>
197								
198								
199									
200								<a class="what dropdown-item ct-nav-pillar" href="/campaign-types/giveaways/"><strong>Giveaways &amp; Contests</strong></a>
201									
202								
203									
204								<a class="what dropdown-item ct-nav-child" href="/campaign-types/leaderboard-giveaways/">
204Leaderboard Giveaway</a>
205									
206								
207									
208								<a class="what dropdown-item ct-nav-child" href="/campaign-types/sweepstakes/">Bonus-Entry Sweepstakes</a>
209									
210								
211									
212								<a class="what dropdown-item ct-nav-child" href="/campaign-types/purchase-based-giveaways/">Shopify / Purchase Giveaways</a>
213									
214								
215									
216								<a class="what dropdown-item ct-nav-pillar" href="/campaign-types/waitlist/"><strong>Waitlists</strong></a>
217									
218								
219									
220								<a class="what dropdown-item ct-nav-child" href="/campaign-types/referral-waitlist/">Referral Waitlist</a>
221									
222								
223									
224								<a class="what dropdown-item ct-nav-child" href="/campaign-types/waitlist-with-giveaway/">Waitlist with a Giveaway</a>
225									
226								
227									
228								<a class="what dropdown-item ct-nav-child" href="/campaign-types/waitlist-with-leaderboard/">Waitlist Leaderboard</a>
229									
230								
231									
232								<a class="what dropdown-item ct-nav-pillar" href="/campaign-types/reward-levels/"><strong>Milestone Rewards</strong></a>
233									
234								
235									
236								<a class="what dropdown-item ct-nav-child" href="/campaign-types/referral-reward-programs/">Referral Reward Programs</a>
237									
238								
239									
240								<a class="what dropdown-item ct-nav-child" href="/campaign-types/newsletter-referral/">Newsletter Referrals</a>
241									
242								
243									
244								<a class="what dropdown-item ct-nav-pillar" href="/campaign-types/email-opt-in/"><strong>Lead Magnets</strong></a>
245									
246								
247									
248								<a class="what dropdown-item ct-nav-pillar" href="/campaign-types/event-promotion/"><strong>Event Promotion</strong></a>
249									
250								
251
252							</div>
253						</div>
254	
255				
256				
257		
258					</div>
259				</li>
260
261				<li id="what-you-can-do" class="nav-item dropdown">
262					<a class="nav-link dropdown-toggle" href="#" id="whatYouCanDo" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">What You Can Do</a>
263					<div id="what-dropdown" class="dropdown-menu" aria-labelledby="whatYouCanDo">
264						<div class="row">
265							<div class="col-12 col-md-4 how-it-works-wrapper">
266								
267								<span class="what headline">Learn More</span>
268									<a class="what dropdown-item " href="/why-kickofflabs/">Why KickoffLabs</a>
269									<a class="what dropdown-item " href="/how-it-works/">How it works</a>
270									<a class="what dropdown-item" href="/why-kickofflabs/kickofflabs-done-for-you-services/">Done For You Services</a>
271									<a class="what dropdown-item" href="/why-kickofflabs/enterprise-giveaways/">Enterprise Scale Giveaways</a>
272									<a class="what dropdown-item" href="/why-kickofflabs/digital-agencies/">Manage Client Giveaways</a>
273
274							</div>
275							<div class="col-12 col-md-8 how-it-works-wrapper">
276								<span class="what headline">Product Features</span>
277								<div class="row">
278									<div class="col-12 col-md-6">
279										
280										<a class="what dropdown-item" href="/landing-page-templates/">Landing Pages</a>
281										<a class="what dropdown-item " href="/features/embeds/">Embedded Campaigns</a>
282										<a class="what dropdown-item " href="/features/popups/">Popups</a>
283
284										<a class="what dropdown-item " href="/features/anyform/">AnyForm</a>
285										<a class="what dropdown-item " href="/features/email/">Email</a>
286										<a class="what dropdown-item " href="/features/custom-domains/">Custom Contest Domains</a>
287
288										<a class="what dropdown-item " href="/features/leaderboard/">Leaderboards</a>
289										<a class="what dropdown-item " href="/features/teamaccounts/">Team Accounts</a>
290										<a class="what dropdown-item " href="/features/instant-signup/">Instant Signup</a>
291										<a class="what dropdown-item " href="/features/referral-tracking/">Referral Tracking</a>
292
293
294
295										
296									</div>
297
298									<div class="col-12 col-md-6">			
299										<a class="what dropdown-item" href="/features/sms/">SMS</a>
300										<a class="what dropdown-item" href="/integrations/">Integrations</a>
301										<a class="what dropdown-item" href="/features/shopify/">Shopify</a>
302										<a class="what dropdown-item " href="/features/contest-landing-page-builder/">
302Contest Page Builder</a>
303										<a class="what dropdown-item " href="/features/contest-actions/">Contest Actions</a>
304										<a class="what dropdown-item " href="/features/nudge-bar/">Nudge Bar</a>
305
306										<a class="what dropdown-item " href="/features/rewards/">Rewards</a>
307										<a class="what dropdown-item " href="/features/contest-fraud-detection/">Contest Fraud Detection</a>
308										<a class="what dropdown-item " href="/features/reports/">Reports</a>
309										<a class="what dropdown-item " href="/features/pick-a-winner/">Pick a Winner</a>
310
311
312									
313									</div>
314								</div>
315							</div>
316
317
318
319							<!-- <div class="col-md-4">
320								<a class="what headline">Manage Leads</a>
321								<a class="what dropdown-item" href="/#manage-leads">Integrations</a>
322								<a class="what dropdown-item" href="/#manage-leads">Reporting</a>
323							</div> -->
324						</div>
325					</div>
326				</li>
327
328				<li class="nav-item">
329					<a class="nav-link" href="/pricing/">Pricing</a>
330				</li>
331
332				<li id="resources-menu-item" class="nav-item dropdown ">
333					<a class="nav-link dropdown-toggle" href="#" id="resourcesTopNav" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Resources</a>
334					<div id="resources-dropdown" class="dropdown-menu" aria-labelledby="resourcesTopNav">
335						<div class="row">
336							<div class="col-12 col-md-4">
337							<a class="resource dropdown-item " href="/guides/">
338								<span class="headline">Marketing Guides</span>
339								<span class="subtitle">Useful guides, videos, downloads, and best practices.</span>
340							</a>
341							</div>
342							<div class="col-12 col-md-4">
343              <a class="resource dropdown-item " href="/podcast/">
344								<span class="headline">On Growth Podcast</span>
345								<span class="subtitle">Grow with us by learning from our stories and customer interviews.</span>
346							</a>
347							</div>
348							<div class="col-12 col-md-4">
349              <a class="resource dropdown-item  " href="/blog/">
350								<span class="headline">Blog</span>
351								<span class="subtitle">Insights for marketing your campaign like a pro.</span>
352							</a>
353
354							</div>
355						</div>
356						<div class="row">
357							<div class="col-12 col-md-4">
358								<a class="resource dropdown-item " href="https://support.kickofflabs.com/">
359									<span class="headline">Support &amp; Documentation</span>
360									<span class="subtitle">Find helpful documentation for the ins and outs of creating a viral campaign.</span>
361								</a>
362							
363							</div>
364							<div class="col-12 col-md-4">
365              <a class="resource dropdown-item " href="/showcase/">
366                <span class="headline">Customer Showcase</span>
367                <span class="subtitle">
367See how other companies like you ran great campaigns.</span>
368              </a>
369							</div>
370							<div class="col-12 col-md-4">
371              <a class="resource dropdown-item " href="/tools/">
372                <span class="headline">Free Marketing Tools</span>
373                <span class="subtitle">Prompt builders, graders, and launch planning helpers.</span>
374              </a>
375							</div>
376						</div>
377					</div>
378				</li>
379			</ul>
380
381			<div class="form-inline">
382				<a href="https://app.kickofflabs.com/login" class="btn btn-link login text-decoration-none">Log In</a>
383				<a class="btn btn-pink btn-pill btn-md btn-free" href="https://app.kickofflabs.com/signup/free" data-bs-toggle="modal" data-bs-target="#signup-free">Start Free!</a>
384			</div>
385		</div>
386	</div>
387</nav>
388
389    <div class="why-page off-white-bg medium-spacer">
390  <div id="hero" class="container hero">
391    <div class="row medium-spacer justify-content-between flex">
392      <div class="col-12 col-md-7">
393        <h1 class="serif-font">Pick the campaign type that matches your goal</h1>
394        <p>Every campaign below is a working template you can launch in minutes. Start with the group that matches what you want &mdash; <strong>a giveaway, a launch waitlist, a rewards program, a lead magnet, or an event</strong> &mdash; then pick the mechanic underneath it.</p>
395        <div class="small-spacer">
396          <p><a class="btn btn-teal btn-lg btn-pill" role="button" data-bs-toggle="modal"  href="https://app.kickofflabs.com/signup/free"  data-bs-target="#signup-free" >Start Free Today</a> <a style="margin-left:5px" href="mailto:[email protected]?subject=Questions%20about%20KickoffLabs%20campaign%20templates&amp;body=Hi%20KickoffLabs%20team%2C%0A%0AI%27d%20like%20to%20learn%20more%20about%20which%20KickoffLabs%20campaign%20template%20is%20right%20for%20my%20giveaway%2C%20waitlist%2C%20referral%20program%2C%20or%20product%20launch.%20Could%20your%20pre-sales%2Fsupport%20team%20help%20answer%20a%20few%20questions%3F">Learn more</a></p>
397        </div>
398      </div>
399      <div class="col-12 col-md-5 huge-spacer-top vertical-align small-spacer-top">
400        <img class="img-fluid" src="/assets/images/boy-take-off.webp" alt="Launch your campaign using these giveaway resources.">
401      </div>
402    </div>
403  </div>
404</div>
405
406
407
408
409
410
411  
412  
413  
414
415<div class="off-white-bg">
416  <div class="container big-spacer-top campaign-types">
417
418    <div class="row unique-features-intro small-spacer-top medium-spacer-bottom justify-content-center">
419      <div class="col-12 col-md-8">
420        <h2 class="text-center serif-font bold">
421          Giveaways &amp; Contests
422        </h2>
423        <p class="text-center">Grow your email, SMS, and social audience with a giveaway where entrants earn extra chances to win by referring friends and taking the actions you choose.</p>
424        <div class="learn-more text-center">
425          <a class="" href="/campaign-types/giveaways/">Explore Giveaways &amp; Contests</a>
426          <a class="" style="margin-left:12px" href="https://demos.kickofflabs.com/bonus-entry-signup" target="_blank" rel="noopener">Try one</a>
427        </div>
428      </div>
429    </div>
430
431    <div class="row text-center why-page medium-spacer-bottom">
432      
433      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
434        <div class="row">
435          <div class="col-10 offset-1">
436            <div class="campaign-visual gradient-bg-top right">
437              <a class="" href="/campaign-types/giveaways/">
438                
439                <img class="img-fluid" src="/assets/images/onboarding/bonus-entry-sweepstakes.webp" alt="Viral Giveaways campaign example" width="520" height="300" loading="lazy"></a>
440            </div>
441          </div>
442        </div>
443        <h3>Giveaways &amp; Contests</h3>
444        <p>A prize drawing or contest that spreads itself as entrants refer friends.</p>
445        <p><a class="" href="/campaign-types/giveaways/">Learn More</a></p>
446      </div>
447      
448      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
449        <div class="row">
450          <div class="col-10 offset-1">
451            <div class="campaign-visual gradient-bg-top right">
452              <a class="" href="/campaign-types/leaderboard-giveaways/">
453                
454                <img class="img-fluid" src="/assets/images/onboarding/leaderboard-chart.webp" alt="Leaderboard G
454iveaways campaign example" width="520" height="300" loading="lazy"></a>
455            </div>
456          </div>
457        </div>
458        <h3>Leaderboard Giveaway</h3>
459        <p>Participants move up the leaderboard as they earn points by referring friends or taking other social actions.</p>
460        <p><a class="" href="/campaign-types/leaderboard-giveaways/">Learn More</a></p>
461      </div>
462      
463      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
464        <div class="row">
465          <div class="col-10 offset-1">
466            <div class="campaign-visual gradient-bg-top right">
467              <a class="" href="/campaign-types/sweepstakes/">
468                
469                <img class="img-fluid" src="/assets/images/onboarding/ps5-bonus.webp" alt="Bonus Entry Giveaways campaign example" width="520" height="300" loading="lazy"></a>
470            </div>
471          </div>
472        </div>
473        <h3>Bonus-Entry Sweepstakes</h3>
474        <p>A giveaway drawing where participant odds improve as they earn points.</p>
475        <p><a class="" href="/campaign-types/sweepstakes/">Learn More</a></p>
476      </div>
477      
478      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
479        <div class="row">
480          <div class="col-10 offset-1">
481            <div class="campaign-visual gradient-bg-top right">
482              <a class="" href="/campaign-types/purchase-based-giveaways/">
483                
484                <img class="img-fluid" src="/assets/images/onboarding/shopping.webp" alt="Purchase Giveaways campaign example" width="520" height="300" loading="lazy"></a>
485            </div>
486          </div>
487        </div>
488        <h3>Shopify / Purchase Giveaways</h3>
489        <p>Purchases earn entries, so the giveaway drives revenue as well as leads.</p>
490        <p><a class="" href="/campaign-types/purchase-based-giveaways/">Learn More</a></p>
491      </div>
492      
493    </div>
494
495  </div>
496</div>
497
498  
499  
500  
501
502<div class="bg-purple">
503  <div class="container big-spacer-top campaign-types">
504
505    <div class="row unique-features-intro small-spacer-top medium-spacer-bottom justify-content-center">
506      <div class="col-12 col-md-8">
507        <h2 class="text-center serif-font bold text-white">
508          Waitlists
509        </h2>
510        <p class="text-center">Build buzz around your launch by encouraging leads to move up in line as they refer friends, share, and grow your audience without breaking your marketing budget.</p>
511        <div class="learn-more text-center">
512          <a class="text-link" href="/campaign-types/waitlist/">Explore Waitlists</a>
513          <a class="text-link" style="margin-left:12px" href="https://demos.kickofflabs.com/prelaunch-waitlist" target="_blank" rel="noopener">Try one</a>
514        </div>
515      </div>
516    </div>
517
518    <div class="row text-center why-page medium-spacer-bottom">
519      
520      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
521        <div class="row">
522          <div class="col-10 offset-1">
523            <div class="campaign-visual gradient-bg-top right">
524              <a class="text-link" href="/campaign-types/waitlist/">
525                
526                <img class="img-fluid" src="/assets/images/onboarding/waitlist-robinhood.webp" alt="Pre-launch Waitlists campaign example" width="520" height="300" loading="lazy"></a>
527            </div>
528          </div>
529        </div>
530        <h3 class="text-white">Waitlists</h3>
531        <p>Leads move up a launch waiting list by telling friends and taking actions!</p>
532        <p><a class="text-link" href="/campaign-types/waitlist/">Learn More</a></p>
533      </div>
534      
535      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
536        <div class="row">
537          <div class="col-10 offset-1">
538            <div class="campaign-visual gradient-bg-top right">
539              <a class="text-link" href="/campaign-types/referral-waitlist/">
540                
541                <img class="img-fluid" src="/assets/images/onboarding/just-referrals.webp" alt="Referral Waitlists campaign example" width="520" height="300" loading="lazy"></a>
542            </div>
543          </div>
544        </div>
545        <h3 class="text-white">Referral Waitlist</h3>
546        <p>Members skip the line by referring friends — the Robinhood launch mechanic.</p>
547        <p><a class="text-link" href="/campaign-types/referral-waitlist/">Learn More</a></p>
548      </div>
549      
550      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
551        <div class="row">
552          <div class="col-10 offset-1">
553            <div class="campaign-visual gradient-bg-top right">
554              <a class="text-link" href="/campaign-types/waitlist-with-giveaway/">
555                
556                <img class="img-fluid" src="/assets/images/onboarding/waitlist-giveaway.webp" alt="Waitlist with a Giveaway campaign example" width="520" height="300" loading="lazy"></a>
557            </div>
558          </div>
559        </div>
560        <h3 class="text-white">Waitlist with a Giveaway</h3>
561        <p>Leads move up in line AND earn entries to win a launch prize!</p>
562        <p><a class="text-link" href="/campaign-types/waitlist-with-giveaway/">Learn More</a></p>
563      </div>
564      
565      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
566        <div class="row">
567          <div class="col-10 offset-1">
568            <div class="campaign-visual gradient-bg-top right">
569              <a class="text-link" href="/campaign-types/waitlist-with-leaderboard/">
570                
571                <img class="img-fluid" src="/assets/images/onboarding/waitlist-leaderboard.webp" alt="Waitlist Leaderboard campaign example" width="520" height="300" loading="lazy"></a>
572            </div>
573          </div>
574        </div>
575        <h3 class="text-white">Waitlist Leaderboard</h3>
576        <p>Leads move up in line AND move up a prize leaderboard.</p>
577        <p><a class="text-link" href="/campaign-types/waitlist-with-leaderboard/">Learn More</a></p>
578      </div>
579      
580    </div>
581
582  </div>
583</div>
584
585  
586  
587  
588
589<div class="off-white-bg">
590  <div class="container big-spacer-top campaign-types">
591
592    <div class="row unique-features-intro small-spacer-top medium-spacer-bottom justify-content-center">
593      <div class="col-12 col-md-8">
594        <h2 class="text-center serif-font bold">
595          Milestone Rewards
596        </h2>
597        <p class="text-center">Double your email, SMS, and social media audience by running a Milestone Rewards Program where leads unlock rewards by referring friends and taking actions.</p>
598        <div class="learn-more text-center">
599          <a class="" href="/campaign-types/reward-levels/">Explore Milestone Rewards</a>
600          <a class="" style="margin-left:12px" href="https://demos.kickofflabs.com/reward-level-signup" target="_blank" rel="noopener">Try one</a>
601        </div>
602      </div>
603    </div>
604
605    <div class="row text-center why-page medium-spacer-bottom">
606      
607      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
608        <div class="row">
609          <div class="col-10 offset-1">
610            <div class="campaign-visual gradient-bg-top right">
611              <a class="" href="/campaign-types/reward-levels/">
612                
613                <img class="img-fluid" src="/assets/images/onboarding/milestone-rewards.webp" alt="Milestone Reward Programs campaign example" width="520" height="300" loading="lazy"></a>
614            </div>
615          </div>
616        </div>
617        <h3>Milestone Rewards</h3>
618        <p>Participants unlock rewards as they earn points through referrals, purchases, and actions.</p>
619        <p><a class="" href="/campaign-types/reward-levels/">Learn More</a></p>
620      </div>
621      
622      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
623        <div class="row">
624          <div class="col-10 offset-1">
625            <div class="campaign-visual gradient-bg-top right">
626              <a class="" href="/campaign-types/referral-reward-programs/">
627                
628                <img class="img-fluid" src="/assets/images/onboarding/harry-referral-rewards.webp" alt="Referral Reward Programs campaign example" width="520" height="300" loading="lazy"></a>
629            </div>
630          </div>
631        </div>
632        <h3>Referral Reward Programs</h3>
633        <p>Refer three friends, unlock a reward — new leads and purchases both count.</p>
634        <p><a class="" href="/campaign-types/referral-reward-programs/">Learn More</a></p>
635      </div>
636      
637      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
638        <div class="row">
639          <div class="col-10 offset-1">
640            <div class="campaign-visual gradient-bg-top right">
641              <a class="" href="/campaign-types/newsletter-referral/">
642                
643                <img class="img-fluid" src="/assets/images/campaign-types/nlr-campaign-type.webp" alt="Newsletter Referrals campaign example" width="520" height="300" loading="lazy"></a>
644            </div>
645          </div>
646        </div>
647        <h3>Newsletter Referrals</h3>
648        <p>Double your subscriber base with a referral campaign!</p>
649        <p><a class="" href="/campaign-types/newsletter-referral/">Learn More</a></p>
650      </div>
651      
652    </div>
653
654  </div>
655</div>
656
657  
658  
659  
660
661<div class="bg-purple">
662  <div class="container big-spacer-top campaign-types">
663
664    <div class="row unique-features-intro small-spacer-top medium-spacer-bottom justify-content-center">
665      <div class="col-12 col-md-8">
666        <h2 class="text-center serif-font bold text-white">
667          Lead Magnets
668        </h2>
669        <p class="text-center">Keep your audience engaged all year long by running a simple email opt-in campaign with a simple instant download or coupon code in exchange for someone joining your email list.</p>
670        <div class="learn-more text-center">
671          <a class="text-link" href="/campaign-types/email-opt-in/">Explore Lead Magnets</a>
672          <a class="text-link" style="margin-left:12px" href="https://demos.kickofflabs.com/email-opt-in-signup" target="_blank" rel="noopener">Try one</a>
673        </div>
674      </div>
675    </div>
676
677    <div class="row text-center why-page medium-spacer-bottom">
678      
679      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
680        <div class="row">
681          <div class="col-10 offset-1">
682            <div class="campaign-visual gradient-bg-top right">
683              <a class="text-link" href="/campaign-types/email-opt-in/">
684                
685                <img class="img-fluid" src="/assets/images/onboarding/email-signup.webp" alt="Lead Magnet Opt-ins campaign example" width="520" height="300" loading="lazy"></a>
686            </div>
687          </div>
688        </div>
689        <h3 class="text-white">Lead Magnets</h3>
690        <p>Deliver a simple instant download or coupon in exchange for someone joining your email list.</p>
691        <p><a class="text-link" href="/campaign-types/email-opt-in/">Learn More</a></p>
692      </div>
693      
694    </div>
695
696  </div>
697</div>
698
699  
700  
701  
702
703<div class="off-white-bg">
704  <div class="container big-spacer-top campaign-types">
705
706    <div class="row unique-features-intro small-spacer-top medium-spacer-bottom justify-content-center">
707      <div class="col-12 col-md-8">
708        <h2 class="text-center serif-font bold">
709          Event Promotion
710        </h2>
711        <p class="text-center">Promote a launch party, webinar, or conference with an RSVP page where attendees earn rewards for bringing friends and get automatic reminders before the doors open.</p>
712        <div class="learn-more text-center">
713          <a class="" href="/campaign-types/event-promotion/">Explore Event Promotion</a>
714          
715        </div>
716      </div>
717    </div>
718
719    <div class="row text-center why-page medium-spacer-bottom">
720      
721      <div class="col-10 unique-features feature-li offset-1 col-md-6 offset-md-0 col-lg-4 option">
722        <div class="row">
723          <div class="col-10 offset-1">
724            <div class="campaign-visual gradient-bg-top right">
725              <a class="" href="/campaign-types/event-promotion/">
726                
727                <img class="img-fluid" src="/assets/images/onboarding/event-promotion.webp" alt="Event Promotions campaign example" width="520" height="300" loading="lazy"></a>
728            </div>
729          </div>
730        </div>
731        <h3>Event Promotion</h3>
732        <p>Fill an event with RSVPs that bring friends along.</p>
733        <p><a class="" href="/campaign-types/event-promotion/">Learn More</a></p>
734      </div>
735      
736    </div>
737
738  </div>
739</div>
740
741
742    <!-- General Page Footer -->
743
744<footer id="top-footer">
745	<div class="container">
746		<div class="row small-spacer">
747			<div class="col-md-3 col-5">
748				<!-- Product -->
749				<h2>Product</h2>
750				<p><a href="/why-kickofflabs/">Why KickoffLabs</a></p>
751				<p><a href="/how-it-works/">How It Works</a></p>
752				<p><a href="/landing-page-templates/">Page Templates</a></p>
753				<p><a href="/pricing/">Pricing</a></p>
754			</div>
755
756			<!-- Campaign Types — generated from _data/campaigns.yml (footer: true) -->
757			<div class="col-md-3 offset-md-0 col-5">
758				<h2>Campaign Types</h2>
759				
760				
761				<p><a href="/campaign-types/giveaways/">Giveaways &amp; Contests</a></p>
762				
763				<p><a href="/campaign-types/leaderboard-giveaways/">Leaderboard Giveaway</a></p>
764				
765				<p><a href="/campaign-types/sweepstakes/">Bonus-Entry Sweepstakes</a></p>
766				
767				<p><a href="/campaign-types/waitlist/">Waitlists</a></p>
768				
769				<p><a href="/campaign-types/referral-waitlist/">Referral Waitlist</a></p>
770				
771				<p><a href="/campaign-types/reward-levels/">Milestone Rewards</a></p>
772				
773				<p><a href="/campaign-types/email-opt-in/">Lead Magnets</a></p>
774				
775				<p><a href="/campaign-types/event-promotion/">Event Promotion</a></p>
776				
777			</div>
778
779			<!-- Resources -->
780			<div class="col-md-3 offset-md-0 col-5">
781				<h2>Resources</h2>
782				<p><a href="/podcast/">Podcast</a></p>
783				<p><a href="/blog/">Blog</a></p>
784				<p><a href="https://support.kickofflabs.com">Support</a></p>
785				<p><a href="https://api.kickofflabs.com/">API Documentation</a></p>
786			</div>
787
788			<!-- Company -->
789			<div class="col-md-3 offset-md-0 col-5">
790				<h2>Company</h2>
791				<p><a href="/affiliate/">Become an Affiliate</a></p>
792				<p><a href="/showcase/">Customer Showcase</a></p>
793				<p><a href="/why-kickofflabs/quotes/">Customer Quotes</a></p>
794				<p><a href="/company/">Team</a></p>
795				<p>
796					<a href="https://www.facebook.com/kickofflabs" rel="noopener noreferrer">Facebook</a>
797				</p>
798				<p>
799					<a href="https://www.threads.net/@usekickofflabs" rel="noopener noreferrer">Threads</a>
800				</p>
801				<p>
802					<a href="https://twitter.com/kickofflabs" rel="noopener noreferrer">X</a>
803				</p>
804			</div>
805
806		</div>
807	</div>
808</footer>
809
810
811<footer id="bottom-footer">
812	<div class="container">
813		<div class="row mini-spacer">
814			<div class="col-7">
815				<p>© 2026 KickoffLabs - <a href="/legal/terms-of-service/">Terms</a> - <a
816						href="/legal/privacy-policy/">Privacy</a></p>
817
818			</div>
819
820		</div>
821
822	</div>
823
824
825</footer>
826
827<!-- FREE SIGNUP MODAL CODE -->
828<div id="signup-free" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="signupFree">
829	<div class="modal-dialog  modal-lg" role="document">
830		<div class="modal-content">
831			<div class="modal-body">
832				<div class="form">
833					<form data-bs-toggle="validator" data-disable="false" data-delay="10000" id="free_account_sign_up_form"
834						role="form" action="https://app.kickofflabs.com/signup/free-user" accept-charset="UTF-8" class=""
835						method="post">
836						<img class="" src="/assets/images/logo_on_light_473x102.webp" alt="KickoffLabs Logo" width="140" height="20">
837						<p class="small-spacer-top" style="font-size:14px">Start building with amazing support today. No credit card
838							required. </p>
839						<input name="utf8" type="hidden" value="✓">
840						<div class="form-group">
841							<label for="_email">Email Address</label>
842							<input required required="required" id="email" placeholder="Email" class="form-control input-lg"
843								name="email" type="email" data-error="You must include a valid email address." data-bs-toggle="tooltip"
844								data-title="Email is required to create an account and access the services. We will provide account related communications to this email."
845								data-placement="right">
846
847						</div>
848						<div class="form-group">
849							<label for="_password">Password</label>
850							<input required required="required" id="password" data-minlength="4"
851								data-error="Your password must be at least 4 characters long." placeholder="****"
852								class="form-control input-lg" name="password" type="password">
853							<div class="help-block with-errors" style="font-size:12px;"></div>
854						</div>
855						<div class="form-group text-left">
856							<div class="checkbox">
857								<label for="_terms">
858
859									<input style="margin-top: 6px;" id="_terms" name="terms" required="required" type="checkbox"
860										data-original-title="" title=""><span style="font-size:14px;line-height:23px;"> I agree to the
861										KickoffLabs <a target="_blank" href="https://kickofflabs.com/legal/terms-of-service/">terms of
862											service</a> and <a target="_blank" href="https://kickofflabs.com/legal/privacy-policy/">privacy
863											policy</a>.
864									</span>
865								</label>
866							</div>
867						</div>
868
869						<input id="visitorId" type="hidden" name="visitor_id"></input>
870						<input id="timezone" type="hidden" name="[timezone]"></input>
871						<input id="starter_page" type="hidden" name="starter_page" value=""></input>
872						<input type="hidden" id="signup_form" class="signup-form-value" name="signup_form" value="not set"></input>
873						<input type="hidden" id="referer" name="referer" value=''></input>
874						<input type="hidden" id="turnstile_token" name="turnstile_token" value=''></input>
875						<div id="turnstile-container"></div>
876						<input type="submit" name="commit" value="Get Started!"
877							class="btn btn-blue btn-lg btn-block w-100 free-modal">
878						<p class="mb-2 mt-2" style="font-size:12px; text-align:center;">or</p>
879						<a href="https://app.kickofflabs.com/auth/google_oauth2"
880							class="btn btn-ghost-blue w-100 btn-md btn-block free-modal">
881							<span class="" width="14px" height="14px" style="height: 14px; width: 14px;"><svg class="svg" width="14"
882									height="14" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg">
883									<path
884										d="M17.64 9.2c0-.637-.057-1.251-.164-1.84H9v3.481h4.844c-.209 1.125-.843 2.078-1.796 2.717v2.258h2.908c1.702-1.567 2.684-3.874 2.684-6.615z"
885										fill-rule="evenodd" fill-opacity="1" fill="#4285f4" stroke="none"></path>
886									<path
887										d="M9.003 18c2.43 0 4.467-.806 5.956-2.18L12.05 13.56c-.806.54-1.836.86-3.047.86-2.344 0-4.328-1.584-5.036-3.711H.96v2.332C2.44 15.983 5.485 18 9.003 18z"
888										fill-rule="evenodd" fill-opacity="1" fill="#34a853" stroke="none"></path>
889									<path
890										d="M3.964 10.712c-.18-.54-.282-1.117-.282-1.71 0-.593.102-1.17.282-1.71V4.96H.957C.347 6.175 0 7.55 0 9.002c0 1.452.348 2.827.957 4.042l3.007-2.332z"
891										fill-rule="evenodd" fill-opacity="1" fill="#fbbc05" stroke="none"></path>
892									<path
893										d="M9.003 3.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C13.464.891 11.428 0 9.002 0 5.485 0 2.44 2.017.96 4.958L3.967 7.29c.708-2.127 2.692-3.71 5.036-3.71z"
894										fill-rule="evenodd" fill-opacity="1" fill="#ea4335" stroke="none"></path>
895								</svg></span> Start with Google</a>
896					</form>
897
898
899				</div>
900				<div class="image"
901					style="background: url('/assets/images/home/signup-graphic.webp');   background-size: cover; background-position: center;">
902				</div>
903				<button type="button" class="close btn btn-outline" data-bs-dismiss="modal" aria-label="Close"><span
904						aria-hidden="true">×</span></button>
905			</div> <!--- modal-body -->
906		</div><!-- /.modal-content -->
907	</div><!-- /.modal-dialog -->
908</div><!-- /.modal -->
909
910<!-- Video Modal -->
911
912<!-- Intro Video Modal -->
913<div class="modal fade" id="video-modal" tabindex="-1" role="dialog" aria-labelledby="video-modal" aria-hidden="true">
914	<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
915		<div class="modal-content">
916			<div class="modal-body">
917				<iframe id="video-frame-src" src="" width="640" height="360" frameborder="0" allow="autoplay; fullscreen"
918					allowfullscreen></iframe>
919			</div>
920		</div>
921	</div>
922</div>
923
924<!-- Image Modal Code-->
925<!-- Modal -->
926<div id="imagemodal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"
927	aria-hidden="true">
928	<div class="modal-header">
929		<button type="button" class="close" data-bs-dismiss="modal" aria-hidden="true">×</button>
930	</div>
931	<div class="modal-body">
932		<img id="image-modal-image" src="" alt="Enlarged image preview">
933	</div>
934</div>
935
936
937<!-- JS -->
938
939<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"
940	integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous" defer></script>
vendor: 1 bytes, line 940
940
941<script src="https://unpkg.com/lite-vimeo-embed" defer></script>
vendor: 1 bytes, line 941
941
942<script type="text/javascript">
943	window.__kolLoadScriptOnce = window.__kolLoadScriptOnce || function (src, attrs) {
944		window.__kolScriptPromises = window.__kolScriptPromises || {};
945		if (window.__kolScriptPromises[src]) return window.__kolScriptPromises[src];
946
947		window.__kolScriptPromises[src] = new Promise(function (resolve, reject) {
948			var s = document.createElement('script');
949			s.src = src;
950			s.async = true;
951			if (attrs) {
952				Object.keys(attrs).forEach(function (key) {
953					s.setAttribute(key, attrs[key]);
954				});
955			}
956			s.onload = resolve;
957			s.onerror = reject;
958			document.head.appendChild(s);
959		});
960
961		return window.__kolScriptPromises[src];
962	};
963
964	window.__kolLoadStylesheetOnce = window.__kolLoadStylesheetOnce || function (href) {
965		if (document.querySelector('link[href="' + href + '"]')) return;
966		var l = document.createElement('link');
967		l.href = href;
968		l.rel = 'stylesheet';
969		document.head.appendChild(l);
970	};
971
972
973	window.__kolLoadTurnstile = window.__kolLoadTurnstile || function () {
974		return window.__kolLoadScriptOnce('https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit');
975	};
976
977	window.__kolLoadFingerprint = window.__kolLoadFingerprint || function () {
978		return window.__kolLoadScriptOnce('https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/2.1.0/fingerprint2.min.js');
979	};
980	//script the navbar ready state.
981	var kol_skip_font_awesome = true;
982
983	document.addEventListener('DOMContentLoaded', function () {
984
985
986
987
988
989
990		// set specific link active.
991		document.querySelectorAll('#primary-top-nav a, #primary-top-nav li').forEach(function (el) {
992			el.classList.remove('active');
993		});
994
995		if (location.pathname.length > 1) {
996
997			var picked = document.querySelector('#primary-top-nav a[href="' + location.pathname + '"]');
998			if (picked !== null) {
999				picked.classList.add('active');
1000				picked.closest("li").classList.add('active');
1001			}
1002
1003			// only do a match if there is just one.
1004			var similarLinks = document.querySelectorAll('#primary-top-nav a[href^="/' + location.pathname.split("/")[1] + '"]');
1005			if ((picked === null) && (similarLinks.length === 1)) {
1006				similarLinks[0].classList.add('active');
1007				similarLinks[0].closest("li").classList.add('active');
1008			}
1009
1010			// otherwise try and pick a top level menu.
1011			if ((picked === null) && (similarLinks.length > 1)) {
1012				similarLinks.forEach(function (el) {
1013					el.closest("li").classList.add('active');
1014				});
1015			}
1016
1017		}
1018		// actions on signup modal
1019		document.getElementById('signup-free').addEventListener('shown.bs.modal', function () {
1020			document.getElementById('email').focus();
1021			if (typeof fathom !== 'undefined') {
1022				var v = localStorage.getItem('ab_dark_hero_v1') || 'unknown';
1023				fathom.trackEvent('ab_dark_hero_v1_form_open_' + v);
1024			}
1025		});
1026
1027		// Track signup form submission
1028		document.getElementById('free_account_sign_up_form').addEventListener('submit', function () {
1029			if (typeof fathom !== 'undefined') {
1030				var v = localStorage.getItem('ab_dark_hero_v1') || 'unknown';
1031				fathom.trackEvent('ab_dark_hero_v1_signup_' + v);
1032			}
1033		});
1034
1035		var videoModal = document.getElementById('video-modal');
1036		videoModal.addEventListener('show.bs.modal', function (event) {
1037			var button = event.relatedTarget;
1038			var frameSrc = button.dataset.videoFrameSrc;
1039			var modal = this;
1040			modal.querySelector('#video-frame-src').src = frameSrc + "?autoplay=true";
1041		});
1042
1043		videoModal.addEventListener('hide.bs.modal', function (event) {
1044			var modal = this;
1045			modal.querySelector('#video-frame-src').src = '';
1046		});
1047
1048	});
1049</script>
1049
1050
1051
1052
1053
1054<script>
1055	// --- KOL Attribution Tracking ---
1056	// Captures UTMs, click IDs, and referrer on first page load.
1057	// Stores first-touch (localStorage) and last-touch (sessionStorage).
1058	// Populates hidden form fields and decorates app.kickofflabs.com links.
1059	(function () {
1060		var UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
1061		var CLICK_ID_KEYS = ['fbclid', 'gclid'];
1062		var ALL_KEYS = UTM_KEYS.concat(CLICK_ID_KEYS);
1063		var FIRST_TOUCH_KEY = 'kol_first_touch';
1064		var LAST_TOUCH_KEY = 'kol_last_touch';
1065		var STARTER_PAGE_KEY = 'kol_starter_page';
1066
1067		function getParams() {
1068			var params = {};
1069			try {
1070				var sp = new URLSearchParams(window.location.search);
1071				ALL_KEYS.forEach(function (k) {
1072					var v = sp.get(k);
1073					if (v) params[k] = v;
1074				});
1075			} catch (e) { /* old browser fallback not needed for target audience */ }
1076			return params;
1077		}
1078
1079		function readStore(storage, key) {
1080			try {
1081				var raw = storage.getItem(key);
1082				return raw ? JSON.parse(raw) : null;
1083			} catch (e) { return null; }
1084		}
1085
1086		function writeStore(storage, key, obj) {
1087			try { storage.setItem(key, JSON.stringify(obj)); } catch (e) { /* quota */ }
1088		}
1089
1090		// Capture current page params
1091		var currentParams = getParams();
1092		var hasNewAttribution = Object.keys(currentParams).length > 0;
1093		var referrer = document.referrer || '';
1094
1095		// First-touch: write once, never overwrite
1096		if (!readStore(localStorage, FIRST_TOUCH_KEY)) {
1097			var firstTouch = {};
1098			ALL_KEYS.forEach(function (k) { if (currentParams[k]) firstTouch[k] = currentParams[k]; });
1099			if (referrer) firstTouch.referrer = referrer;
1100			firstTouch.landing_page = window.location.href;
1101			firstTouch.ts = new Date().toISOString();
1102			writeStore(localStorage, FIRST_TOUCH_KEY, firstTouch);
1103		}
1104
1105		// Starter page: write once
1106		if (!localStorage.getItem(STARTER_PAGE_KEY)) {
1107			try { localStorage.setItem(STARTER_PAGE_KEY, window.location.href); } catch (e) {}
1108		}
1109
1110		// Last-touch: update when new UTMs arrive
1111		if (hasNewAttribution) {
1112			var lastTouch = {};
1113			ALL_KEYS.forEach(function (k) { if (currentParams[k]) lastTouch[k] = currentParams[k]; });
1114			if (referrer) lastTouch.referrer = referrer;
1115			lastTouch.landing_page = window.location.href;
1116			lastTouch.ts = new Date().toISOString();
1117			writeStore(sessionStorage, LAST_TOUCH_KEY, lastTouch);
1118		} else if (!readStore(sessionStorage, LAST_TOUCH_KEY)) {
1119			// No UTMs and no session data yet — store referrer-only touch
1120			var refTouch = {};
1121			if (referrer) refTouch.referrer = referrer;
1122			refTouch.landing_page = window.location.href;
1123			refTouch.ts = new Date().toISOString();
1124			writeStore(sessionStorage, LAST_TOUCH_KEY, refTouch);
1125		}
1126
1127		// Expose for use by DOMContentLoaded handler below
1128		window.__kolAttribution = {
1129			firstTouch: readStore(localStorage, FIRST_TOUCH_KEY) || {},
1130			lastTouch: readStore(sessionStorage, LAST_TOUCH_KEY) || {},
1131			starterPage: localStorage.getItem(STARTER_PAGE_KEY) || ''
1132		};
1133	})();
1134
1135	function appendQueryParameterToLinks(targetUrl, parameter, value) {
1136		var links = document.querySelectorAll('a[href]');
1137
1138		links.forEach(function (link) {
1139			if (link.getAttribute('href') === targetUrl) {
1140				if (targetUrl.includes('?')) {
1141					link.setAttribute('href', targetUrl + '&' + parameter + '=' + value);
1142				} else {
1143					link.setAttribute('href', targetUrl + '?' + parameter + '=' + value);
1144				}
1145			}
1146		});
1147	}
1148
1149	// Decorate all app.kickofflabs.com links with attribution params
1150	function decorateAppLinks() {
1151		var attr = window.__kolAttribution || {};
1152		var ft = attr.firstTouch || {};
1153		var lt = attr.lastTouch || {};
1154
1155		// Build params: prefer last-touch UTMs, fall back to first-touch
1156		var params = [];
1157		['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid'].forEach(function (k) {
1158			var val = lt[k] || ft[k];
1159			if (val) params.push(k + '=' + encodeURIComponent(val));
1160		});
1161		// Always include first-touch referrer and starter page if available
1162		if (ft.referrer) params.push('kol_referrer=' + encodeURIComponent(ft.referrer));
1163		if (attr.starterPage) params.push('starter_page=' + encodeURIComponent(attr.starterPage));
1164
1165		if (params.length === 0) return;
1166		var paramStr = params.join('&');
1167
1168		document.querySelectorAll('a[href*="app.kickofflabs.com"]').forEach(function (link) {
1169			var href = link.getAttribute('href');
1170			// Skip if we already decorated this link
1171			if (href.indexOf('utm_source=') !== -1 || href.indexOf('kol_referrer=') !== -1) return;
1172			if (href.indexOf('?') !== -1) {
1173				link.setAttribute('href', href + '&' + paramStr);
1174			} else {
1175				link.setAttribute('href', href + '?' + paramStr);
1176			}
1177		});
1178	}
1179
1180	document.addEventListener("DOMContentLoaded", function () {
1181		var attr = window.__kolAttribution || {};
1182
1183		// Populate signup_form (current page URL) — existing behavior
1184		document.querySelectorAll('.signup-form-value').forEach(function (el) {
1185			el.value = window.location.href || "no href";
1186		});
1187
1188		// Populate referer fields (ALL of them — handles duplicate IDs on campaign pages)
1189		var referrerValue = attr.firstTouch.referrer || document.referrer || '';
1190		document.querySelectorAll('input[name="referer"]').forEach(function (el) {
1191			el.value = referrerValue;
1192		});
1193
1194		// Populate starter_page fields
1195		var starterPage = attr.starterPage || window.location.href;
1196		document.querySelectorAll('input[name="starter_page"]').forEach(function (el) {
1197			el.value = starterPage;
1198		});
1199
1200		// Populate structured attribution fields (utm_*, click IDs, kol_referrer) on
1201		// every signup form so they POST as discrete params rather than relying on
1202		// Rails parsing them back out of the signup_form / starter_page URLs.
1203		// Prefer last-touch, fall back to first-touch (matches decorateAppLinks).
1204		var ft = attr.firstTouch || {};
1205		var lt = attr.lastTouch || {};
1206		var attributionFields = {
1207			utm_source: lt.utm_source || ft.utm_source || '',
1208			utm_medium: lt.utm_medium || ft.utm_medium || '',
1209			utm_campaign: lt.utm_campaign || ft.utm_campaign || '',
1210			utm_term: lt.utm_term || ft.utm_term || '',
1211			utm_content: lt.utm_content || ft.utm_content || '',
1212			fbclid: lt.fbclid || ft.fbclid || '',
1213			gclid: lt.gclid || ft.gclid || '',
1214			kol_referrer: ft.referrer || ''
1215		};
1216		document.querySelectorAll('form[action*="signup/free-user"]').forEach(function (form) {
1217			Object.keys(attributionFields).forEach(function (name) {
1218				var value = attributionFields[name];
1219				if (!value) return; // never send empty fields; Rails only writes present ones
1220				var input = form.querySelector('input[name="' + name + '"]');
1221				if (!input) {
1222					input = document.createElement('input');
1223					input.type = 'hidden';
1224					input.name = name;
1225					form.appendChild(input);
1226				}
1227				input.value = value;
1228			});
1229		});
1230
1231		// Decorate signup/OAuth/pricing links with attribution
1232		appendQueryParameterToLinks('https://app.kickofflabs.com/auth/google_oauth2', 'signup_form', encodeURIComponent(window.location.href));
1233		decorateAppLinks();
1234
1235		var hydrateFingerprint = function () {
1236			if (window.__kolFingerprintHydrated) return;
1237			window.__kolFingerprintHydrated = true;
1238
1239			window.__kolLoadFingerprint().then(function () {
1240				if (!window.Fingerprint2) return;
1241				Fingerprint2.getV18(function (visitorId) {
1242					document.querySelectorAll('input[name="visitor_id"]').forEach(function (el) {
1243						el.value = visitorId;
1244					});
1245				});
1246			}).catch(function () { /* fingerprint is attribution-only; never block signup */ });
1247		};
1248
1249		document.getElementById('signup-free').addEventListener('shown.bs.modal', hydrateFingerprint);
1250		document.getElementById('free_account_sign_up_form').addEventListener('submit', hydrateFingerprint);
1251	});
1252</script>
vendor: 1 bytes, line 1252
1252
1253<script>
1254	(function () {
1255		var loadFontAwesome = function () {
1256			window.__kolLoadScriptOnce('https://kit.fontawesome.com/413baa29c3.js', { crossorigin: 'anonymous' });
1257		};
1258
1259		if ('requestIdleCallback' in window) {
1260			window.requestIdleCallback(loadFontAwesome, { timeout: 3000 });
1261		} else {
1262			window.setTimeout(loadFontAwesome, 1500);
1263		}
1264	})();
1265</script>
vendor: 1 bytes, line 1265
1265
1266<script>
1267	(function () {
1268		var turnstileRendered = false;
1269
1270		document.addEventListener("shown.bs.modal", function (event) {
1271			if (turnstileRendered) return;
1272			if (!event.target || event.target.id !== 'signup-free') return;
1273
1274			window.__kolLoadTurnstile().then(function () {
1275				if (!window.turnstile || !document.getElementById("turnstile-container")) return;
1276				turnstileRendered = true;
1277				turnstile.render("#turnstile-container", {
1278					sitekey: "0x4AAAAAAALMZRI9LDpjKuIR",
1279					action: "main",
1280					callback: function (token) {
1281						const turnstile_token_element = document.getElementById("turnstile_token")
1282						if (turnstile_token_element) {
1283							turnstile_token_element.value = token;
1284							let googleButton = document.querySelector('a.btn-ghost-blue');
1285							if (googleButton) {
1286								if (googleButton.href.includes('?')) {
1287									googleButton.href += '&turnstile_token=' + encodeURIComponent(token);
1288								} else {
1289									googleButton.href += '?turnstile_token=' + encodeURIComponent(token);
1290								}
1291							}
1292						} else {
1293							console.log("Missing Turnstile Token Element");
1294						}
1295						console.log("Challenge Success", token);
1296					},
1297				});
1298			}).catch(function () { /* signup form handles missing token server-side */ });
1299		})
1300	})();
1301</script>
vendor: 1 bytes, line 1301
1301
1302<script>
1303	document.addEventListener("DOMContentLoaded", function () {
1304			// Find the TOC within the 'mobile-toc' class
1305			var mobileTocWrapper = document.querySelector('.mobile-toc');
1306			var mobileToc = document.querySelector('.mobile-toc #toc');
1307			if (!mobileToc) return; // Exit if no TOC found
1308
1309			// Create dropdown button
1310			var dropdownButton = document.createElement('button');
1311			dropdownButton.classList.add('btn', 'btn-outline-dark', 'dropdown-toggle');
1312			dropdownButton.setAttribute('type', 'button');
1313			dropdownButton.setAttribute('data-bs-toggle', 'dropdown');
1314			dropdownButton.setAttribute('aria-expanded', 'false');
1315			dropdownButton.textContent = 'Contents';
1316
1317			// Create dropdown menu
1318			var dropdownMenu = document.createElement('ul');
1319			dropdownMenu.classList.add('dropdown-menu');
1320
1321			// Move existing list items to dropdown menu
1322			while (mobileToc.children.length > 0) {
1323				var item = mobileToc.children[0];
1324				item.classList.add('dropdown-item');
1325				dropdownMenu.appendChild(item);
1326			}
1327
1328			// Create the container for the dropdown
1329			var dropdownContainer = document.createElement('div');
1330			dropdownContainer.classList.add('dropdown');
1331
1332			// Assemble the dropdown
1333			dropdownContainer.appendChild(dropdownButton);
1334			dropdownContainer.appendChild(dropdownMenu);
1335
1336			// Replace the old TOC with the new dropdown
1337			mobileToc.parentNode.replaceChild(dropdownContainer, mobileToc);
1338			mobileTocWrapper.style.display = 'block';
1339		});
1340
1341</script>
1341
1342  
1342<script src="https://cdn.kickoffpages.com/2.1.0/kol.js" id="koljs" data-campaign-id="2" data-cookie-domain="kickofflabs.com" async></script>
1342<script>
1343(function () {
1344  var BEACON_ID = '757ce3b7-e651-44a3-a4cf-fed5fccdad8c';
1345  var loaded = false;
1346
1347  // Keep HelpScout's queue API available before the real script loads.
1348  window.Beacon = window.Beacon || function (method, options, data) {
1349    window.Beacon.readyQueue.push({
1350      method: method,
1351      options: options,
1352      data: data
1353    });
1354  };
1355  window.Beacon.readyQueue = window.Beacon.readyQueue || [];
1356
1357  function loadHelpScout() {
1358    if (loaded) return;
1359    loaded = true;
1360
1361    var script = document.createElement('script');
1362    script.type = 'text/javascript';
1363    script.async = true;
1364    script.src = 'https://beacon-v2.helpscout.net';
1365    document.head.appendChild(script);
1366
1367    window.Beacon('init', BEACON_ID);
1368  }
1369
1370  function loadOnFirstInteraction() {
1371    loadHelpScout();
1372    window.removeEventListener('scroll', loadOnFirstInteraction);
1373    window.removeEventListener('mousemove', loadOnFirstInteraction);
1374    window.removeEventListener('touchstart', loadOnFirstInteraction);
1375    window.removeEventListener('keydown', loadOnFirstInteraction);
1376  }
1377
1378  // Load when the user shows intent.
1379  window.addEventListener('scroll', loadOnFirstInteraction, { once: true, passive: true });
1380  window.addEventListener('mousemove', loadOnFirstInteraction, { once: true, passive: true });
1381  window.addEventListener('touchstart', loadOnFirstInteraction, { once: true, passive: true });
1382  window.addEventListener('keydown', loadOnFirstInteraction, { once: true, passive: true });
1383
1384  // Also load after the page is idle, so chat still appears for passive visitors.
1385  window.addEventListener('load', function () {
1386    if ('requestIdleCallback' in window) {
1387      requestIdleCallback(loadHelpScout, { timeout: 5000 });
1388    } else {
1389      setTimeout(loadHelpScout, 3500);
1390    }
1391  });
1392})();
1393</script>
1393</body>
1394</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.