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 Grow with referrals. Pay for the scale you need. | 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="Grow with referrals. Pay for the scale you need." /> 17<meta property="og:locale" content="en_US" /> 18<meta name="description" content="Turn audiences into influencers with viral giveaways, sweepstakes, and product launches. No contracts. Cancel anytime." /> 19<meta property="og:description" content="Turn audiences into influencers with viral giveaways, sweepstakes, and product launches. No contracts. Cancel anytime." /> 20<link rel="canonical" href="https://kickofflabs.com/pricing/" /> 21<meta property="og:url" content="https://kickofflabs.com/pricing/" /> 22<meta property="og:site_name" content="KickoffLabs" /> 23<meta property="og:image" content="https://kickofflabs.com/assets/images/pricing.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/pricing.webp" /> 27<meta property="twitter:title" content="Grow with referrals. Pay for the scale you need." /> 28<meta name="twitter:site" content="@kickofflabs" />
29<script type="application/ld+json"> 30{"@context":"https://schema.org","@type":"WebPage","dateModified":"2026-07-11T05:19:38+00:00","description":"Turn audiences into influencers with viral giveaways, sweepstakes, and product launches. No contracts. Cancel anytime.","headline":"Grow with referrals. Pay for the scale you need.","image":"https://kickofflabs.com/assets/images/pricing.webp","publisher":{"@type":"Organization","logo":{"@type":"ImageObject","url":"https://kickofflabs.com/assets/images/logo_on_light_473x102.webp"}},"url":"https://kickofflabs.com/pricing/"}</script>
30 31<!-- End Jekyll SEO tag --> 32 33 34 35 36 37 38<link rel="preload" href="/assets/images/pricing.webp" as="image"> 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
138<script type="application/ld+json"> 139{ 140 "@context": "https://schema.org", 141 "@type": "FAQPage", 142 "mainEntity": [ 143 144 { 145 "@type": "Question", 146 "name": "Can I change plans or cancel anytime?", 147 "acceptedAnswer": { 148 "@type": "Answer", 149 "text": "Yes. Upgrade, downgrade, or cancel from your account page at any time. Upgrades are prorated for the current billing cycle." 150 } 151 }, 152 153 { 154 "@type": "Question", 155 "name": "What's the refund policy?", 156 "acceptedAnswer": { 157 "@type": "Answer", 158 "text": "Full refunds for any reason within 30 days of being charged. Refunds may not be issued if you've collected over 50 leads." 159 } 160 }, 161 162 { 163 "@type": "Question", 164 "name": "What if I go over my monthly leads?", 165 "acceptedAnswer": { 166 "@type": "Answer", 167 "text": "Your plan is automatically upgraded to match usage. Annual plans are billed $8 per extra 1,000 leads in months you go over." 168 } 169 }, 170 171 { 172 "@type": "Question", 173 "name": "What if I need more than Enterprise?", 174 "acceptedAnswer": { 175 "@type": "Answer", 176 "text": "Extra leads are $8 per 1,000 per month â or contact us for a custom enterprise agreement with lower rates." 177 } 178 }, 179 180 { 181 "@type": "Question", 182 "name": "Is KickoffLabs GDPR compliant?", 183 "acceptedAnswer": { 184 "@type": "Answer", 185 "text": "Yes. Read about our GDPR stance, DPA agreements, and compliance features in the knowledge base." 186 } 187 }, 188 189 { 190 "@type": "Question", 191 "name": "When will I be charged?", 192 "acceptedAnswer": { 193 "@type": "Answer", 194 "text": "As soon as you upgrade â with a full refund available for any reason during the first 30 days." 195 } 196 }, 197 198 { 199 "@type": "Question", 200 "name": "What kind of support can I expect?", 201 "acceptedAnswer": { 202 "@type": "Answer", 203 "text": "The best. Any technology can be copied â a customer experience is much harder. Contact us anytime, for any reason." 204 } 205 }, 206 207 { 208 "@type": "Question", 209 "name": "More questions?", 210 "acceptedAnswer": { 211 "@type": "Answer", 212 "text": "Email [email protected] â we're always happy to give you our two cents." 213 } 214 } 215 216 ] 217} 218</script>
218 219 220 221 <!-- Facebook Pixel Code -->
222<script>
vendor: 417 bytes, lines 222-231
222 223 !function(f,b,e,v,n,t,s) 224 {if(f.fbq)return;n=f.fbq=function(){n.callMethod? 225 n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 226 if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 227 n.queue=[];t=b.createElement(e);t.async=!0; 228 t.src=v;s=b.getElementsByTagName(e)[0]; 229 s.parentNode.insertBefore(t,s)}(window, document,'script', 230 'https://connect.facebook.net/en_US/fbevents.js'); 231 fbq('init', '
231277430412608891
vendor: 32 bytes, lines 231-232
231'); 232 fbq('track', 'PageView');
233</script>
233 234<noscript><img height="1" width="1" alt="Facebook" style="display:none" 235 src="https://www.facebook.com/tr?id=277430412608891&ev=PageView&noscript=1" 236/></noscript> 237<!-- End Facebook Pixel Code --><meta name="facebook-domain-verification" content="nle84tew2g6isbvihvnh3uxjdmz0ta" /><!-- Fathom - beautiful, simple website analytics --> 238
238<script src="https://cdn.usefathom.com/script.js" data-site="SWRTKYWT" defer></script>
238 239 <!-- / Fathom --><!-- Global site tag (gtag.js) - Google Ads: 992175653 -->
vendor: 64 bytes, lines 239-240
239 240<script async src="https://www.googletagmanager.com/gtag/js?id=
240AW-992175653
vendor: 12 bytes, line 240
240"></script>
241<script> 242
vendor: 134 bytes, lines 242-246
242window.dataLayer = window.dataLayer || []; 243 function gtag(){dataLayer.push(arguments);} 244 gtag('js', new Date()); 245 246 gtag('config', '
246AW-992175653
vendor: 40 bytes, line 246
246',{'allow_enhanced_conversions':true});
247</script>
247<meta name="google-site-verification" content="RBwetj_Er8Q2gftTNbu-WLErGGJKHfATrPx-bNHIUu8" /></head> 248 <body> 249 <nav id="primary-top-nav" class="navbar navbar-expand-lg navbar-light bg-light fixed-top" role="navigation"> 250 251 <div class="container"> 252 <button type="button" class="navbar-toggler" data-bs-toggle="collapse" data-bs-target="#navbarContent" 253 aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle topbar navigation"> 254 <span class="icon-bar"></span> 255 <span class="icon-bar"></span> 256 <span class="icon-bar"></span> 257 </button> 258 <a class="navbar-brand" href="/" rel="home"> 259 <img src="/assets/images/logo_on_light_473x102.webp" width="146" alt="KickoffLabs"> 260 </a> 261 262 <button class=" d-block d-lg-none btn btn-pink btn-pill btn-md btn-free" href="https://app.kickofflabs.com/signup/free" 263 data-bs-toggle="modal" style="padding:.75rem 1rem;min-height:48px" data-bs-target="#signup-free">Start Free!</button> 264 265 266 267 268 269 <div class="collapse navbar-collapse" id="navbarContent"> 270 <ul class="navbar-nav me-auto"> 271 272 <li id="template-menu-item" class="nav-item dropdown "> 273 <a class="nav-link dropdown-toggle" href="#" id="templatesTopNav" role="button" data-bs-toggle="dropdown" 274 aria-haspopup="true" aria-expanded="false">Campaign Types</a> 275 <div id="templates-dropdown" class="dropdown-menu" aria-labelledby="templateTopNav"> 276 <div class="row"> 277 <div class="col-12"> 278 279 <a class="what dropdown-item" href="/campaign-types/"><strong>Overview</strong> - See All Types</a> 280 281 282 283 <a class="what dropdown-item ct-nav-pillar" href="/campaign-types/giveaways/"><strong>Giveaways & Contests</strong></a> 284 285 286 287 <a class="what dropdown-item ct-nav-child" href="/campaign-types/leaderboard-giveaways/">
287Leaderboard Giveaway</a> 288 289 290 291 <a class="what dropdown-item ct-nav-child" href="/campaign-types/sweepstakes/">Bonus-Entry Sweepstakes</a> 292 293 294 295 <a class="what dropdown-item ct-nav-child" href="/campaign-types/purchase-based-giveaways/">Shopify / Purchase Giveaways</a> 296 297 298 299 <a class="what dropdown-item ct-nav-pillar" href="/campaign-types/waitlist/"><strong>Waitlists</strong></a> 300 301 302 303 <a class="what dropdown-item ct-nav-child" href="/campaign-types/referral-waitlist/">Referral Waitlist</a> 304 305 306 307 <a class="what dropdown-item ct-nav-child" href="/campaign-types/waitlist-with-giveaway/">Waitlist with a Giveaway</a> 308 309 310 311 <a class="what dropdown-item ct-nav-child" href="/campaign-types/waitlist-with-leaderboard/">Waitlist Leaderboard</a> 312 313 314 315 <a class="what dropdown-item ct-nav-pillar" href="/campaign-types/reward-levels/"><strong>Milestone Rewards</strong></a> 316 317 318 319 <a class="what dropdown-item ct-nav-child" href="/campaign-types/referral-reward-programs/">Referral Reward Programs</a> 320 321 322 323 <a class="what dropdown-item ct-nav-child" href="/campaign-types/newsletter-referral/">Newsletter Referrals</a> 324 325 326 327 <a class="what dropdown-item ct-nav-pillar" href="/campaign-types/email-opt-in/"><strong>Lead Magnets</strong></a> 328 329 330 331 <a class="what dropdown-item ct-nav-pillar" href="/campaign-types/event-promotion/"><strong>Event Promotion</strong></a> 332 333 334 335 </div> 336 </div> 337 338 339 340 341 </div> 342 </li> 343 344 <li id="what-you-can-do" class="nav-item dropdown"> 345 <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> 346 <div id="what-dropdown" class="dropdown-menu" aria-labelledby="whatYouCanDo"> 347 <div class="row"> 348 <div class="col-12 col-md-4 how-it-works-wrapper"> 349 350 <span class="what headline">Learn More</span> 351 <a class="what dropdown-item " href="/why-kickofflabs/">Why KickoffLabs</a> 352 <a class="what dropdown-item " href="/how-it-works/">How it works</a> 353 <a class="what dropdown-item" href="/why-kickofflabs/kickofflabs-done-for-you-services/">Done For You Services</a> 354 <a class="what dropdown-item" href="/why-kickofflabs/enterprise-giveaways/">Enterprise Scale Giveaways</a> 355 <a class="what dropdown-item" href="/why-kickofflabs/digital-agencies/">Manage Client Giveaways</a> 356 357 </div> 358 <div class="col-12 col-md-8 how-it-works-wrapper"> 359 <span class="what headline">Product Features</span> 360 <div class="row"> 361 <div class="col-12 col-md-6"> 362 363 <a class="what dropdown-item" href="/landing-page-templates/">Landing Pages</a> 364 <a class="what dropdown-item " href="/features/embeds/">Embedded Campaigns</a> 365 <a class="what dropdown-item " href="/features/popups/">Popups</a> 366 367 <a class="what dropdown-item " href="/features/anyform/">AnyForm</a> 368 <a class="what dropdown-item " href="/features/email/">Email</a> 369 <a class="what dropdown-item " href="/features/custom-domains/">Custom Contest Domains</a> 370 371 <a class="what dropdown-item " href="/features/leaderboard/">Leaderboards</a> 372 <a class="what dropdown-item " href="/features/teamaccounts/">Team Accounts</a> 373 <a class="what dropdown-item " href="/features/instant-signup/">Instant Signup</a> 374 <a class="what dropdown-item " href="/features/referral-tracking/">Referral Tracking</a> 375 376 377 378 379 </div> 380 381 <div class="col-12 col-md-6"> 382 <a class="what dropdown-item" href="/features/sms/">SMS</a> 383 <a class="what dropdown-item" href="/integrations/">Integrations</a> 384 <a class="what dropdown-item" href="/features/shopify/">Shopify</a> 385 <a class="what dropdown-item " href="/features/contest-landing-page-builder/">
385Contest Page Builder</a> 386 <a class="what dropdown-item " href="/features/contest-actions/">Contest Actions</a> 387 <a class="what dropdown-item " href="/features/nudge-bar/">Nudge Bar</a> 388 389 <a class="what dropdown-item " href="/features/rewards/">Rewards</a> 390 <a class="what dropdown-item " href="/features/contest-fraud-detection/">Contest Fraud Detection</a> 391 <a class="what dropdown-item " href="/features/reports/">Reports</a> 392 <a class="what dropdown-item " href="/features/pick-a-winner/">Pick a Winner</a> 393 394 395 396 </div> 397 </div> 398 </div> 399 400 401 402 <!-- <div class="col-md-4"> 403 <a class="what headline">Manage Leads</a> 404 <a class="what dropdown-item" href="/#manage-leads">Integrations</a> 405 <a class="what dropdown-item" href="/#manage-leads">Reporting</a> 406 </div> --> 407 </div> 408 </div> 409 </li> 410 411 <li class="nav-item"> 412 <a class="nav-link" href="/pricing/">Pricing</a> 413 </li> 414 415 <li id="resources-menu-item" class="nav-item dropdown "> 416 <a class="nav-link dropdown-toggle" href="#" id="resourcesTopNav" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Resources</a> 417 <div id="resources-dropdown" class="dropdown-menu" aria-labelledby="resourcesTopNav"> 418 <div class="row"> 419 <div class="col-12 col-md-4"> 420 <a class="resource dropdown-item " href="/guides/"> 421 <span class="headline">Marketing Guides</span> 422 <span class="subtitle">Useful guides, videos, downloads, and best practices.</span> 423 </a> 424 </div> 425 <div class="col-12 col-md-4"> 426 <a class="resource dropdown-item " href="/podcast/"> 427 <span class="headline">On Growth Podcast</span> 428 <span class="subtitle">Grow with us by learning from our stories and customer interviews.</span> 429 </a> 430 </div> 431 <div class="col-12 col-md-4"> 432 <a class="resource dropdown-item " href="/blog/"> 433 <span class="headline">Blog</span> 434 <span class="subtitle">Insights for marketing your campaign like a pro.</span> 435 </a> 436 437 </div> 438 </div> 439 <div class="row"> 440 <div class="col-12 col-md-4"> 441 <a class="resource dropdown-item " href="https://support.kickofflabs.com/"> 442 <span class="headline">Support & Documentation</span> 443 <span class="subtitle">Find helpful documentation for the ins and outs of creating a viral campaign.</span> 444 </a> 445 446 </div> 447 <div class="col-12 col-md-4"> 448 <a class="resource dropdown-item " href="/showcase/"> 449 <span class="headline">Customer Showcase</span> 450 <span class="subtitle">
450See how other companies like you ran great campaigns.</span> 451 </a> 452 </div> 453 <div class="col-12 col-md-4"> 454 <a class="resource dropdown-item " href="/tools/"> 455 <span class="headline">Free Marketing Tools</span> 456 <span class="subtitle">Prompt builders, graders, and launch planning helpers.</span> 457 </a> 458 </div> 459 </div> 460 </div> 461 </li> 462 </ul> 463 464 <div class="form-inline"> 465 <a href="https://app.kickofflabs.com/login" class="btn btn-link login text-decoration-none">Log In</a> 466 <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> 467 </div> 468 </div> 469 </div> 470</nav> 471 472 <div id="pricing-page" class="billing-yearly"> 473 474 <!-- ============ HERO ============ --> 475 <header class="pp-hero"> 476 <div class="pp-hero-inner"> 477 <div class="pp-eyebrow">Pricing</div> 478 <h1>Grow with referrals. Pay for the scale you need.</h1> 479 <p class="pp-hero-sub">Turn audiences into influencers with viral giveaways, sweepstakes, and product launches.<span class="pp-hero-note">No contracts. Cancel anytime.</span></p> 480 <div class="pp-toggle" role="group" aria-label="Choose billing period"> 481 <button type="button" class="js-billing" data-billing="monthly">Pay Monthly</button> 482 <button type="button" class="js-billing active" data-billing="yearly">Pay Yearly — Save 30%</button> 483 </div> 484 </div> 485 </header> 486 487 <!-- ============ PLAN CARDS ============ --> 488 <section class="pp-plans" aria-label="Plans"> 489 <div class="pp-plans-grid"> 490 491 <!-- Hobby --> 492 <div class="pp-card"> 493 <h3>Hobby</h3> 494 <p class="pp-card-tagline">New business? Testing an idea?</p> 495 <div class="pp-price"> 496 <span class="pp-amount"><span class="js-price-yearly">$13</span><span class="js-price-monthly">$19</span></span> 497 <span class="pp-per">/mo</span> 498 </div> 499 <div class="pp-term"><span class="js-term-yearly">billed annually — saving 30%</span><span class="js-term-monthly">billed month to month</span></div> 500 <a class="pp-btn pp-btn--outline js-signup" data-signup-slug="plus" href="https://app.kickofflabs.com/signup/plus/?plan_term=12">Go Hobby</a> 501 <ul class="pp-features"> 502 <li><span><strong>500</strong> leads per month</span></li> 503 <li><span><strong>Unlimited</strong> campaigns & total leads</span></li> 504 <li><span><strong>1</strong> brand + custom domain</span></li> 505 <li><span>Autoresponder emails</span></li> 506 <li><span>Advanced fraud prevention</span></li> 507 </ul> 508 </div> 509 510 <!-- Premium --> 511 <div class="pp-card pp-card--featured"> 512 <div class="pp-badge">Most Popular</div> 513 <h3>Premium</h3> 514 <p class="pp-card-tagline">Just what's needed for small campaigns.</p> 515 <div class="pp-price"> 516 <span class="pp-amount"><span class="js-price-yearly">$48</span><span class="js-price-monthly">$69</span></span> 517 <span class="pp-per">/mo</span> 518 </div> 519 <div class="pp-term"><span class="js-term-yearly">billed annually — saving 30%</span><span class="js-term-monthly">billed month to month</span></div> 520 <a class="pp-btn pp-btn--solid js-signup" data-signup-slug="premium" href="https://app.kickofflabs.com/signup/premium/?plan_term=12">Go Premium</a> 521 <div class="pp-plus-label">Hobby, plus</div> 522 <ul class="pp-features"> 523 <li><span><strong>2,500</strong> leads per month</span></li> 524 <li><span>Branding-free landing pages</span></li> 525 <li><span>Reward level emails</span></li> 526 <li><span>A/B testing</span></li> 527 <li><span>Tracking pixels & scripts</span></li> 528 <li><span>Integrations</span></li> 529 </ul> 530 </div> 531 532 <!-- Business --> 533 <div class="pp-card"> 534 <h3>Business</h3> 535 <p class="pp-card-tagline">No branding. Every feature.</p> 536 <div class="pp-price">
537 <span class="pp-amount"><span class="js-price-yearly">$99</span><span class="js-price-monthly">$145</span></span> 538 <span class="pp-per">/mo</span> 539 </div> 540 <div class="pp-term"><span class="js-term-yearly">billed annually — saving 30%</span><span class="js-term-monthly">billed month to month</span></div> 541 <a class="pp-btn pp-btn--outline js-signup" data-signup-slug="max" href="https://app.kickofflabs.com/signup/max/?plan_term=12">Go Business</a> 542 <div class="pp-plus-label">Premium, plus</div> 543 <ul class="pp-features"> 544 <li><span><strong>10,000</strong> leads per month</span></li> 545 <li><span><strong>3</strong> brands, domains & team members</span></li> 546 <li><span>No KickoffLabs branding</span></li> 547 <li><span>SMS contests (optional)</span></li> 548 <li><span>Custom email templates & domains</span></li> 549 <li><span>Advanced reporting & actions</span></li> 550 </ul> 551 </div> 552 553 <!-- Enterprise --> 554 <div class="pp-card"> 555 <h3>Enterprise</h3> 556 <p class="pp-card-tagline">Manage large campaigns.</p> 557 <div class="pp-price"> 558 <span class="pp-amount"><span class="js-price-yearly">$202</span><span class="js-price-monthly">$289</span></span> 559 <span class="pp-per">/mo</span> 560 </div> 561 <div class="pp-term"><span class="js-term-yearly">billed annually — saving 30%</span><span class="js-term-monthly">billed month to month</span></div> 562 <a class="pp-btn pp-btn--outline js-signup" data-signup-slug="enterprise" href="https://app.kickofflabs.com/signup/enterprise/?plan_term=12">Go Enterprise</a> 563 <div class="pp-plus-label">Business, plus</div> 564 <ul class="pp-features"> 565 <li><span><strong>25,000</strong> leads per month</span></li> 566 <li><span><strong>5</strong> brands, domains & team members</span></li> 567 <li><span>SMS included — $50 value</span></li> 568 <li><span>Priority support</span></li> 569 <li><span>Free design tweaks</span></li> 570 <li><span>1:1 onboarding & setup meeting</span></li> 571 </ul> 572 </div> 573 </div> 574 575 <div class="pp-note"> 576 <p>Just kicking the tires? The <a href="https://app.kickofflabs.com/signup/free">free plan</a> lets you run a mini-campaign to 100 uniques a month.</p> 577 <p>Need it managed for you, or higher limits? <a href="mailto:[email protected]?subject=Custom%20plan%20request">Book a call</a> about a custom enterprise plan.</p> 578 </div> 579 </section> 580 581 <!-- ============ TRUST STRIP ============ --> 582 <section class="pp-trust" aria-label="Trusted by"> 583 <p class="pp-trust-label">Trusted by companies big and small</p> 584 <ul class="pp-trust-logos"> 585 <li><img src="/assets/images/pricing/logo-websummit.webp" width="307" height="72" loading="lazy" alt="WebSummit"></li> 586 <li><img src="/assets/images/pricing/logo-microsoft.webp" width="217" height="72" loading="lazy" alt="Microsoft"></li> 587 <li><img src="/assets/images/pricing/logo-match.webp" width="162" height="72" loading="lazy" alt="Match"></li> 588 <li><img src="/assets/images/pricing/logo-glowforge.webp" width="196" height="72" loading="lazy" alt="Glowforge"></li> 589 <li><img src="/assets/images/pricing/logo-blueapron.webp" width="156" height="72" loading="lazy" alt="Blue Apron"></li> 590 <li><img src="/assets/images/pricing/logo-nightfood.webp" width="208" height="72" loading="lazy" alt="Nightfood"></li> 591 <li><img src="/assets/images/pricing/logo-betches.webp" width="167" height="72" loading="lazy" alt="Betches"></li> 592 </ul> 593 </section> 594 595 <!-- ============ TESTIMONIAL BAND ============ --> 596 <section class="pp-testimonial" aria-label="Customer testimonial"> 597 <div class="pp-testimonial-inner"> 598 <img class="pp-testimonial-avatar js-t-avatar" src="https://static-app-kol.b-cdn.net/assets/testimonials/testimonial-14a8bfb400e5759f62ca2d64d0abdb3d5f23ddcefe3df2d9c326529927d25e0a.jpg" alt="Mike Madrid" width="76" height="76"> 599 <div class="pp-testimonial-quote-wrap"> 600 <p class="pp-testimonial-quote js-t-quote">Our launch got us 35,000 leads in 2 weeks with a 56.9% conversion rate. For every $1 spent we got roughly $1.86 back — 86.6% of leads came from the KickoffLabs social referral mechanism.</p> 601 </div> 602 <p class="pp-testimonial-name js-t-name">Mike Madrid — Founder, Comfortable Boxers</p> 603 <div class="pp-testimonial-dots js-t-dots"> 604 <button type="button" class="active" data-t="0" aria-label="Show testimonial 1"></button> 605 <button type="button" data-t="1" aria-label="Show testimonial 2"></button> 606 <button type="button" data-t="2" aria-label="Show testimonial 3"></button> 607 </div> 608 </div> 609 </section> 610 611 <!-- ============ COMPARE PLANS ============ --> 612 <section class="pp-compare" aria-label="Compare plans"> 613 <div class="pp-compare-inner"> 614 <div class="pp-section-head"> 615 <h2>Compare plans</h2> 616 <p>Find the plan that fits you perfectly.</p> 617 </div> 618 619 <div class="pp-compare-scroll"> 620 <div class="pp-compare-table"> 621 <!-- header row --> 622 <div class="pp-compare-header"> 623 <div></div> 624 <div class="pp-col"><div class="pp-col-name">Hobby</div><a class="js-signup" data-signup-slug="plus" href="https://app.kickofflabs.com/signup/plus/?plan_term=12">Sign Up</a></div> 625 <div class="pp-col"><div class="pp-col-name pp-col-name--featured">Premium</div><a class="js-signup" data-signup-slug="premium" href="https://app.kickofflabs.com/signup/premium/?plan_term=12">Sign Up</a></div> 626 <div class="pp-col"><div class="pp-col-name">Business</div><a class="js-signup" data-signup-slug="max" href="https://app.kickofflabs.com/signup/max/?plan_term=12">Sign Up</a></div> 627 <div class="pp-col"><div class="pp-col-name">Enterprise</div><a class="js-signup" data-signup-slug="enterprise" href="https://app.kickofflabs.com/signup/enterprise/?plan_term=12">Sign Up</a></div> 628 </div> 629 630 <!-- Pricing & limits --> 631 <div class="pp-compare-group-name">Pricing & limits</div> 632 <div class="pp-compare-row"> 633 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Leads per month</span><span class="pp-tip">Leads added through KickoffLabs each month. There is no total lead limit — plans upgrade automatically if you exceed your monthly limit.</span></div> 634 <div class="pp-cell">500</div><div class="pp-cell">2,500</div><div class="pp-cell">10,000</div><div class="pp-cell">25,000</div> 635 </div> 636 <div class="pp-compare-row"> 637 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Campaigns</span><span class="pp-tip">Each campaign is a separate list of customers collected with landing pages, opt-in forms, and email marketing.</span></div> 638 <div class="pp-cell">Unlimited</div><div class="pp-cell">Unlimited</div><div class="pp-cell">Unlimited</div><div class="pp-cell">Unlimited</div> 639 </div> 640 <div class="pp-compare-row"> 641 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Custom domains (SSL included)</span><span class="pp-tip">Publish pages to your secure (SSL encrypted) custom domains and manage different campaigns with unique domains.</span></div> 642 <div class="pp-cell">1</div><div class="pp-cell">1</div><div class="pp-cell">3</div><div class="pp-cell">5</div> 643 </div> 644 <div class="pp-compare-row"> 645 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Team accounts</span><span class="pp-tip">Invite clients or your development team.</span></div> 646 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">3</div><div class="pp-cell">5</div> 647 </div> 648 <div class="pp-compare-row"> 649 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Signups / API calls per minute</span><span class="pp-tip">Got a large existing audience and need to scale signups quickly?</span></div> 650 <div class="pp-cell">10</div><div class="pp-cell">25</div><div class="pp-cell">50</div><div class="pp-cell">100</div> 651 </div> 652 <div class="pp-compare-row"> 653 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Branding on pages & emails</span><span class="pp-tip">Free and Hobby plans include KickoffLabs branding on popups, landing pages, embeds, and emails.</span></div> 654 <div class="pp-cell">KickoffLabs branded</div><div class="pp-cell">Branding-free pages</div><div class="pp-cell">Removed</div><div class="pp-cell">Removed</div> 655 </div> 656 657 <!-- Campaign tools --> 658 <div class="pp-compare-group-name">Campaign tools</div> 659 <div class="pp-compare-row"> 660 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Landing pages, popups, embeds & AnyForm</span><span class="pp-tip">Unlimited responsive landing pages, popups and embeds with one line of code, plus AnyForm to make any existing page a viral form.</span></div> 661 <div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 662 </div> 663 <div class="pp-compare-row"> 664 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Smarter page A/B testing</span><span class="pp-tip">Test without losing conversions to a bad variation.</span></div> 665 <div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 666 </div> 667 <div class="pp-compare-row"> 668 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Tracking pixels & scripts</span><span class="pp-tip">Add popular tracking pixels and scripts from Facebook, Google, and others to your campaign.</span></div> 669 <div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 670 </div> 671 <div class="pp-compare-row"> 672 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Integrations & webhooks</span><span class="pp-tip">MailChimp, Facebook Audiences, Klaviyo, Slack, and Zapier — plus webhooks to push leads in or notify other services.</span></div> 673 <div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 674 </div> 675 <div class="pp-compare-row"> 676 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Advanced reporting</span><span class="pp-tip">Realtime reports on conversions, actions, sharing, and more — beyond the last 30 days.</span></div> 677 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 678 </div> 679 <div class="pp-compare-row"> 680 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">SMS contest messages</span><span class="pp-tip">Text signups and automatic replies to a lead's phone to encourage sharing.</span></div> 681 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">Optional +$50/mo</div><div class="pp-cell">Included</div> 682 </div> 683 684 <!-- Contest emails --> 685 <div class="pp-compare-group-name">Contest emails</div> 686 <div class="pp-compare-row"> 687 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Autoresponder emails</span><span class="pp-tip">Automated thank-you and follow-up messages with unique share links for every new lead.</span></div> 688 <div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 689 </div> 690 <div class="pp-compare-row"> 691 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Reward level emails</span><span class="pp-tip">Automatic emails that go out when leads reach specific sharing targets.</span></div> 692 <div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 693 </div> 694 <div class="pp-compare-row"> 695 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Discount code distribution</span><span class="pp-tip">Send unique discount codes from your online store to new leads, or automatically at contest point totals.</span></div> 696 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 697 </div> 698 <div class="pp-compare-row"> 699 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Custom email templates & domains</span><span class="pp-tip">Use custom HTML email designs and send contest emails from your own domain.</span></div> 700 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 701 </div> 702 703 <!-- Support --> 704 <div class="pp-compare-group-name">Support</div> 705 <div class="pp-compare-row"> 706 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Community & email support</span><span class="pp-tip">Help from KickoffLabs experts and peers. We're always happy to give you our two cents on your landing pages.</span></div> 707 <div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 708 </div> 709 <div class="pp-compare-row"> 710 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Custom domain setup</span><span class="pp-tip">We'll personally make sure you are up and running on your own domain.</span></div> 711 <div class="pp-cell">—</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div><div class="pp-cell">✓</div> 712 </div> 713 <div class="pp-compare-row"> 714 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">Free design tweaks</span><span class="pp-tip">Get your campaigns looking perfect for your brand with our assistance.</span></div> 715 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">✓</div> 716 </div> 717 <div class="pp-compare-row"> 718 <div class="pp-row-label"><span class="pp-row-term" tabindex="0">1:1 setup meeting & priority support</span><span class="pp-tip">Get 30 minutes with a KickoffLabs expert, and your questions answered first via chat, email, or a scheduled call.</span></div> 719 <div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">—</div><div class="pp-cell">✓</div> 720 </div> 721 </div> 722 </div> 723 </div> 724 </section> 725 726 <!-- ============ EVERY PLAN INCLUDES ============ --> 727 <section class="pp-includes" aria-label="Every plan includes"> 728 <div class="pp-includes-inner"> 729 <div class="pp-section-head"> 730 <h2>Every plan includes</h2> 731 <p>The essentials for running a viral campaign are built in — no add-ons required.</p> 732 </div>
733 <div class="pp-includes-grid"> 734 <div class="pp-include"><i class="fa-solid fa-share-nodes text-blue"></i><div class="pp-include-title">Viral boost</div><p>Get up to 35% more conversions with the built-in referral system.</p></div> 735 <div class="pp-include"><i class="fa-solid fa-link text-teal"></i><div class="pp-include-title">Unique referral links</div><p>Every lead gets a link that's easy to share on social networks.</p></div> 736 <div class="pp-include"><i class="fa-solid fa-trophy text-orange"></i><div class="pp-include-title">Winner Picker</div><p>Draw winners from entries, weighted by points earned.</p></div> 737 <div class="pp-include"><i class="fa-solid fa-file-lines text-purple"></i><div class="pp-include-title">Unlimited landing pages</div><p>Publish as many mobile-responsive pages as you need.</p></div> 738 <div class="pp-include"><i class="fa-solid fa-window-restore text-pink"></i><div class="pp-include-title">Popups & embeds</div><p>Run campaigns on your own site with one line of code.</p></div> 739 <div class="pp-include"><i class="fa-solid fa-wand-magic-sparkles text-blue"></i><div class="pp-include-title">AnyForm</div><p>Turn any existing page into a KickoffLabs viral form.</p></div> 740 <div class="pp-include"><i class="fa-solid fa-shield-halved text-teal"></i><div class="pp-include-title">Fraud prevention</div><p>Bots, disposable emails, and duplicate IPs flagged automatically.</p></div> 741 <div class="pp-include"><i class="fa-solid fa-file-import text-orange"></i><div class="pp-include-title">Import & export leads</div><p>Bring existing leads in, and export custom audiences out.</p></div> 742 </div> 743 </div> 744 </section> 745 746 <!-- ============ FAQ ============ --> 747 <section class="pp-faq" aria-label="Pricing FAQ"> 748 <div class="pp-faq-inner"> 749 <div class="pp-section-head"> 750 <h2>The fine print</h2> 751 <p>Answers to common pricing questions.</p> 752 </div> 753 <div class="pp-faq-grid"> 754 <div class="pp-faq-item"><div class="pp-faq-q">Can I change plans or cancel anytime?</div><p>Yes. Upgrade, downgrade, or cancel from your account page at any time. Upgrades are prorated for the current billing cycle.</p></div> 755 <div class="pp-faq-item"><div class="pp-faq-q">What's the refund policy?</div><p>Full refunds for any reason within 30 days of being charged. Refunds may not be issued if you've collected over 50 leads.</p></div> 756 <div class="pp-faq-item"><div class="pp-faq-q">What if I go over my monthly leads?</div><p>Your plan is automatically upgraded to match usage. Annual plans are billed $8 per extra 1,000 leads in months you go over.</p></div> 757 <div class="pp-faq-item"><div class="pp-faq-q">What if I need more than Enterprise?</div><p>Extra leads are $8 per 1,000 per month — or <a href="mailto:[email protected]?subject=Sales%20Question">contact us</a> for a custom enterprise agreement with lower rates.</p></div> 758 <div class="pp-faq-item"><div class="pp-faq-q">Is KickoffLabs GDPR compliant?</div><p>Yes. Read about our GDPR stance, DPA agreements, and compliance features in the <a href="https://support.kickofflabs.com/knowledgebase/gdpr-requests-at-kickofflabs">knowledge base</a>.</p></div> 759 <div class="pp-faq-item"><div class="pp-faq-q">When will I be charged?</div><p>As soon as you upgrade — with a full refund available for any reason during the first 30 days.</p></div> 760 <div class="pp-faq-item"><div class="pp-faq-q">What kind of support can I expect?</div><p>The best. Any technology can be copied — a customer experience is much harder. Contact us anytime, for any reason.</p></div> 761 <div class="pp-faq-item"><div class="pp-faq-q">More questions?</div><p>Email <a href="mailto:[email protected]?subject=Sales%20Question">[email protected]</a> — we're always happy to give you our two cents.</p></div> 762 </div> 763 </div> 764 </section> 765 766 <!-- ============ CTA STRIP ============ --> 767 <section class="pp-cta" aria-label="Get started"> 768 <div class="pp-cta-inner"> 769 <h2>Try KickoffLabs for free</h2> 770 <p>Run a mini-campaign to 100 uniques a month. No credit card required.</p> 771 <a class="pp-cta-btn" href="https://app.kickofflabs.com/signup/free">Start Free — No CC Required</a> 772 </div> 773 </section> 774 775</div> 776
777<script> 778 (function () { 779 var page = document.getElementById('pricing-page'); 780 if (!page) return; 781 782 // ---- Billing toggle: swaps prices/term via CSS class, and updates 783 // plan_term on every signup link (preserving attribution params) ---- 784 var billingBtns = page.querySelectorAll('.js-billing'); 785 var signupLinks = page.querySelectorAll('.js-signup'); 786 787 function setBilling(mode) { 788 page.classList.remove('billing-yearly', 'billing-monthly'); 789 page.classList.add('billing-' + mode); 790 billingBtns.forEach(function (b) { 791 b.classList.toggle('active', b.getAttribute('data-billing') === mode); 792 }); 793 var term = mode === 'yearly' ? '12' : '1'; 794 signupLinks.forEach(function (a) { 795 try { 796 var u = new URL(a.href, window.location.origin); 797 u.searchParams.set('plan_term', term); 798 a.href = u.toString(); 799 } catch (e) { /* leave link untouched */ } 800 }); 801 } 802 billingBtns.forEach(function (b) { 803 b.addEventListener('click', function () { 804 setBilling(b.getAttribute('data-billing')); 805 }); 806 }); 807 808 // ---- Keep the sticky compare header below the fixed site navbar ---- 809 var nav = document.getElementById('primary-top-nav'); 810 function syncNavOffset() { 811 if (!nav) return; 812 var h = Math.max(0, Math.round(nav.getBoundingClientRect().height)); 813 page.style.setProperty('--pp-nav-offset', h + 'px'); 814 } 815 syncNavOffset(); 816 window.addEventListener('resize', syncNavOffset); 817 window.addEventListener('load', syncNavOffset); 818 819 // ---- Rotating testimonials ---- 820 var testimonials = [ 821 { 822 avatar: 'https://static-app-kol.b-cdn.net/assets/testimonials/testimonial-14a8bfb400e5759f62ca2d64d0abdb3d5f23ddcefe3df2d9c326529927d25e0a.jpg', 823 quote: 'Our launch got us 35,000 leads in 2 weeks with a 56.9% conversion rate. For every $1 spent we got roughly $1.86 back â 86.6% of leads came from the KickoffLabs social referral mechanism.', 824 name: 'Mike Madrid â Founder, Comfortable Boxers' 825 }, 826 { 827 avatar: 'https://static-app-kol.b-cdn.net/assets/testimonials/yegor-662ec519062c9528a13febd193cceb6ed570f807ac15c3a0bc7bf470c647862a.jpg', 828 quote: 'When you build that initial group of people that are super excited about your campaign, they spread it, and then it becomes viral.', 829 name: 'Yegor Nadvornyy â Founder & CEO, Brainrich Kids' 830 }, 831 { 832 avatar: 'https://static-app-kol.b-cdn.net/assets/testimonials/david-aee55c2a87ee0077f05ecf149cbc6e202ad0c8bcbeb4604c1aa1d9763c8e67c3.png', 833 quote: 'The great thing with KickoffLabs is that it let us set up the referral program before the app was ready.', 834 name: 'David Gobaud â Founder + CEO, Passfolio' 835 } 836 ]; 837 var avatarEl = page.querySelector('.js-t-avatar'); 838 var quoteEl = page.querySelector('.js-t-quote'); 839 var nameEl = page.querySelector('.js-t-name'); 840 var dots = page.querySelectorAll('.js-t-dots button'); 841 var idx = 0, timer = null; 842 843 function showT(i) { 844 idx = (i + testimonials.length) % testimonials.length; 845 var t = testimonials[idx]; 846 if (avatarEl) { avatarEl.src = t.avatar; avatarEl.alt = t.name; } 847 if (quoteEl) quoteEl.textContent = t.quote; 848 if (nameEl) nameEl.textContent = t.name; 849 dots.forEach(function (d, di) { d.classList.toggle('active', di === idx); }); 850 } 851 function stopAuto() { if (timer) { clearInterval(timer); timer = null; } } 852 function startAuto() { stopAuto(); timer = setInterval(function () { showT(idx + 1); }, 7000); } 853 854 dots.forEach(function (d, di) { 855 d.addEventListener('click', function () { stopAuto(); showT(di); }); 856 }); 857 if (testimonials.length) { showT(0); startAuto(); } 858 })(); 859</script>
859 860 861 <!-- General Page Footer --> 862 863<footer id="top-footer"> 864 <div class="container"> 865 <div class="row small-spacer"> 866 <div class="col-md-3 col-5"> 867 <!-- Product --> 868 <h2>Product</h2> 869 <p><a href="/why-kickofflabs/">Why KickoffLabs</a></p> 870 <p><a href="/how-it-works/">How It Works</a></p> 871 <p><a href="/landing-page-templates/">Page Templates</a></p> 872 <p><a href="/pricing/">Pricing</a></p> 873 </div> 874 875 <!-- Campaign Types â generated from _data/campaigns.yml (footer: true) --> 876 <div class="col-md-3 offset-md-0 col-5"> 877 <h2>Campaign Types</h2> 878 879 880 <p><a href="/campaign-types/giveaways/">Giveaways & Contests</a></p> 881 882 <p><a href="/campaign-types/leaderboard-giveaways/">Leaderboard Giveaway</a></p> 883 884 <p><a href="/campaign-types/sweepstakes/">Bonus-Entry Sweepstakes</a></p> 885 886 <p><a href="/campaign-types/waitlist/">Waitlists</a></p> 887 888 <p><a href="/campaign-types/referral-waitlist/">Referral Waitlist</a></p> 889 890 <p><a href="/campaign-types/reward-levels/">Milestone Rewards</a></p> 891 892 <p><a href="/campaign-types/email-opt-in/">Lead Magnets</a></p> 893 894 <p><a href="/campaign-types/event-promotion/">Event Promotion</a></p> 895 896 </div> 897 898 <!-- Resources --> 899 <div class="col-md-3 offset-md-0 col-5"> 900 <h2>Resources</h2> 901 <p><a href="/podcast/">Podcast</a></p> 902 <p><a href="/blog/">Blog</a></p> 903 <p><a href="https://support.kickofflabs.com">Support</a></p> 904 <p><a href="https://api.kickofflabs.com/">API Documentation</a></p> 905 </div> 906 907 <!-- Company --> 908 <div class="col-md-3 offset-md-0 col-5"> 909 <h2>Company</h2> 910 <p><a href="/affiliate/">Become an Affiliate</a></p> 911 <p><a href="/showcase/">Customer Showcase</a></p> 912 <p><a href="/why-kickofflabs/quotes/">Customer Quotes</a></p> 913 <p><a href="/company/">Team</a></p> 914 <p> 915 <a href="https://www.facebook.com/kickofflabs" rel="noopener noreferrer">Facebook</a> 916 </p> 917 <p> 918 <a href="https://www.threads.net/@usekickofflabs" rel="noopener noreferrer">Threads</a> 919 </p> 920 <p> 921 <a href="https://twitter.com/kickofflabs" rel="noopener noreferrer">X</a> 922 </p> 923 </div> 924 925 </div> 926 </div> 927</footer> 928 929 930<footer id="bottom-footer"> 931 <div class="container"> 932 <div class="row mini-spacer"> 933 <div class="col-7"> 934 <p>© 2026 KickoffLabs - <a href="/legal/terms-of-service/">Terms</a> - <a 935 href="/legal/privacy-policy/">Privacy</a></p> 936 937 </div> 938 939 </div> 940 941 </div> 942 943 944</footer> 945 946<!-- FREE SIGNUP MODAL CODE --> 947<div id="signup-free" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="signupFree"> 948 <div class="modal-dialog modal-lg" role="document"> 949 <div class="modal-content"> 950 <div class="modal-body"> 951 <div class="form"> 952 <form data-bs-toggle="validator" data-disable="false" data-delay="10000" id="free_account_sign_up_form" 953 role="form" action="https://app.kickofflabs.com/signup/free-user" accept-charset="UTF-8" class="" 954 method="post"> 955 <img class="" src="/assets/images/logo_on_light_473x102.webp" alt="KickoffLabs Logo" width="140" height="20"> 956 <p class="small-spacer-top" style="font-size:14px">Start building with amazing support today. No credit card 957 required. </p> 958 <input name="utf8" type="hidden" value="â"> 959 <div class="form-group"> 960 <label for="_email">Email Address</label> 961 <input required required="required" id="email" placeholder="Email" class="form-control input-lg" 962 name="email" type="email" data-error="You must include a valid email address." data-bs-toggle="tooltip" 963 data-title="Email is required to create an account and access the services. We will provide account related communications to this email." 964 data-placement="right"> 965 966 </div> 967 <div class="form-group"> 968 <label for="_password">Password</label> 969 <input required required="required" id="password" data-minlength="4" 970 data-error="Your password must be at least 4 characters long." placeholder="****" 971 class="form-control input-lg" name="password" type="password"> 972 <div class="help-block with-errors" style="font-size:12px;"></div> 973 </div> 974 <div class="form-group text-left"> 975 <div class="checkbox"> 976 <label for="_terms"> 977 978 <input style="margin-top: 6px;" id="_terms" name="terms" required="required" type="checkbox" 979 data-original-title="" title=""><span style="font-size:14px;line-height:23px;"> I agree to the 980 KickoffLabs <a target="_blank" href="https://kickofflabs.com/legal/terms-of-service/">terms of 981 service</a> and <a target="_blank" href="https://kickofflabs.com/legal/privacy-policy/">privacy 982 policy</a>. 983 </span> 984 </label> 985 </div> 986 </div> 987 988 <input id="visitorId" type="hidden" name="visitor_id"></input> 989 <input id="timezone" type="hidden" name="[timezone]"></input> 990 <input id="starter_page" type="hidden" name="starter_page" value=""></input> 991 <input type="hidden" id="signup_form" class="signup-form-value" name="signup_form" value="not set"></input> 992 <input type="hidden" id="referer" name="referer" value=''></input> 993 <input type="hidden" id="turnstile_token" name="turnstile_token" value=''></input> 994 <div id="turnstile-container"></div> 995 <input type="submit" name="commit" value="Get Started!" 996 class="btn btn-blue btn-lg btn-block w-100 free-modal"> 997 <p class="mb-2 mt-2" style="font-size:12px; text-align:center;">or</p> 998 <a href="https://app.kickofflabs.com/auth/google_oauth2" 999 class="btn btn-ghost-blue w-100 btn-md btn-block free-modal"> 1000 <span class="" width="14px" height="14px" style="height: 14px; width: 14px;"><svg class="svg" width="14" 1001 height="14" viewBox="0 0 18 18" xmlns="http://www.w3.org/2000/svg"> 1002 <path 1003 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" 1004 fill-rule="evenodd" fill-opacity="1" fill="#4285f4" stroke="none"></path> 1005 <path 1006 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" 1007 fill-rule="evenodd" fill-opacity="1" fill="#34a853" stroke="none"></path> 1008 <path 1009 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" 1010 fill-rule="evenodd" fill-opacity="1" fill="#fbbc05" stroke="none"></path> 1011 <path 1012 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" 1013 fill-rule="evenodd" fill-opacity="1" fill="#ea4335" stroke="none"></path> 1014 </svg></span> Start with Google</a> 1015 </form> 1016 1017
1018 </div> 1019 <div class="image" 1020 style="background: url('/assets/images/home/signup-graphic.webp'); background-size: cover; background-position: center;"> 1021 </div> 1022 <button type="button" class="close btn btn-outline" data-bs-dismiss="modal" aria-label="Close"><span 1023 aria-hidden="true">Ã</span></button> 1024 </div> <!--- modal-body --> 1025 </div><!-- /.modal-content --> 1026 </div><!-- /.modal-dialog --> 1027</div><!-- /.modal --> 1028 1029<!-- Video Modal --> 1030 1031<!-- Intro Video Modal --> 1032<div class="modal fade" id="video-modal" tabindex="-1" role="dialog" aria-labelledby="video-modal" aria-hidden="true"> 1033 <div class="modal-dialog modal-dialog-centered modal-lg" role="document"> 1034 <div class="modal-content"> 1035 <div class="modal-body"> 1036 <iframe id="video-frame-src" src="" width="640" height="360" frameborder="0" allow="autoplay; fullscreen" 1037 allowfullscreen></iframe> 1038 </div> 1039 </div> 1040 </div> 1041</div> 1042 1043<!-- Image Modal Code--> 1044<!-- Modal --> 1045<div id="imagemodal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" 1046 aria-hidden="true"> 1047 <div class="modal-header"> 1048 <button type="button" class="close" data-bs-dismiss="modal" aria-hidden="true">Ã</button> 1049 </div> 1050 <div class="modal-body"> 1051 <img id="image-modal-image" src="" alt="Enlarged image preview"> 1052 </div> 1053</div> 1054 1055 1056<!-- JS --> 1057
1058<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" 1059 integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous" defer></script>
vendor: 1 bytes, line 1059
1059
1060<script src="https://unpkg.com/lite-vimeo-embed" defer></script>
vendor: 1 bytes, line 1060
1060
1061<script type="text/javascript"> 1062 window.__kolLoadScriptOnce = window.__kolLoadScriptOnce || function (src, attrs) { 1063 window.__kolScriptPromises = window.__kolScriptPromises || {}; 1064 if (window.__kolScriptPromises[src]) return window.__kolScriptPromises[src]; 1065 1066 window.__kolScriptPromises[src] = new Promise(function (resolve, reject) { 1067 var s = document.createElement('script'); 1068 s.src = src; 1069 s.async = true; 1070 if (attrs) { 1071 Object.keys(attrs).forEach(function (key) { 1072 s.setAttribute(key, attrs[key]); 1073 }); 1074 } 1075 s.onload = resolve; 1076 s.onerror = reject; 1077 document.head.appendChild(s); 1078 }); 1079 1080 return window.__kolScriptPromises[src]; 1081 }; 1082 1083 window.__kolLoadStylesheetOnce = window.__kolLoadStylesheetOnce || function (href) { 1084 if (document.querySelector('link[href="' + href + '"]')) return; 1085 var l = document.createElement('link'); 1086 l.href = href; 1087 l.rel = 'stylesheet'; 1088 document.head.appendChild(l); 1089 }; 1090 1091 1092 window.__kolLoadTurnstile = window.__kolLoadTurnstile || function () { 1093 return window.__kolLoadScriptOnce('https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit'); 1094 }; 1095 1096 window.__kolLoadFingerprint = window.__kolLoadFingerprint || function () { 1097 return window.__kolLoadScriptOnce('https://cdnjs.cloudflare.com/ajax/libs/fingerprintjs2/2.1.0/fingerprint2.min.js'); 1098 }; 1099 //script the navbar ready state. 1100 var kol_skip_font_awesome = true; 1101 1102 document.addEventListener('DOMContentLoaded', function () { 1103 1104 1105 1106 1107 1108 1109 // set specific link active. 1110 document.querySelectorAll('#primary-top-nav a, #primary-top-nav li').forEach(function (el) { 1111 el.classList.remove('active'); 1112 }); 1113 1114 if (location.pathname.length > 1) { 1115 1116 var picked = document.querySelector('#primary-top-nav a[href="' + location.pathname + '"]'); 1117 if (picked !== null) { 1118 picked.classList.add('active'); 1119 picked.closest("li").classList.add('active'); 1120 } 1121 1122 // only do a match if there is just one. 1123 var similarLinks = document.querySelectorAll('#primary-top-nav a[href^="/' + location.pathname.split("/")[1] + '"]'); 1124 if ((picked === null) && (similarLinks.length === 1)) { 1125 similarLinks[0].classList.add('active'); 1126 similarLinks[0].closest("li").classList.add('active'); 1127 } 1128 1129 // otherwise try and pick a top level menu. 1130 if ((picked === null) && (similarLinks.length > 1)) { 1131 similarLinks.forEach(function (el) { 1132 el.closest("li").classList.add('active'); 1133 }); 1134 } 1135 1136 } 1137 // actions on signup modal 1138 document.getElementById('signup-free').addEventListener('shown.bs.modal', function () { 1139 document.getElementById('email').focus(); 1140 if (typeof fathom !== 'undefined') { 1141 var v = localStorage.getItem('ab_dark_hero_v1') || 'unknown'; 1142 fathom.trackEvent('ab_dark_hero_v1_form_open_' + v); 1143 } 1144 }); 1145 1146 // Track signup form submission 1147 document.getElementById('free_account_sign_up_form').addEventListener('submit', function () { 1148 if (typeof fathom !== 'undefined') { 1149 var v = localStorage.getItem('ab_dark_hero_v1') || 'unknown'; 1150 fathom.trackEvent('ab_dark_hero_v1_signup_' + v); 1151 } 1152 }); 1153 1154 var videoModal = document.getElementById('video-modal'); 1155 videoModal.addEventListener('show.bs.modal', function (event) { 1156 var button = event.relatedTarget; 1157 var frameSrc = button.dataset.videoFrameSrc; 1158 var modal = this; 1159 modal.querySelector('#video-frame-src').src = frameSrc + "?autoplay=true"; 1160 }); 1161 1162 videoModal.addEventListener('hide.bs.modal', function (event) { 1163 var modal = this; 1164 modal.querySelector('#video-frame-src').src = ''; 1165 }); 1166 1167 }); 1168</script>
1168 1169 1170 1171 1172
1173<script> 1174 // --- KOL Attribution Tracking --- 1175 // Captures UTMs, click IDs, and referrer on first page load. 1176 // Stores first-touch (localStorage) and last-touch (sessionStorage). 1177 // Populates hidden form fields and decorates app.kickofflabs.com links. 1178 (function () { 1179 var UTM_KEYS = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']; 1180 var CLICK_ID_KEYS = ['fbclid', 'gclid']; 1181 var ALL_KEYS = UTM_KEYS.concat(CLICK_ID_KEYS); 1182 var FIRST_TOUCH_KEY = 'kol_first_touch'; 1183 var LAST_TOUCH_KEY = 'kol_last_touch'; 1184 var STARTER_PAGE_KEY = 'kol_starter_page'; 1185 1186 function getParams() { 1187 var params = {}; 1188 try { 1189 var sp = new URLSearchParams(window.location.search); 1190 ALL_KEYS.forEach(function (k) { 1191 var v = sp.get(k); 1192 if (v) params[k] = v; 1193 }); 1194 } catch (e) { /* old browser fallback not needed for target audience */ } 1195 return params; 1196 } 1197 1198 function readStore(storage, key) { 1199 try { 1200 var raw = storage.getItem(key); 1201 return raw ? JSON.parse(raw) : null; 1202 } catch (e) { return null; } 1203 } 1204 1205 function writeStore(storage, key, obj) { 1206 try { storage.setItem(key, JSON.stringify(obj)); } catch (e) { /* quota */ } 1207 } 1208 1209 // Capture current page params 1210 var currentParams = getParams(); 1211 var hasNewAttribution = Object.keys(currentParams).length > 0; 1212 var referrer = document.referrer || ''; 1213 1214 // First-touch: write once, never overwrite 1215 if (!readStore(localStorage, FIRST_TOUCH_KEY)) { 1216 var firstTouch = {}; 1217 ALL_KEYS.forEach(function (k) { if (currentParams[k]) firstTouch[k] = currentParams[k]; }); 1218 if (referrer) firstTouch.referrer = referrer; 1219 firstTouch.landing_page = window.location.href; 1220 firstTouch.ts = new Date().toISOString(); 1221 writeStore(localStorage, FIRST_TOUCH_KEY, firstTouch); 1222 } 1223 1224 // Starter page: write once 1225 if (!localStorage.getItem(STARTER_PAGE_KEY)) { 1226 try { localStorage.setItem(STARTER_PAGE_KEY, window.location.href); } catch (e) {} 1227 } 1228 1229 // Last-touch: update when new UTMs arrive 1230 if (hasNewAttribution) { 1231 var lastTouch = {}; 1232 ALL_KEYS.forEach(function (k) { if (currentParams[k]) lastTouch[k] = currentParams[k]; }); 1233 if (referrer) lastTouch.referrer = referrer; 1234 lastTouch.landing_page = window.location.href; 1235 lastTouch.ts = new Date().toISOString(); 1236 writeStore(sessionStorage, LAST_TOUCH_KEY, lastTouch); 1237 } else if (!readStore(sessionStorage, LAST_TOUCH_KEY)) { 1238 // No UTMs and no session data yet â store referrer-only touch 1239 var refTouch = {}; 1240 if (referrer) refTouch.referrer = referrer; 1241 refTouch.landing_page = window.location.href; 1242 refTouch.ts = new Date().toISOString(); 1243 writeStore(sessionStorage, LAST_TOUCH_KEY, refTouch); 1244 } 1245 1246 // Expose for use by DOMContentLoaded handler below 1247 window.__kolAttribution = { 1248 firstTouch: readStore(localStorage, FIRST_TOUCH_KEY) || {}, 1249 lastTouch: readStore(sessionStorage, LAST_TOUCH_KEY) || {}, 1250 starterPage: localStorage.getItem(STARTER_PAGE_KEY) || '' 1251 }; 1252 })(); 1253 1254 function appendQueryParameterToLinks(targetUrl, parameter, value) { 1255 var links = document.querySelectorAll('a[href]'); 1256 1257 links.forEach(function (link) { 1258 if (link.getAttribute('href') === targetUrl) { 1259 if (targetUrl.includes('?')) { 1260 link.setAttribute('href', targetUrl + '&' + parameter + '=' + value); 1261 } else { 1262 link.setAttribute('href', targetUrl + '?' + parameter + '=' + value); 1263 } 1264 } 1265 }); 1266 } 1267 1268 // Decorate all app.kickofflabs.com links with attribution params 1269 function decorateAppLinks() { 1270 var attr = window.__kolAttribution || {}; 1271 var ft = attr.firstTouch || {}; 1272 var lt = attr.lastTouch || {}; 1273 1274 // Build params: prefer last-touch UTMs, fall back to first-touch 1275 var params = []; 1276 ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid'].forEach(function (k) { 1277 var val = lt[k] || ft[k]; 1278 if (val) params.push(k + '=' + encodeURIComponent(val)); 1279 }); 1280 // Always include first-touch referrer and starter page if available 1281 if (ft.referrer) params.push('kol_referrer=' + encodeURIComponent(ft.referrer)); 1282 if (attr.starterPage) params.push('starter_page=' + encodeURIComponent(attr.starterPage)); 1283 1284 if (params.length === 0) return; 1285 var paramStr = params.join('&'); 1286 1287 document.querySelectorAll('a[href*="app.kickofflabs.com"]').forEach(function (link) { 1288 var href = link.getAttribute('href'); 1289 // Skip if we already decorated this link 1290 if (href.indexOf('utm_source=') !== -1 || href.indexOf('kol_referrer=') !== -1) return; 1291 if (href.indexOf('?') !== -1) { 1292 link.setAttribute('href', href + '&' + paramStr); 1293 } else { 1294 link.setAttribute('href', href + '?' + paramStr); 1295 } 1296 }); 1297 } 1298 1299 document.addEventListener("DOMContentLoaded", function () { 1300 var attr = window.__kolAttribution || {}; 1301 1302 // Populate signup_form (current page URL) â existing behavior 1303 document.querySelectorAll('.signup-form-value').forEach(function (el) { 1304 el.value = window.location.href || "no href"; 1305 }); 1306 1307 // Populate referer fields (ALL of them â handles duplicate IDs on campaign pages) 1308 var referrerValue = attr.firstTouch.referrer || document.referrer || ''; 1309 document.querySelectorAll('input[name="referer"]').forEach(function (el) { 1310 el.value = referrerValue; 1311 }); 1312 1313 // Populate starter_page fields 1314 var starterPage = attr.starterPage || window.location.href; 1315 document.querySelectorAll('input[name="starter_page"]').forEach(function (el) { 1316 el.value = starterPage; 1317 }); 1318 1319 // Populate structured attribution fields (utm_*, click IDs, kol_referrer) on 1320 // every signup form so they POST as discrete params rather than relying on 1321 // Rails parsing them back out of the signup_form / starter_page URLs. 1322 // Prefer last-touch, fall back to first-touch (matches decorateAppLinks). 1323 var ft = attr.firstTouch || {}; 1324 var lt = attr.lastTouch || {}; 1325 var attributionFields = { 1326 utm_source: lt.utm_source || ft.utm_source || '', 1327 utm_medium: lt.utm_medium || ft.utm_medium || '', 1328 utm_campaign: lt.utm_campaign || ft.utm_campaign || '', 1329 utm_term: lt.utm_term || ft.utm_term || '', 1330 utm_content: lt.utm_content || ft.utm_content || '', 1331 fbclid: lt.fbclid || ft.fbclid || '', 1332 gclid: lt.gclid || ft.gclid || '', 1333 kol_referrer: ft.referrer || '' 1334 }; 1335 document.querySelectorAll('form[action*="signup/free-user"]').forEach(function (form) {
1336 Object.keys(attributionFields).forEach(function (name) { 1337 var value = attributionFields[name]; 1338 if (!value) return; // never send empty fields; Rails only writes present ones 1339 var input = form.querySelector('input[name="' + name + '"]'); 1340 if (!input) { 1341 input = document.createElement('input'); 1342 input.type = 'hidden'; 1343 input.name = name; 1344 form.appendChild(input); 1345 } 1346 input.value = value; 1347 }); 1348 }); 1349 1350 // Decorate signup/OAuth/pricing links with attribution 1351 appendQueryParameterToLinks('https://app.kickofflabs.com/auth/google_oauth2', 'signup_form', encodeURIComponent(window.location.href)); 1352 decorateAppLinks(); 1353 1354 var hydrateFingerprint = function () { 1355 if (window.__kolFingerprintHydrated) return; 1356 window.__kolFingerprintHydrated = true; 1357 1358 window.__kolLoadFingerprint().then(function () { 1359 if (!window.Fingerprint2) return; 1360 Fingerprint2.getV18(function (visitorId) { 1361 document.querySelectorAll('input[name="visitor_id"]').forEach(function (el) { 1362 el.value = visitorId; 1363 }); 1364 }); 1365 }).catch(function () { /* fingerprint is attribution-only; never block signup */ }); 1366 }; 1367 1368 document.getElementById('signup-free').addEventListener('shown.bs.modal', hydrateFingerprint); 1369 document.getElementById('free_account_sign_up_form').addEventListener('submit', hydrateFingerprint); 1370 }); 1371</script>
vendor: 1 bytes, line 1371
1371
1372<script> 1373 (function () { 1374 var loadFontAwesome = function () { 1375 window.__kolLoadScriptOnce('https://kit.fontawesome.com/413baa29c3.js', { crossorigin: 'anonymous' }); 1376 }; 1377 1378 if ('requestIdleCallback' in window) { 1379 window.requestIdleCallback(loadFontAwesome, { timeout: 3000 }); 1380 } else { 1381 window.setTimeout(loadFontAwesome, 1500); 1382 } 1383 })(); 1384</script>
vendor: 1 bytes, line 1384
1384
1385<script> 1386 (function () { 1387 var turnstileRendered = false; 1388 1389 document.addEventListener("shown.bs.modal", function (event) { 1390 if (turnstileRendered) return; 1391 if (!event.target || event.target.id !== 'signup-free') return; 1392 1393 window.__kolLoadTurnstile().then(function () { 1394 if (!window.turnstile || !document.getElementById("turnstile-container")) return; 1395 turnstileRendered = true; 1396 turnstile.render("#turnstile-container", { 1397 sitekey: "0x4AAAAAAALMZRI9LDpjKuIR", 1398 action: "main", 1399 callback: function (token) { 1400 const turnstile_token_element = document.getElementById("turnstile_token") 1401 if (turnstile_token_element) { 1402 turnstile_token_element.value = token; 1403 let googleButton = document.querySelector('a.btn-ghost-blue'); 1404 if (googleButton) { 1405 if (googleButton.href.includes('?')) { 1406 googleButton.href += '&turnstile_token=' + encodeURIComponent(token); 1407 } else { 1408 googleButton.href += '?turnstile_token=' + encodeURIComponent(token); 1409 } 1410 } 1411 } else { 1412 console.log("Missing Turnstile Token Element"); 1413 } 1414 console.log("Challenge Success", token); 1415 }, 1416 }); 1417 }).catch(function () { /* signup form handles missing token server-side */ }); 1418 }) 1419 })(); 1420</script>
vendor: 1 bytes, line 1420
1420
1421<script> 1422 document.addEventListener("DOMContentLoaded", function () { 1423 // Find the TOC within the 'mobile-toc' class 1424 var mobileTocWrapper = document.querySelector('.mobile-toc'); 1425 var mobileToc = document.querySelector('.mobile-toc #toc'); 1426 if (!mobileToc) return; // Exit if no TOC found 1427 1428 // Create dropdown button 1429 var dropdownButton = document.createElement('button'); 1430 dropdownButton.classList.add('btn', 'btn-outline-dark', 'dropdown-toggle'); 1431 dropdownButton.setAttribute('type', 'button'); 1432 dropdownButton.setAttribute('data-bs-toggle', 'dropdown'); 1433 dropdownButton.setAttribute('aria-expanded', 'false'); 1434 dropdownButton.textContent = 'Contents'; 1435 1436 // Create dropdown menu 1437 var dropdownMenu = document.createElement('ul'); 1438 dropdownMenu.classList.add('dropdown-menu'); 1439 1440 // Move existing list items to dropdown menu 1441 while (mobileToc.children.length > 0) { 1442 var item = mobileToc.children[0]; 1443 item.classList.add('dropdown-item'); 1444 dropdownMenu.appendChild(item); 1445 } 1446 1447 // Create the container for the dropdown 1448 var dropdownContainer = document.createElement('div'); 1449 dropdownContainer.classList.add('dropdown'); 1450 1451 // Assemble the dropdown 1452 dropdownContainer.appendChild(dropdownButton); 1453 dropdownContainer.appendChild(dropdownMenu); 1454 1455 // Replace the old TOC with the new dropdown 1456 mobileToc.parentNode.replaceChild(dropdownContainer, mobileToc); 1457 mobileTocWrapper.style.display = 'block'; 1458 }); 1459 1460</script>
1460 1461
1461<script src="https://cdn.kickoffpages.com/2.1.0/kol.js" id="koljs" data-campaign-id="2" data-cookie-domain="kickofflabs.com" async></script>
1461<script> 1462(function () { 1463 var BEACON_ID = '757ce3b7-e651-44a3-a4cf-fed5fccdad8c'; 1464 var loaded = false; 1465 1466 // Keep HelpScout's queue API available before the real script loads. 1467 window.Beacon = window.Beacon || function (method, options, data) { 1468 window.Beacon.readyQueue.push({ 1469 method: method, 1470 options: options, 1471 data: data 1472 }); 1473 }; 1474 window.Beacon.readyQueue = window.Beacon.readyQueue || []; 1475 1476 function loadHelpScout() { 1477 if (loaded) return; 1478 loaded = true; 1479 1480 var script = document.createElement('script'); 1481 script.type = 'text/javascript'; 1482 script.async = true; 1483 script.src = 'https://beacon-v2.helpscout.net'; 1484 document.head.appendChild(script); 1485 1486 window.Beacon('init', BEACON_ID); 1487 } 1488 1489 function loadOnFirstInteraction() { 1490 loadHelpScout(); 1491 window.removeEventListener('scroll', loadOnFirstInteraction); 1492 window.removeEventListener('mousemove', loadOnFirstInteraction); 1493 window.removeEventListener('touchstart', loadOnFirstInteraction); 1494 window.removeEventListener('keydown', loadOnFirstInteraction); 1495 } 1496 1497 // Load when the user shows intent. 1498 window.addEventListener('scroll', loadOnFirstInteraction, { once: true, passive: true }); 1499 window.addEventListener('mousemove', loadOnFirstInteraction, { once: true, passive: true }); 1500 window.addEventListener('touchstart', loadOnFirstInteraction, { once: true, passive: true }); 1501 window.addEventListener('keydown', loadOnFirstInteraction, { once: true, passive: true }); 1502 1503 // Also load after the page is idle, so chat still appears for passive visitors. 1504 window.addEventListener('load', function () { 1505 if ('requestIdleCallback' in window) { 1506 requestIdleCallback(loadHelpScout, { timeout: 5000 }); 1507 } else { 1508 setTimeout(loadHelpScout, 3500); 1509 } 1510 }); 1511})(); 1512</script>
1512</body> 1513</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.