1 2 3<!DOCTYPE html> 4<html> 5<head> 6 7 <link rel="shortcut icon" type="image/x-icon" href="https://vertassets.blob.core.windows.net/sites/favicons/vm-favicon.ico"/> 8 <title>School Buyer's Online: Digital Marketplace for the education industry</title> 9 <link rel="preconnect" href="https://munchkin.marketo.net" crossorigin/> 10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin/> 11 <link rel="dns-prefetch" href="https://cdn.onesignal.com" crossorigin/> 12 <link rel="dns-prefetch" href="https://www.googletagmanager.com" crossorigin/> 13 <link rel="dns-prefetch" href="https://vertassets.blob.core.windows.net/" crossorigin/> 14 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Arimo|Roboto+Condensed|Oswald|Oxygen|Open+Sans"/> 15 16 17 18<meta charset="utf-8" /> 19<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2" /> 20<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 21 22<meta name="title" content="School Buyer's Online: Digital Marketplace for the education industry" /> 23<meta name="description" content="Resource for professionals in the education industry- Information on education, public schools, school finance, board of education, teachers, assistant superintendents, principals, special education and more" /> 24 <meta property="og:image" content="https://vertassets.blob.core.windows.net/sites/logos/sbuys.png"> 25<link rel="canonical" href="https://www.schoolbuyersonline.com/" /> 26 27
27<script src="https://code.jquery.com/jquery-3.5.1.min.js" 28 integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" 29 crossorigin="anonymous"></script>
29 30 31
31<script src="/js/site.js?v=_DeyMHfVIhCGMr2jRZCw30fVpBAfwYigqkTnCeURzxE"></script>
vendor: 114 bytes, lines 31-35
31 32 33 34 35 <script async src="https://www.google.com/recaptcha/enterprise.js?onload=loadRecaptcha&render=
356Lcl0Z8qAAAAADRTBFqol-uEvsmwWHnNiedoGJdv
vendor: 35 bytes, lines 35-36
35&trustedtypes=true"></script> 36
36<script type="text/javascript"> 37 window['__RECAPTCHA_PUBLIC_KEY__'] = '6Lcl0Z8qAAAAADRTBFqol-uEvsmwWHnNiedoGJdv'; 38 39 window['__OPT_IN_CONFIRMATION_PAGE__'] = ''; 40 </script>
40 41 42 43 44 <link rel="stylesheet" href="/css/lib.css?v=_c4rzDumxhYdb0MZ6QnCtnjJH4swr6ivicSO31k7D1w"> 45 <link rel="stylesheet" href="/css/themes/default.css?v=apvU8hrAeEpe7C1_knSBwRnBCWDq2uz0pDUz9PYMELM" /> 46 <link rel="stylesheet" href="/css/gdpr-consent.css" /> 47 48 49
49<script type="text/javascript"> 50 window["__currentOnline__"]= 'SBUYS'; 51 window["__mainPopUpFormId__"] = ''; 52 window.googletag = window.googletag || {}; 53 window.googletag.cmd = window.googletag.cmd || []; 54 </script>
54 55 56
57<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" async=""></script>
vendor: 2 bytes, line 57
57
58<script> 59 var OneSignal = window.OneSignal || []; 60 OneSignal.push(function() { 61 OneSignal.init({ 62 appId: '90aa9b3f-762c-4d15-a7e5-a865c006d031' 63 }); 64 }); 65</script>
65 66 67 68<!-- AdDaptive Pixel -->
69<script> 70(function () { 71 var tagUrl = "s.dpmsrv.com/dpm_2ef94c5be6406817949fc2211a9cdf209bdd4a1b.min.js"; 72 73 function hasAdvertisingConsent() { 74 var match = document.cookie.match(/(?:^|; )cookieyes-consent=([^;]*)/); 75 if (!match) { return false; } 76 var value = decodeURIComponent(match[1]); 77 return /(?:^|,)advertisement:yes(?:,|$)/.test(value); 78 } 79 80 function loadPixel() { 81 var h = document.getElementsByTagName('head')[0]; 82 var s = document.createElement('script'); 83 var sc = 'https:' == document.location.protocol ? 'https://' : 'http://'; 84 s.type = 'text/javascript'; 85 s.async = true; 86 s.src = sc + tagUrl; 87 h.appendChild(s); 88 } 89 90 if (hasAdvertisingConsent()) { 91 loadPixel(); 92 return; 93 } 94 95 document.addEventListener('cookieyes_consent_update', function onUpdate() { 96 if (hasAdvertisingConsent()) { 97 document.removeEventListener('cookieyes_consent_update', onUpdate); 98 loadPixel(); 99 } 100 }); 101 102 // CookieYes is installed via a GTM tag here, so its cookie may not exist yet when 103 // this script runs (it renders before GTM's bootstrap). Poll briefly as a fallback 104 // in case this account's CookieYes version doesn't dispatch cookieyes_consent_update. 105 var attempts = 0; 106 var poll = window.setInterval(function () { 107 attempts += 1; 108 if (hasAdvertisingConsent()) { 109 window.clearInterval(poll); 110 loadPixel(); 111 } else if (attempts >= 40) { 112 window.clearInterval(poll); 113 } 114 }, 500); 115})(); 116</script>
116 117<!-- End AdDaptive Pixel --> 118 119
119<script src="https://go.lifescienceconnect.com/js/lsc-enhance.js" defer></script>
119 120 121 122 123 124 <!-- Google Tag Manager --> 125
125<script>
vendor: 379 bytes, lines 125-129
125(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 126 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 127 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 128 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 129 })(window,document,'script','dataLayer','
129GTM-KCQCQ96
vendor: 3 bytes, line 129
129');
129</script>
129 130 <!-- End Google Tag Manager --> 131 <!-- Initialize GetSiteControl var--> 132
132<script> 133 window.gsc = window.gsc || function () { 134 (gsc.q = gsc.q || []).push(arguments); 135 }; 136 </script>
136 137</head> 138<body> 139 140 <!-- Google Tag Manager (noscript) -->
vendor: 73 bytes, lines 140-141
140 141 <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
141GTM-KCQCQ96
vendor: 95 bytes, lines 141-143
141" 142 height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> 143
143<!-- End Google Tag Manager (noscript) --> 144 145 146 147 148<div class="container-fluid vm-full-width-header-container"> 149 <div class="container vm-header-container"> 150 <div class="row pt-2 align-items-end vert-header"> 151 <div class="col-sm-auto col-md"> 152 <a href="/"> 153 <img src="https://vertassets.blob.core.windows.net/sites/logos/sbuys.png" alt="School Buyer's Online: Digital Marketplace for the education industry" class="mb-1"/> 154 </a> 155 </div> 156 <div class="col-auto text-sm-right ml-sm-auto pr-0"> 157 <div class="vm-logged-out-container d-print-none"> 158 <a data-ga-event data-ga-category="Sign-In" data-ga-action="Site-Request" data-ga-label="NA" href="/usersession/login?referringlink=header&docUrl=NA"> 159 Log In 160 </a> or 161 <a data-ga-event data-ga-category="Register" data-ga-action="Site-Start" data-ga-label="NA" href="/user/new?referringlink=header&docUrl=NA"> 162 Subscribe 163 </a> 164 </div> 165 </div> 166 </div> 167 </div> 168</div> 169<header class="vert-nav"> 170 <nav class="navbar navbar-dark bg-dark navbar-expand-md"> 171 <div class="container vm-nav-container pr-0 pl-0"> 172 <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation"> 173 <span class="navbar-toggler-icon text-white"></span> 174 </button> 175 <div class="collapse navbar-collapse" id="navbarNavAltMarkup"> 176 <div class="navbar-nav mr-auto"> 177 <a class="nav-item nav-link" href="/hub/bucket/products" target="">Product Showcase</a> 178 <a class="nav-item nav-link" href="/resource/news" target="">News</a> 179 </div> 180 </div> 181 <form method="get" class="form-inline nav-search pr-0" action="/search"> 182 <input class="form-control-sm" name="keyword" type="search" maxlength="250" placeholder="Search" aria-label="Search"/> 183 <button type="submit" class="btn-sm btn-dark"> 184 <i class="fas fa-search fa-sm"></i> 185 </button> 186 </form> 187 </div> 188 </nav> 189</header> 190 191<div class="container-fluid p-1 vm-top-ads-container overflow-hidden d-print-none"> 192 <div class="row mobile-hide justify-content-center"> 193 <div class="col-auto"> 194 195 196<!-- Adds PubAds Section -->
197<script> 198 googletag.cmd.push(function () { 199 googletag 200 .defineSlot('/52748101/schoolbuyersonline/sbuys-leaderboard', [728,90], 'Ad_9e76f401-732a-4d57-873f-c44edd022aec') 201 .addService(googletag.pubads()); 202 googletag.pubads().enableLazyLoad({ 203 fetchMarginPercent: 50, 204 renderMarginPercent: 0, 205 mobileScaling: 2.0, 206 }); 207 googletag.pubads().enableSingleRequest(); 208 googletag.enableServices(); 209 }); 210</script>
210 211<div id="Ad_9e76f401-732a-4d57-873f-c44edd022aec" class="ad "> 212
212<script> 213 googletag.cmd.push(function () { googletag.display("Ad_9e76f401-732a-4d57-873f-c44edd022aec"); }); 214 </script>
214 215 216</div> 217 218 219 </div> 220 <div class="col-auto d-none d-lg-block"> 221 222 223<!-- Adds PubAds Section -->
224<script> 225 googletag.cmd.push(function () { 226 googletag 227 .defineSlot('/52748101/schoolbuyersonline/sbuys-earpiece', [230,90], 'Ad_e3da40d4-e75d-4d37-b60f-074406d0f692') 228 .addService(googletag.pubads()); 229 googletag.pubads().enableLazyLoad({ 230 fetchMarginPercent: 50, 231 renderMarginPercent: 0, 232 mobileScaling: 2.0, 233 }); 234 googletag.pubads().enableSingleRequest(); 235 googletag.enableServices(); 236 }); 237</script>
237 238<div id="Ad_e3da40d4-e75d-4d37-b60f-074406d0f692" class="ad "> 239
239<script> 240 googletag.cmd.push(function () { googletag.display("Ad_e3da40d4-e75d-4d37-b60f-074406d0f692"); }); 241 </script>
241 242 243</div> 244 245 246 </div> 247 </div> 248</div> 249 250 251<div class="container vm-main-container"> 252 <main role="main"> 253 254 255 256 257<div class="row no-gutters p-3 pl-md-0 pr-md-0"> 258 <div class="vm-layout-content-primary"> 259 260 <div class="vm-content-item vm-bucket vm-titlesummary"> 261 262<h2 class="vm-section-header">LATEST HEADLINES</h2> 263<h6></h6> 264 265 266<ul class="separated-items list-unstyled"> 267 <li class="image-title-summary-container"> 268 <div class="summary ellipsis"> 269 <a href="/doc/red-rover-accelerates-growth-as-k-districts-seek-modern-workforce-management-solutions-to-overcome-0001" title="Red Rover Accelerates Growth As K-12 Districts Seek Modern Workforce Management Solutions To Overcome Operational Complexities" class="title-link"> 270 Red Rover Accelerates Growth As K-12 Districts Seek Modern Workforce Management Solutions To Overcome Operational Complexities 271 </a> 272 <div style="padding-bottom: 5px"> 273 <em class="vm-hub-date"> 274 6/9/2026 275 </em> 276 </div> 277 <span class="mobile-hide"><p>Red Rover, the fastest-growing provider of human capital management (HCM) solutions for K-12 education, today announced significant milestones marked by technology advancements in its K-12 HCM platform, new district partnerships, and increased adoption of more solutions among current school systems, resulting in market dominance across K-12 districts nationwide.</p> 278</span> 279 </div> 280 </li> 281 <li class="image-title-summary-container"> 282 <div class="summary ellipsis"> 283 <a href="/doc/school-culture-compass-launches-to-help-k-leaders-build-stronger-school-culture-through-data-driven-support-0001" title="School Culture Compass Launches To Help K-12 Leaders Build Stronger School Culture Through Data-Driven Support And Actionable Strategy" class="title-link"> 284 School Culture Compass Launches To Help K-12 Leaders Build Stronger School Culture Through Data-Driven Support And Actionable Strategy 285 </a> 286 <div style="padding-bottom: 5px"> 287 <em class="vm-hub-date"> 288 6/2/2026 289 </em> 290 </div> 291 <span class="mobile-hide"><p>School Culture Compass launched today— offering K–12 school leaders a practical, measurable approach to improving school culture at a time when educator burnout, staffing instability, and communication breakdowns continue to impact schools across the country.</p> 292</span> 293 </div> 294 </li> 295 <li class="image-title-summary-container"> 296 <div class="summary ellipsis"> 297 <a href="/doc/cognia-and-el-education-merger-creates-a-coherent-ecosystem-for-school-improvement-0001" title="Cognia And EL Education Merger Creates A Coherent Ecosystem For School Improvement" class="title-link"> 298 Cognia And EL Education Merger Creates A Coherent Ecosystem For School Improvement 299 </a> 300 <div style="padding-bottom: 5px"> 301 <em class="vm-hub-date"> 302 5/28/2026 303 </em> 304 </div> 305 <span class="mobile-hide"><p>For decades, schools and districts nationwide have been forced to assemble their own improvement ecosystems — piecing together disparate curricula, assessments, professional development, and continuous improvement support from different providers with no common thread.</p> 306</span> 307 </div> 308 </li> 309 <li class="image-title-summary-container"> 310 <div class="summary ellipsis"> 311 <a href="/doc/schooldata-launches-connect-ai-giving-every-educator-analyst-level-insight-to-drive-proactive-student-interventions-0001" title="SchoolData Launches Connect AI, Giving Every Educator Analyst-Level Insight To Drive Proactive Student Interventions" class="title-link"> 312 SchoolData Launches Connect AI, Giving Every Educator Analyst-Level Insight To Drive Proactive Student Interventions 313 </a> 314 <div style="padding-bottom: 5px"> 315 <em class="vm-hub-date"> 316 5/27/2026 317 </em> 318 </div>
319 <span class="mobile-hide"><p>SchoolData today announced the launch of Connect AI, a built-in Digital Analyst that gives every educator in every building the ability to move from time-consuming data-mining to immediate, insight-driven action. The result: earlier interventions and better outcomes for students.</p> 320</span> 321 </div> 322 </li> 323 <li class="image-title-summary-container"> 324 <div class="summary ellipsis"> 325 <a href="/doc/leading-security-technology-provider-launches-advanced-detection-solutions-for-law-enforcement-0001" title="Leading Security Technology Provider Launches Advanced Detection Solutions For Law Enforcement, Correctional, Healthcare, And K-12 School Facilities" class="title-link"> 326 Leading Security Technology Provider Launches Advanced Detection Solutions For Law Enforcement, Correctional, Healthcare, And K-12 School Facilities 327 </a> 328 <div style="padding-bottom: 5px"> 329 <em class="vm-hub-date"> 330 5/21/2026 331 </em> 332 </div> 333 <span class="mobile-hide"><p>CEIA USA, a leading innovator in security detection technology, today announced the launch of three advanced detection solutions designed to meet the emerging security and safety challenges faced by law enforcement agencies, correctional facilities, healthcare institutions, and K-12 schools in North America.</p> 334</span> 335 </div> 336 </li> 337 <li class="image-title-summary-container"> 338 <div class="summary ellipsis"> 339 <a href="/doc/presence-acquires-digital-platform-to-streamline-special-education-workflows-and-advance-student-support-0001" title="Presence Acquires Digital Platform To Streamline Special Education Workflows And Advance Student Support" class="title-link"> 340 Presence Acquires Digital Platform To Streamline Special Education Workflows And Advance Student Support 341 </a> 342 <div style="padding-bottom: 5px"> 343 <em class="vm-hub-date"> 344 5/19/2026 345 </em> 346 </div> 347 <span class="mobile-hide"><p>Presence, a leading provider of preK12 special education technology and teletherapy services, today announced it acquired Education Modified, a special education technology solution.</p> 348</span> 349 </div> 350 </li> 351</ul> 352 353 354 <div class="text-right"> 355 <a href="/hub/bucket/HomeLatestHeadlines">More Headlines</a> 356 </div> 357 </div> 358 <div class="vm-content-item vm-ad "> 359 360<div class="row justify-content-center"> 361 <div class="col-auto"> 362 363 364<!-- Adds PubAds Section -->
365<script> 366 googletag.cmd.push(function () { 367 googletag 368 .defineSlot('/52748101/schoolbuyersonline/sbuys-medium-rectangle', [300,250], 'Ad_sbuys-medium-rectangle_1_2') 369 .addService(googletag.pubads()); 370 googletag.pubads().enableLazyLoad({ 371 fetchMarginPercent: 50, 372 renderMarginPercent: 0, 373 mobileScaling: 2.0, 374 }); 375 googletag.pubads().enableSingleRequest(); 376 googletag.enableServices(); 377 }); 378</script>
378 379<div id="Ad_sbuys-medium-rectangle_1_2" class="ad "> 380
380<script> 381 document.addEventListener("DOMContentLoaded", function () { 382 vertLib.site.Common.setupObserverIntersection("#Ad_sbuys-medium-rectangle_1_2", () => { 383 googletag.cmd.push(function () { 384 googletag.display("Ad_sbuys-medium-rectangle_1_2"); 385 }); 386 }); 387 }); 388 </script>
388 389 390</div> 391 392 393 </div> 394</div> 395 396 </div> 397 <div class="vm-content-item vm-intensedebate vm-default"> 398 399 400 <div class="vm-unknown-content-item"> 401 <h1> Intense Debate</h1> 402 _IntenseDebate_Default 403 </div> 404 </div> 405 <div class="vm-content-item vm-adlist vm-default"> 406 407 408<div class="row justify-content-center"> 409 <div class="col-auto" style="min-width: 155px;"> 410 411 412<!-- Adds PubAds Section -->
413<script> 414 googletag.cmd.push(function () { 415 googletag 416 .defineSlot('/52748101/schoolbuyersonline/sbuys-square-button', [125,125], 'Ad_sbuys-square-button_1_4_0') 417 .addService(googletag.pubads()); 418 googletag.pubads().enableLazyLoad({ 419 fetchMarginPercent: 50, 420 renderMarginPercent: 0, 421 mobileScaling: 2.0, 422 }); 423 googletag.pubads().enableSingleRequest(); 424 googletag.enableServices(); 425 }); 426</script>
426 427<div id="Ad_sbuys-square-button_1_4_0" class="ad "> 428
428<script> 429 document.addEventListener("DOMContentLoaded", function () { 430 vertLib.site.Common.setupObserverIntersection("#Ad_sbuys-square-button_1_4_0", () => { 431 googletag.cmd.push(function () { 432 googletag.display("Ad_sbuys-square-button_1_4_0"); 433 }); 434 }); 435 }); 436 </script>
436 437 438</div> 439 440 441 </div> 442 <div class="col-auto" style="min-width: 155px;"> 443 444 445<!-- Adds PubAds Section -->
446<script> 447 googletag.cmd.push(function () { 448 googletag 449 .defineSlot('/52748101/schoolbuyersonline/sbuys-square-button', [125,125], 'Ad_sbuys-square-button_1_4_1') 450 .addService(googletag.pubads()); 451 googletag.pubads().enableLazyLoad({ 452 fetchMarginPercent: 50, 453 renderMarginPercent: 0, 454 mobileScaling: 2.0, 455 }); 456 googletag.pubads().enableSingleRequest(); 457 googletag.enableServices(); 458 }); 459</script>
459 460<div id="Ad_sbuys-square-button_1_4_1" class="ad "> 461
461<script> 462 document.addEventListener("DOMContentLoaded", function () { 463 vertLib.site.Common.setupObserverIntersection("#Ad_sbuys-square-button_1_4_1", () => { 464 googletag.cmd.push(function () { 465 googletag.display("Ad_sbuys-square-button_1_4_1"); 466 }); 467 }); 468 }); 469 </script>
469 470 471</div> 472 473 474 </div> 475</div> 476 </div> 477 478 </div> 479 <div class="vm-layout-content-secondary pr-1 pl-4"> 480 481 <div class="vm-content-item vm-newsletterbribe vm-default"> 482 483 484 485<h3 class="vm-signup-header">Newsletter Signup</h3> 486<form class="vm-email-signup-form" action="/useremailonly/register?referringlink=sidebar-widget" method="post"> 487 <input type="hidden" data-val="true" data-val-required="The ConsentType field is required." id="ConsentType" name="ConsentType" value="Generic" /> 488 <div class="ajax-loader"> 489 <span></span> 490 </div> 491 <div class="validation-summary validation-summary-valid" style="display: none;" data-valmsg-summary="true"><ul><li style="display:none"></li> 492</ul></div> 493 <p>Get the latest industry news, insights, and analysis delivered to your inbox.</p> 494 <p class="vm-signup-highlighted-text">Join your peers</p> 495 <input type="hidden" data-val="true" data-val-required="The Source field is required." id="Source" name="Source" value="EmailReg-SBUYS" /> 496 <div class="form-group row"> 497 <div class="col-sm-12"> 498 <input type="text" class="form-control form-control-sm email-input-consent-check-trigger" placeholder="Email" maxlength="100" data-val="true" data-val-regex="The E-mail field is not a valid e-mail address." data-val-regex-pattern="^(?!.*([!#$%&'*+-/=?^_`{|])\1)[A-Za-z0-9]+([!#$%&'*+-/=?^_`{|]?[A-Za-z0-9]+\.?){1,4}@[A-Za-z0-9]+([.-]?[A-Za-z0-9]+)*\.[A-Za-z]{2,}$" data-val-required="You must enter a valid email address" id="Email" name="Email" value="" /> 499 <span class="field-validation-valid" data-valmsg-for="Email" data-valmsg-replace="true"></span> 500 </div> 501 </div> 502 <div class="form-row"> 503 <div class="col-sm-12"> 504 <div class="nl-consent-container" style="display: none;"> 505 <div class="consent-field nl-consent-container form-check" data-gdpr-mode="false"><label class="form-check-label"><strong class="standard-consent-content"><input aria-describedby="NlConsent-description" aria-required="true" class="form-check-input" data-val="true" data-val-range="You must accept the Terms And Conditions." data-val-range-max="True" data-val-range-min="True" data-val-required="The NlConsent field is required." name="NlConsent" type="checkbox" value="true" /><span id="NlConsent-description">I agree to the <a href="/static/legal" target=""><strong>Terms</strong></a>.</span></strong></label><span class="field-validation-valid validation-message" data-valmsg-for="NlConsent" data-valmsg-replace="true"></span></div> 506 </div> 507 <div class="client-consent-container" style="display: none;"> 508 <div class="consent-field client-consent-container form-check" data-gdpr-mode="false"><label class="form-check-label"><strong class="standard-consent-content"><input aria-describedby="ClientConsent-description" aria-required="true" class="form-check-input" data-val="true" data-val-required="The ClientConsent field is required." data-val-requiredforconsenttype="This consent is required for your region." data-val-requiredforconsenttype-consentfield="ConsentType" data-val-requiredforconsenttype-requiredtypes="GDPR" name="ClientConsent" type="checkbox" value="true" /><span id="ClientConsent-description">I agree to the <a href="/static/privacy" target=""><strong>Privacy Policy</strong></a>.</span></strong></label><span class="field-validation-valid validation-message" data-valmsg-for="ClientConsent" data-valmsg-replace="true"></span></div> 509 </div> 510 </div> 511 </div> 512 <div class="row justify-content-end mt-3"> 513 <div class="col-12"> 514 <button type="submit" class="btn btn-block btn-sm vm-button"> 515 <i class="fa fa-user"></i> 516 <span class="vm-button-text">SIGN ME UP</span> 517 </button> 518 </div> 519 </div> 520<input name="__RequestVerificationToken" type="hidden" value="CfDJ8L4Tx_kqk_hOqQdWmadsynQPhO8AiCyq_SODtiK-H-sS5jOIxbu2eF6JWR2ec1AyDa7R6RHAMOZR-gc0g8km9BAfXxpjPdVxwcqUwSvAkJBMW04TThm5HJlA7YYpgoo2KKYkspC5a6nEKGNrJCs-gVU" /></form> 521 522 523 524 525 </div> 526 527 </div> 528 529</div> 530<div class="row no-gutters p-3 pl-md-0 pr-md-0"> 531 <div class="vm-layout-content-full-width"> 532 533 534 </div> 535</div> 536 537
538<script type="text/javascript"> 539 document.addEventListener("DOMContentLoaded", function() { 540 const optInConfirmationPage = window['__OPT_IN_CONFIRMATION_PAGE__']; 541 542 if (optInConfirmationPage && window.location.href.indexOf(optInConfirmationPage) > -1) { 543 vertLib.site.Common.verifyOptInCaptchaEvent({ 544 url: '/opt-in', 545 userId: window.location.href.split("userId=")[1].split("&")[0], 546 status: window.location.href.split("status=")[1].split("&")[0], 547 online: window["__currentOnline__"], 548 captchaTokenUrl: '/recaptcha', 549 recaptchaKey: '6Lcl0Z8qAAAAADRTBFqol-uEvsmwWHnNiedoGJdv' 550 }); 551 } 552}) 553</script>
553 554 </main> 555</div> 556 557 558<footer class="border-top vert-footer d-print-none"> 559 <div class="container"> 560 <div class="row"> 561 <div class="col-sm"> 562 563 <h5 class="text-dark text-primary">About Us</h5> 564 <ul class="list-unstyled"> 565 <li> 566 <a href="/static/about" >Contact School Buyers Online</a> 567 </li> 568 <li> 569 <a href="/doc/guest-expert-article-guidelines-0001	" >Editorial Submission Guidelines</a> 570 </li> 571 </ul> 572 </div> 573 </div> 574 </div> 575 <div class="container pb-3"> 576 <div class="d-print-none row no-gutters justify-content-center"> 577 <div class="d-none d-md-block col-auto"> 578 579 580<!-- Adds PubAds Section -->
581<script> 582 googletag.cmd.push(function () { 583 googletag 584 .defineSlot('/52748101/schoolbuyersonline/sbuys-leaderboard', [728,90], 'Ad_3e270862-d4e8-4392-896d-94449cdcb6f7') 585 .addService(googletag.pubads()); 586 googletag.pubads().enableLazyLoad({ 587 fetchMarginPercent: 50, 588 renderMarginPercent: 0, 589 mobileScaling: 2.0, 590 }); 591 googletag.pubads().enableSingleRequest(); 592 googletag.enableServices(); 593 }); 594</script>
594 595<div id="Ad_3e270862-d4e8-4392-896d-94449cdcb6f7" class="ad "> 596
596<script> 597 document.addEventListener("DOMContentLoaded", function () { 598 vertLib.site.Common.setupObserverIntersection("#Ad_3e270862-d4e8-4392-896d-94449cdcb6f7", () => { 599 googletag.cmd.push(function () { 600 googletag.display("Ad_3e270862-d4e8-4392-896d-94449cdcb6f7"); 601 }); 602 }); 603 }); 604 </script>
604 605 606</div> 607 608 609 </div> 610 <div class="d-none d-md-block col-auto pl-2"> 611 612 613<!-- Adds PubAds Section -->
614<script> 615 googletag.cmd.push(function () { 616 googletag 617 .defineSlot('/52748101/schoolbuyersonline/sbuys-earpiece', [230,90], 'Ad_bf4f5e3a-00c0-434f-b7ba-36b30539a170') 618 .addService(googletag.pubads()); 619 googletag.pubads().enableLazyLoad({ 620 fetchMarginPercent: 50, 621 renderMarginPercent: 0, 622 mobileScaling: 2.0, 623 }); 624 googletag.pubads().enableSingleRequest(); 625 googletag.enableServices(); 626 }); 627</script>
627 628<div id="Ad_bf4f5e3a-00c0-434f-b7ba-36b30539a170" class="ad "> 629
629<script> 630 document.addEventListener("DOMContentLoaded", function () { 631 vertLib.site.Common.setupObserverIntersection("#Ad_bf4f5e3a-00c0-434f-b7ba-36b30539a170", () => { 632 googletag.cmd.push(function () { 633 googletag.display("Ad_bf4f5e3a-00c0-434f-b7ba-36b30539a170"); 634 }); 635 }); 636 }); 637 </script>
637 638 639</div> 640 641 642 </div> 643 </div> 644 </div> 645 646 <div class="container small pb-3 text-center"> 647 <a href="/static/copyright">Copyright</a> 648 © 1996-2026 <a href="https://www.vertmarkets.com">VertMarkets, Inc.</a> 649 All Rights Reserved. 650 <a href="/static/legal">Terms of Use</a>. 651 <a href="/static/privacy">Privacy Statement</a>. 652 <a href="/user-request">Subscriber Request Form</a>. 653 <a href="/user-request?privacyType=ccpa">Don't sell my information</a> 654 </div> 655</footer> 656 657 658 659<!-- Google Tag Manager -->
660<script type="text/javascript"> 661 let score = ''; 662 let gtmEvents = []; 663 664 function loadRecaptcha () { 665 if (vertLib && typeof vertLib.site.Common.getRecaptchaToken === 'function') { 666 // when load and library is loaded then execute 667 vertLib.site.Common.setupGTM(dataLayer); 668 vertLib.site.Common.getRecaptchaToken('ga').then(function (token) { 669 return $.post('/recaptcha', { token: token }); 670 }).then(function (response) { 671 score = response.score.toString(); 672 gtmEvents = [{"$type":"Vert.Sites.Web.Models.Analytics.Events.GtmUserDataEvent, Vert.Sites.Web","event":"page_view","event_category":"","event_action":"","event_source":"server_side","portal":"SBUYS"}] || []; 673 vertLib.site.Common.logGTMEvents(gtmEvents, score, dataLayer); 674 }); 675 } 676 } 677</script>
677 678
679<script async='async' src='https://www.googletagservices.com/tag/js/gpt.js'></script>
679 680 681<!-- End Google Tag Manager --> 682 683
683<script type="text/javascript"> 684 window["munchkinUrl"] = 'https://app-ab30.marketo.com'; 685 window["munchkinFormId"] ='1067' 686 window["munchkinInstanceId"] = '075-NVC-086'; 687</script>
687 688
689<script> 690 window.addEventListener('load', initMunchkin); 691 692 function initMunchkin() { 693 if (vertLib && typeof vertLib.site.Common.associateMunchkin === 'function') { 694 vertLib.site.Common.associateMunchkin({ Email: window['__USER_EMAIL__'], UserId: window['__USER_ID__'] }); 695 } 696 } 697</script>
697 698 699<div id="userSubscriptionFormModal" class="modal"> 700 <div class="modal-dialog vm-modal"> 701 <div class="modal-content"> 702 <div class="modal-header"> 703 <img src="https://vertassets.blob.core.windows.net/sites/logos/sbuys.png" alt="School Buyer's Online: Digital Marketplace for the education industry" class="mt-3" /> 704 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 705 </div> 706 <div class="modal-body"> 707 <div id="userSubscriptionContainer"> 708 <div id="areaOfFocus" class="mt-3 mx-4 mb-4"></div> 709 <div id="login" class="mt-3 mx-4 mb-4"></div> 710</div> 711
712<script id="areaOfFocusTemplate" type="text/x-template"> 713 {{@if (it.message)}} 714 <div class="alert alert-success d-flex flex-row p-2 m-0"> 715 <i class="fa fa-info mr-2 mt-1"></i> 716 <div>{{it.message | safe}}</div> 717 </div> 718 {{/if}} 719 <form method="post" action="/user-subscription/update" id="areaOfFocusForm" class="vm-form-alt"> 720 {{@if (it.showUserInfoFields)}} 721 <div> 722 <div class="pt-3">Please tell us more about you so that we can customize our newsletters to your specific interests:</div> 723 <div class="row"> 724 <div class="form-group col-md-6"> 725 <label for="JobTitle">Job Title</label> 726 <input type="text" class="form-control form-control-sm" id="JobTitle" name="JobTitle" value="{{ it.jobTitle }}" /> 727 </div> 728 <div class="form-group col-md-6"> 729 <label for="Company">Company</label> 730 <input type="text" class="form-control form-control-sm" id="Company" name="Company" value="{{ it.company }}" /> 731 </div> 732 </div> 733 </div> 734 {{/if}} 735 {{@if (it.subscriptions.length)}} 736 <div class="vm-checkbox-container primary"> 737 <div class="form-check-inline p-2 input-container form-check"> 738 {{@if (it.subscriptions[0].isSelected)}} 739 <input type="checkbox" name="subscriptions" checked="checked" value="{{it.subscriptions[0].id}}" class="form-check-input"/> <label class="form-check-label">{{it.subscriptions[0].text}}</label> 740 {{#else}} 741 <input type="checkbox" name="subscriptions" value="{{it.subscriptions[0].id}}" class="form-check-input"/> <label class="form-check-label">{{it.subscriptions[0].text}}</label> 742 {{/if}} 743 </div> 744 </div> 745 {{/if}} 746 {{@if (it.personas.length)}} 747 <div class="vm-checkbox-container"> 748 <div class="p-4 input-container"> 749 <div class="topics-blurb">What topics interest you? (Check all that apply.)</div> 750 {{@each(it.personas) => pers, index}} 751 {{@if (index%2 === 0)}} 752 <div class="row pl-3 vm-checkbox-container"> 753 {{/if}} 754 <div class="col-md-6 text-capitalize form-check"> 755 {{@if (pers.isSelected)}} 756 <input type="checkbox" name="personas" checked="checked" value="{{pers.id}}" class="form-check-input"/> <label class="form-check-label">{{pers.text}}</label> 757 {{#else}} 758 <input type="checkbox" name="personas" value="{{pers.id}}" class="form-check-input"/> <label class="form-check-label">{{pers.text}}</label> 759 {{/if}} 760 </div> 761 {{@if (index%2 !== 0 && index > 0)}} 762 </div> 763 {{/if}} 764 {{/each}} 765 {{@if (it.personas.length%2 === 0)}} 766 </div> 767 {{/if}} 768 </div> 769 </div> 770 {{#elif (it.subscriptions.length)}} 771 <div class="pt-3">You may also be interested in these industry newsletters:</div> 772 <div class="p-4 input-container"> 773 {{@each(it.subscriptions) => sub, index}} 774 {{@if (index > 0)}} 775 {{@if (index%2 !== 0)}} 776 <div class="row pl-3 vm-checkbox-container"> 777 {{/if}} 778 <div class="col-md-6 text-capitalize form-check"> 779 {{@if (sub.isSelected)}} 780 <input type="checkbox" name="subscriptions" checked="checked" value="{{sub.id}}" class="form-check-input"/> <label class="form-check-label">{{sub.text}}</label> 781 {{#else}} 782 <input type="checkbox" name="subscriptions" value="{{sub.id}}" class="form-check-input"/> <label class="form-check-label">{{sub.text}}</label> 783 {{/if}} 784 </div> 785 {{@if (index%2 === 0)}} 786 </div> 787 {{/if}} 788 {{/if}} 789 {{/each}} 790 {{@if (it.subscriptions.length%2 === 0)}} 791 </div> 792 {{/if}} 793 <button id="selectAll" type="button" class="btn btn-link pl-0 pt-2">Select All</button> 794 </div> 795 {{/if}} 796 <div class="row justify-content-end"> 797 <div class="col-12"> 798 <button type="submit" class="btn vm-alt-button mt-4">
799 <span class="vm-button-text">Finish</span> 800 </button> 801 </div> 802 </div> 803 <input type="hidden" name="OnlineId" id="OnlineId" value="{{it.onlineId}}" /> 804 </form> 805</script>
805 806
807<script id="loginTemplate" type="text/x-template"> 808 {{@if (it.message)}} 809 {{@if (it.hasError)}} 810 <div class="alert alert-danger d-flex flex-row p-2 m-0"> 811 {{ #else }} 812 <div class="alert alert-warning d-flex flex-row p-2 m-0"> 813 {{/if}} 814 <i class="fa fa-info mr-2 mt-1"></i> 815 <div>{{it.message | safe}}</div> 816 </div> 817 {{/if}} 818 <form method="post" action="/user-subscription/login" id="loginForm" class="vm-form-alt"> 819 <div class="row"> 820 <div class="form-group col"> 821 <label for="Email">Email</label> 822 <input type="text" class="form-control form-control" id="Email" name="Email" maxlength="100" value="{{it.email}}" /> 823 </div> 824 </div> 825 <div class="row"> 826 <div class="form-group col"> 827 <label for="Password">Password</label> 828 <input type="password" class="form-control form-control" id="Password" name="Password" /> 829 </div> 830 </div> 831 <div class="row"> 832 <div class="form-group col"> 833 <small> 834 <a href="/password/forgotpassword">Forgot your password?</a> 835 </small> 836 </div> 837 </div> 838 839 <div class="vm-oauth-providers"> 840 <span class="small mb-4">... or you can:</span> 841 <a class="btn btn-lg rounded-circle" role="button" href="/user-oauth/login?oAuthType=Google&source=user-sub"> 842 <i class="fa fa-google" aria-hidden="true"></i> 843 </a> 844 <a class="btn btn-lg rounded-circle" role="button" href="/user-oauth/login?oAuthType=Facebook&source=user-sub"> 845 <i class="fa fa-facebook" aria-hidden="true"></i> 846 </a> 847 <a class="btn btn-lg rounded-circle" role="button" href="/user-oauth/login?oAuthType=LinkedIn&source=user-sub"> 848 <i class="fa fa-linkedin" aria-hidden="true"></i> 849 </a> 850 </div> 851 852 <div class="row justify-content-end"> 853 <div class="col-12"> 854 <button type="submit" class="btn vm-alt-button mt-4"> 855 <span class="vm-button-text">Sign In</span> 856 </button> 857 </div> 858 </div> 859 860 <input type="hidden" name="JobTitle" id="JobTitle" value="{{it.jobTitle}}" /> 861 <input type="hidden" name="Company" id="Company" value="{{it.company}}" /> 862 <input type="hidden" name="OnlineId" id="OnlineId" value="{{it.onlineId}}" /> 863 <input type="hidden" name="Privacy" id="OnlineId" value="{{it.privacy}}" /> 864 </form> 865</script>
865 866
867<script> 868 window.userSubSettings = undefined; 869</script>
869 870 </div> 871 </div> 872 </div> 873</div> 874 875 876 877 878 879
880<script id="modalTemplate" type="text/x-template"> 881 <div class="modal fade" id="{{ it.id }}" role="dialog" tabindex="-1" data-keyboard="false" data-backdrop="{{ (it.backdrop || 'true') }}"> 882 <div class="modal-dialog vm-modal"> 883 <div class="modal-content"> 884 {{ @if(it.title) }} 885 <div class="modal-header no-gutters justify-content-between"> 886 <div class="col"> 887 <h2>{{ it.title | safe }}</h2> 888 </div> 889 <div class="col-auto"> 890 <div class="vm-ajax-loader"><span></span></div> 891 <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> 892 </div> 893 </div> 894 {{ /if }} 895 <div class="modal-body">{{ it.body | safe }}</div> 896 {{ @if (it.hideFooter !== true) }} 897 <div class="modal-footer"> 898 <div class="row justify-content-end"> 899 <div class="col-12"> 900 <button type="button" data-dismiss="modal" class="btn vm-button">Close</button> 901 </div> 902 </div> 903 </div> 904 {{ /if }} 905 </div> 906 </div> 907 </div> 908</script>
908 909 910</body> 911</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.