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 & 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 & 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 & 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 & 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 & 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 — <strong>a giveaway, a launch waitlist, a rewards program, a lead magnet, or an event</strong> — 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&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 & 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 & 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 & 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 & 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.