Heb je een vraag of ondersteuning nodig? Kijk dan eerst of je het antwoord kan vinden in Spend Cloud Dirk.
Neem anders contact op via:
De Spend Cloud biedt één volledige oplossing voor alle uitgaven van jouw organisatie. Benieuwd naar wat je precies met uitgavenbeheersoftware kunt?
Lees verder in kennisblogs, succesverhalen en diepgaande downloads zoals factsheets en uitgebreidere whitepapers over uitgavenbeheer. Ook vind je bij de blogs verhalen over ProActivians.
Wil je weten of onze werkwijze en visie bij die van jou aansluit? Bekijk dan informatie over ons! We gaan graag met je in gesprek.
De Spend Cloud biedt één volledige oplossing voor alle uitgaven van jouw organisatie. Benieuwd naar wat je precies met uitgavenbeheersoftware kunt?
De Spend Cloud biedt één volledige oplossing voor alle uitgaven van jouw organisatie.
Neem anders contact op via:
Heb je een vraag of ondersteuning nodig? Kijk dan eerst of je het antwoord kan vinden in Spend Cloud Dirk.
Ben je een klant en heb je een supportvraag?
Klik dan hier
Spend Cloud is een product van Visma | ProActive
Spend Cloud is een product van Visma | ProActive
De Spend Cloud naadloos op de wensen van jouw organisatie aan laten sluiten? Onze Accountmanagers gaan graag met je in gesprek over een precies aanbod dat specifiek is afgestemd op jouw organisatie.
De Spend Cloud naadloos op de wensen van jouw organisatie aan laten sluiten? Onze Accountmanagers gaan graag met je in gesprek over een precies aanbod dat specifiek is afgestemd op jouw organisatie.
Ontvang de factsheet direct
Bespaar meer dan €25.000 aan alleen bankkosten met Spend Cloud Cards!
Ontvang de factsheet direct
Bespaar meer dan €25.000 aan alleen bankkosten met Spend Cloud Cards!
Ontvang de factsheet direct
“Telefoonrekeningen, lunch en treintickets; onderweg is declareren met de Spend Cloud erg praktisch.”
Ontvang de factsheet direct
Bespaar 32 uur per week aan administratieve taken met digitale factuurverwerking!
Ontvang de factsheet direct
Bespaar €80.000 per jaar en ervaar nooit meer een ongewenste contractverlenging!
Ontvang de factsheet direct
Het inkoopproces van jouw organisatie regelen met maar 2 FTE?
Ontvang de factsheet direct
Je hoeft geen Excel-deskundige te zijn om de 80% uit te werken met Spend Analytics!
Ontvang de factsheet direct
(Automatische) workflows instellen die volledig aansluiten bij de werkprocessen van jouw organisatie.
Ontvang de factsheet direct
Onderweg, op locatie, thuis; jouw uitgavenbeheer is altijd toegankelijk. Op elk smart device!
Ontvang de factsheet direct
Nemen robots dan mijn werk over? Zeker niet! Zie het als een samenwerking.
Ontvang de factsheet direct
Voorkom fraude en spookfacturen. Zorg dat je altijd zaken doet met een bestaande leverancier.
Ontvang de factsheet direct
Bespaar jaarlijks 5 miljoen dollar op datalekken (volgens IBM) met de Spend Cloud cybersecurity-garantie.
Ontvang de factsheet direct
Van Purchase to Pay tot slimme betaalpassen voor medewerkers, de Spend Cloud is het antwoord!
Ontvang de facsheet direct
“De administratie is met Purchase to Pay van de Spend Cloud in één klik klaar”
Ontvang de factsheet direct
Bespaar 10 uur per week aan administratie dankzij Spend Cloud Cards!
Ontvang de whitepaper direct
Benieuwd naar de 6 veelvoorkomende problemen die slimme betaalpassen oplossen?
Ontvang de whitepaper direct
Lees meer over alle voordelen van het inkoop-, factuurverwerkings- en contractmanagementproces.
Vraag een vrijblijvende demo aan
Ontdek hoe de Spend Cloud jouw organisatie kan helpen!
Vraag een vrijblijvende demo aan
Ontdek hoe de Spend Cloud jouw organisatie kan helpen!
Vraag een vrijblijvende demo aan
Ontdek hoe de Spend Cloud jouw organisatie kan helpen!
Bereken jouw prijs
Vul onderstaand formulier in en ontvang toegang tot onze prijzenpagina. Op deze pagina kun je aan de hand van een aantal selecties en sliders een maandelijkse prijsindicatie inzien!
Bereken jouw prijs
Vul onderstaand formulier in en ontvang toegang tot onze prijzenpagina. Op deze pagina kun je aan de hand van een aantal selecties en sliders een maandelijkse prijsindicatie inzien!
Ontvang de whitepaper direct
Wat kun jij doen om jezelf en je werkgever te beschermen
tegen cyberdreigingen? En hoe laagdrempelig zijn die
mogelijkheden? Dat ontdek je in deze whitepaper.
Neem contact met ons op
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Neem contact met ons op
Heb je een vraag over de Spend Cloud of behoefte aan een persoonlijk adviesgesprek? Wij helpen je graag.
Ontvang de factsheet direct
Minder tijd kwijt aan het verkrijgen van middelen, meer focus op wat écht telt.
Ontvang de factsheet direct
Betaalgemak voor medewerkers. Volledige controle voor finance.
Met de interactieve product tour kun je zelf het gebruiksgemak ervaren met enkele klikken in de Spend Cloud.
Met de interactieve product tour kun je zelf het gebruiksgemak ervaren met enkele klikken in de Spend Cloud.
Vraag een vrijblijvende demo aan
Ontdek hoe de Spend Cloud Cards jouw organisatie kunnen helpen!
Vraag een vrijblijvende demo aan
Ontdek hoe de Spend Cloud Cards jouw organisatie kunnen helpen!
Bereken jouw prijs
Vul onderstaand formulier in en ontvang toegang tot onze prijzenpagina. Op deze pagina kun je aan de hand van een aantal selecties en sliders een maandelijkse prijsindicatie inzien!
<body> <!– Test form — Demo aanvraag –> <div class=“sc-form“ data-type=“demo“></div> <!– Uncomment to test other form types: <div class=”sc-form” data-type=”contact”></div> <div class=”sc-form” data-type=”tarieven”></div> <div class=”sc-form” data-type=”factsheet” data-product=”scc”></div> <div class=”sc-form” data-type=”factsheet” data-product=”p2p”></div> <div class=”sc-form” data-type=”factsheet” data-product=”spendcloud”></div> <div class=”sc-form” data-type=”factsheet” data-product=”factuurverwerking”></div> <div class=”sc-form” data-type=”factsheet” data-product=”contractmanagement”></div> <div class=”sc-form” data-type=”factsheet” data-product=”inkoop”></div> <div class=”sc-form” data-type=”factsheet” data-product=”onkostendeclaraties”></div> <div class=”sc-form” data-type=”factsheet” data-product=”analyse”></div> <div class=”sc-form” data-type=”factsheet” data-product=”applicatiebeheer”></div> <div class=”sc-form” data-type=”factsheet” data-product=”beveiliging”></div> <div class=”sc-form” data-type=”factsheet” data-product=”autosuggest”></div> <div class=”sc-form” data-type=”factsheet” data-product=”peppol”></div> <div class=”sc-form” data-type=”factsheet” data-product=”cloudbased”></div> <div class=”sc-form” data-type=”factsheet” data-product=”northstar”></div> <div class=”sc-form” data-type=”whitepaper” data-product=”scc”></div> <div class=”sc-form” data-type=”whitepaper” data-product=”cybersecurity”></div> <div class=”sc-form” data-type=”whitepaper” data-product=”p2p”></div> –> <script> (function () { // ═══════════════════════════════════════════ // CONFIG — fill these in before going live // ═══════════════════════════════════════════ var TEST_MODE = true; // ← set to FALSE when Zoho Flow webhook is ready var ZOHO_FLOW_WEBHOOK = ‘YOUR_ZOHO_FLOW_WEBHOOK_URL’; // ← replace in Zoho Flow phase var STAPE_SERVER_URL = ‘https://sgtm.proactive-software.com’; var GA4_ID = ‘G-N6CSKFTQ7N’; // ═══════════════════════════════════════════ // PERSONAL / STUDENT DOMAIN LISTS // ═══════════════════════════════════════════ var PERSONAL_DOMAINS = [ ‘gmail.com’,‘googlemail.com’,‘hotmail.com’,‘hotmail.nl’,‘outlook.com’, ‘outlook.nl’,‘live.com’,‘live.nl’,‘yahoo.com’,‘yahoo.nl’,‘icloud.com’, ‘me.com’,‘mac.com’,‘ziggo.nl’,‘kpnmail.nl’,‘upcmail.nl’,‘quicknet.nl’, ‘xs4all.nl’,’telfort.nl’,‘planet.nl’,‘home.nl’,‘hetnet.nl’,‘chello.nl’, ’tele2.nl’,‘casema.nl’,‘online.nl’,‘zonnet.nl’,‘freedom.nl’, ‘protonmail.com’,’tutanota.com’,‘gmx.com’,‘gmx.net’,‘web.de’,‘mail.com’ ]; var STUDENT_PATTERNS = [‘student.’,‘@student’,‘stagiair’,‘intern’,’trainee’,‘stage’]; // ═══════════════════════════════════════════ // FORM TYPE DEFINITIONS // ═══════════════════════════════════════════ var FORM_TYPES = { ‘demo’: { title:‘Vraag een demo aan’, redirect:‘/demo-aanvraag-bedankt’, leadType:‘Demo aanvraag’, interestedIn:‘Demo’, gadsLabel:‘DEMO_LABEL’, baseValue:10 }, ’tarieven’: { title:‘Ontvang tarieven informatie’, redirect:‘/tarieven-293842/bedankt’, leadType:‘Tarieven aanvraag’, interestedIn:‘Tarieven’, gadsLabel:‘TARIEVEN_LABEL’, baseValue:9 }, ‘contact’: { title:‘Neem contact op’, redirect:‘/bedankt-contact-sales’, leadType:‘Contact’, interestedIn:‘Contact’, gadsLabel:‘CONTACT_LABEL’, baseValue:6 }, ‘factsheet-scc’: { title:‘Download de SCC factsheet’, redirect:‘/download-factsheet-scc’, leadType:‘Whitepaper download’, interestedIn:‘SCC’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-p2p’: { title:‘Download de P2P factsheet’, redirect:‘/module-download-factsheet-p2p-698429547’, leadType:‘Whitepaper download’, interestedIn:‘P2P’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-expense’: { title:‘Download de Expense factsheet’, redirect:‘/download-factsheet-expense’, leadType:‘Whitepaper download’, interestedIn:‘Expense’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-factuurverwerking’: { title:‘Download de Factuurverwerking factsheet’, redirect:‘/module-download-factsheet-factuurverwerking-456455642’, leadType:‘Whitepaper download’, interestedIn:‘Factuurverwerking’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-contractmanagement’:{ title:‘Download de Contractmanagement factsheet’,redirect:‘/module-download-factsheet-contractmanagement-549987367’, leadType:‘Whitepaper download’, interestedIn:‘Contractmanagement’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-inkoop’: { title:‘Download de Inkoop factsheet’, redirect:‘/module-download-factsheet-inkoop-579439872’, leadType:‘Whitepaper download’, interestedIn:‘Inkoop’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-onkostendeclaraties’:{ title:‘Download de Onkostendeclaraties factsheet’,redirect:‘/module-download-factsheet-onkostendeclaraties-129743658’, leadType:‘Whitepaper download’, interestedIn:‘Onkostendeclaraties’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-analyse’: { title:‘Download de Analyse factsheet’, redirect:‘/module-download-factsheet-analyse-681548912’, leadType:‘Whitepaper download’, interestedIn:‘Analyse’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-spendcloud’: { title:‘Download de Spend Cloud factsheet’, redirect:‘/download-factsheet-spendcloud-245873’, leadType:‘Whitepaper download’, interestedIn:‘Spend Cloud’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-applicatiebeheer’: { title:‘Download de Applicatiebeheer factsheet’, redirect:‘/download-factsheet-applicatiebeheer’, leadType:‘Whitepaper download’, interestedIn:‘Applicatiebeheer’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-beveiliging’: { title:‘Download de Beveiliging factsheet’, redirect:‘/download-factsheet-beveiliging-192347’, leadType:‘Whitepaper download’, interestedIn:‘Beveiliging’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-autosuggest’: { title:‘Download de Autosuggest factsheet’, redirect:‘/functionaliteit-download-factsheet-factuurverwerking-met-autosuggest’,leadType:‘Whitepaper download’, interestedIn:‘Autosuggest’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-peppol’: { title:‘Download de Peppol factsheet’, redirect:‘/download-factsheet-peppol-nl-294837’, leadType:‘Whitepaper download’, interestedIn:‘Peppol’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-cloudbased’: { title:‘Download de Cloudbased factsheet’, redirect:‘/download-factsheet-cloudbased-194038’, leadType:‘Whitepaper download’, interestedIn:‘Cloudbased’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘factsheet-northstar’: { title:‘Download de North Star factsheet’, redirect:‘/download-factsheet-north-star’, leadType:‘Whitepaper download’, interestedIn:‘North Star’, gadsLabel:‘FACTSHEET_LABEL’, baseValue:4 }, ‘whitepaper-scc’: { title:‘Download het SCC whitepaper’, redirect:‘/download-whitepaper-scc’, leadType:‘Whitepaper download’, interestedIn:‘Whitepaper SCC’, gadsLabel:‘WHITEPAPER_LABEL’, baseValue:5 }, ‘whitepaper-cybersecurity’: { title:‘Download het Cybersecurity whitepaper’, redirect:‘/download-whitepaper-cybersecurity’, leadType:‘Whitepaper download’, interestedIn:‘Whitepaper Cybersecurity’,gadsLabel:‘WHITEPAPER_LABEL’, baseValue:5 }, ‘whitepaper-p2p’: { title:‘Download het P2P whitepaper’, redirect:‘/download-whitepaper-p2p’, leadType:‘Whitepaper download’, interestedIn:‘Whitepaper P2P’, gadsLabel:‘WHITEPAPER_LABEL’, baseValue:5 } }; // ═══════════════════════════════════════════ // GCLID + UTM CAPTURE (pre-consent) // ═══════════════════════════════════════════ var TRACKING_PARAMS = [‘gclid’,‘utm_source’,‘utm_medium’,‘utm_campaign’,‘utm_content’,‘utm_term’]; function getParam(n) { return new URLSearchParams(window.location.search).get(n) || ”; } TRACKING_PARAMS.forEach(function(p) { var v = getParam(p); if (v) sessionStorage.setItem(‘sc_’ + p, v); }); function getT(n) { return sessionStorage.getItem(‘sc_’ + n) || ”; } // ═══════════════════════════════════════════ // EMAIL CLASSIFICATION // ═══════════════════════════════════════════ function classifyEmail(email) { var domain = (email.split(‘@’)[1] || ”).toLowerCase(); if (!domain) return { flag:‘unknown’, delta:0 }; for (var i = 0; i < STUDENT_PATTERNS.length; i++) { if (domain.indexOf(STUDENT_PATTERNS[i]) > –1 || email.toLowerCase().indexOf(STUDENT_PATTERNS[i]) > –1) return { flag:‘student’, delta:–20 }; } if (PERSONAL_DOMAINS.indexOf(domain) > –1) return { flag:‘personal’, delta:–6 }; if (domain.indexOf(‘gemeente’) > –1 || domain.indexOf(‘provincie’) > –1 || domain.indexOf(‘waterschap’) > –1 || domain.indexOf(‘hoogheemraad’) > –1) return { flag:‘public_sector’, delta:4 }; return { flag:‘business’, delta:0 }; } // ═══════════════════════════════════════════ // STAGE 1 VALUE CALCULATION // ═══════════════════════════════════════════ function calcValue(cfg, emailResult, hasPhone) { var v = cfg.baseValue + emailResult.delta; if (hasPhone) v += 2; var src = getT(‘utm_source’).toLowerCase(); if (document.referrer.toLowerCase().indexOf(’tendernet’) > –1 || src.indexOf(’tendernet’) > –1) v += 5; return Math.min(15, Math.max(0, v)); } // ═══════════════════════════════════════════ // CSS (injected once) // ═══════════════════════════════════════════ function injectStyles() { if (document.getElementById(‘sc-styles’)) return; var s = document.createElement(‘style’); s.id = ‘sc-styles’; s.textContent = [ ‘.sc-form-wrap *{box-sizing:border-box}’, ‘.sc-form-wrap{font-family:-apple-system,BlinkMacSystemFont,”Segoe UI”,sans-serif;max-width:480px}’, ‘.sc-form-wrap h3{font-size:18px;font-weight:700;margin:0 0 20px;color:#1e293b}’, ‘.sc-field{margin-bottom:14px}’, ‘.sc-field label{display:block;font-size:13px;font-weight:600;margin-bottom:5px;color:#374151}’, ‘.sc-field input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:6px;font-size:14px;color:#1e293b;background:#fff}’, ‘.sc-field input:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 3px #dbeafe}’, ‘.sc-field input.sc-err-field{border-color:#dc2626}’, ‘.sc-warning{display:none;color:#d97706;font-size:12px;margin-top:4px;padding:6px 10px;background:#fffbeb;border-radius:4px;border:1px solid #fde68a}’, ‘.sc-submit{width:100%;padding:12px;background:#2563eb;color:#fff;border:none;border-radius:6px;font-size:15px;font-weight:600;cursor:pointer;margin-top:4px;transition:background 0.15s}’, ‘.sc-submit:hover{background:#1d4ed8}’, ‘.sc-submit:disabled{background:#93c5fd;cursor:not-allowed}’, ‘.sc-success-msg{display:none;color:#059669;font-weight:600;margin-top:12px;padding:12px;background:#f0fdf4;border-radius:6px;border:1px solid #bbf7d0;font-size:14px}’, ‘.sc-error-msg{display:none;color:#dc2626;margin-top:12px;padding:10px;background:#fef2f2;border-radius:6px;font-size:13px}’, ‘.sc-privacy{font-size:11px;color:#9ca3af;margin-top:10px;line-height:1.5}’, ‘.sc-privacy a{color:#6b7280}’, // Test mode debug panel ‘.sc-debug{margin-top:16px;background:#0f172a;border-radius:8px;padding:14px;border-left:3px solid #2563eb}’, ‘.sc-debug-title{font-size:10px;font-weight:700;color:#2563eb;text-transform:uppercase;letter-spacing:1px;margin-bottom:10px}’, ‘.sc-debug-row{display:flex;justify-content:space-between;gap:8px;margin-bottom:4px}’, ‘.sc-debug-key{font-size:11px;color:#475569;flex-shrink:0}’, ‘.sc-debug-val{font-size:11px;color:#7dd3fc;text-align:right;word-break:break-all}’, ‘.sc-debug-val.good{color:#4ade80}’, ‘.sc-debug-val.warn{color:#fbbf24}’, ‘.sc-debug-val.bad{color:#f87171}’, ‘.sc-debug-url{font-size:10px;color:#334155;margin-top:8px;padding-top:8px;border-top:1px solid #1e293b;word-break:break-all;line-height:1.6}’, ‘.sc-debug-url strong{color:#475569;display:block;margin-bottom:3px}’ ].join(”); document.head.appendChild(s); } // ═══════════════════════════════════════════ // RENDER FORM // ═══════════════════════════════════════════ function renderForm(container, formKey, cfg) { var uid = formKey; // unique suffix for IDs var btnLabel = (formKey === ‘demo’ || formKey === ‘demo-boekhoud’) ? ‘Demo aanvragen’ : formKey === ‘contact’ ? ‘Verstuur bericht’ : formKey === ’tarieven’ ? ‘Ontvang tarieven’ : ‘Download nu’; container.innerHTML = ‘<div class=”sc-form-wrap”>’ + ‘<h3>’ + cfg.title + ‘</h3>’ + ‘<div class=”sc-field”><label for=”sc-naam-‘ + uid + ‘”>Naam *</label>’ + ‘<input type=”text” id=”sc-naam-‘ + uid + ‘” autocomplete=”name” placeholder=”Jan de Vries” /></div>’ + ‘<div class=”sc-field”><label for=”sc-org-‘ + uid + ‘”>Organisatienaam *</label>’ + ‘<input type=”text” id=”sc-org-‘ + uid + ‘” autocomplete=”organization” placeholder=”Gemeente Utrecht” /></div>’ + ‘<div class=”sc-field”><label for=”sc-email-‘ + uid + ‘”>E-mailadres *</label>’ + ‘<input type=”email” id=”sc-email-‘ + uid + ‘” autocomplete=”email” placeholder=”j.devries@gemeente.nl” />’ + ‘<div class=”sc-warning” id=”sc-warn-‘ + uid + ‘”>Gebruik bij voorkeur uw zakelijk e-mailadres voor de snelste opvolging.</div></div>’ + ‘<div class=”sc-field”><label for=”sc-tel-‘ + uid + ‘”>Telefoonnummer ‘ + ‘<span style=”font-weight:400;color:#9ca3af”>(optioneel)</span></label>’ + ‘<input type=”tel” id=”sc-tel-‘ + uid + ‘” autocomplete=”tel” placeholder=”+31 6 12345678″ /></div>’ + ‘<button class=”sc-submit” id=”sc-btn-‘ + uid + ‘”>’ + btnLabel + ‘</button>’ + ‘<div class=”sc-success-msg” id=”sc-ok-‘ + uid + ‘”></div>’ + ‘<div class=”sc-error-msg” id=”sc-err-‘ + uid + ‘”>Er is iets misgegaan. Probeer het opnieuw.</div>’ + ‘<p class=”sc-privacy”>Door dit formulier te versturen gaat u akkoord met ons <a href=”/privacy”>privacybeleid</a>.</p>’ + (TEST_MODE ? ‘<div class=”sc-debug” id=”sc-debug-‘ + uid + ‘” style=”display:none”></div>’ : ”) + ‘</div>’; wireEvents(container, formKey, cfg, uid, btnLabel); } // ═══════════════════════════════════════════ // WIRE EVENTS // ═══════════════════════════════════════════ function wireEvents(container, formKey, cfg, uid, btnLabel) { var emailEl = container.querySelector(‘#sc-email-‘ + uid); var warnEl = container.querySelector(‘#sc-warn-‘ + uid); var btn = container.querySelector(‘#sc-btn-‘ + uid); var okEl = container.querySelector(‘#sc-ok-‘ + uid); var errEl = container.querySelector(‘#sc-err-‘ + uid); var dbgEl = TEST_MODE ? container.querySelector(‘#sc-debug-‘ + uid) : null; // Show warning on blur for personal/student email emailEl.addEventListener(‘blur’, function() { var r = classifyEmail(this.value.trim()); warnEl.style.display = (r.flag === ‘personal’ || r.flag === ‘student’) ? ‘block’ : ‘none’; }); btn.addEventListener(‘click’, function() { errEl.style.display = ‘none’; var naam = container.querySelector(‘#sc-naam-‘ + uid).value.trim(); var org = container.querySelector(‘#sc-org-‘ + uid).value.trim(); var email = emailEl.value.trim(); var tel = container.querySelector(‘#sc-tel-‘ + uid).value.trim(); // Validation var valid = true; [[‘#sc-naam-‘ + uid, naam], [‘#sc-org-‘ + uid, org], [‘#sc-email-‘ + uid, email]].forEach(function(pair) { var el = container.querySelector(pair[0]); if (!pair[1]) { el.classList.add(‘sc-err-field’); valid = false; } else el.classList.remove(‘sc-err-field’); }); if (email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { emailEl.classList.add(‘sc-err-field’); valid = false; } if (!valid) return; var emailResult = classifyEmail(email); var stage1Value = calcValue(cfg, emailResult, tel.length > 0); var payload = { naam: naam, organisatie: org, email: email, telefoon: tel, form_type: formKey, lead_type: cfg.leadType, interested_in: cfg.interestedIn, lead_status: ‘Unassigned’, gclid: getT(‘gclid’), utm_source: getT(‘utm_source’), utm_medium: getT(‘utm_medium’), utm_campaign: getT(‘utm_campaign’), utm_content: getT(‘utm_content’), utm_term: getT(‘utm_term’), email_quality_flag: emailResult.flag, stage1_value: stage1Value, page_url: window.location.href, referrer: document.referrer, timestamp: new Date().toISOString() }; btn.disabled = true; btn.textContent = ‘Bezig…’; // ── 1. dataLayer push → GTM → Stape ──────────────────────── window.dataLayer = window.dataLayer || []; window.dataLayer.push({ event: ‘lead_submit’, form_type: formKey, lead_type: cfg.leadType, interested_in: cfg.interestedIn, gads_label: cfg.gadsLabel, stage1_value: stage1Value, email_quality_flag: emailResult.flag, lead_email: email, lead_naam: naam, lead_org: org, lead_phone: tel, gclid: payload.gclid, utm_source: payload.utm_source, utm_medium: payload.utm_medium, utm_campaign: payload.utm_campaign, page_url: window.location.href }); // ── 2. Direct Stape beacon (consent-mode fallback) ────────── var stapeUrl = STAPE_SERVER_URL + ‘/g/collect?v=2’ + ‘&tid=’ + GA4_ID + ‘&en=lead_submit’ + ‘&ep.form_type=’ + encodeURIComponent(formKey) + ‘&ep.lead_email=’ + encodeURIComponent(email) + ‘&ep.lead_org=’ + encodeURIComponent(org) + ‘&ep.stage1_value=’ + stage1Value + ‘&ep.email_quality_flag=’ + emailResult.flag + ‘&ep.gclid=’ + encodeURIComponent(payload.gclid) + ‘&ep.utm_source=’ + encodeURIComponent(payload.utm_source) + ‘&ep.interested_in=’ + encodeURIComponent(cfg.interestedIn) + ‘&ep.gads_label=’ + encodeURIComponent(cfg.gadsLabel); if (!TEST_MODE) { if (navigator.sendBeacon) navigator.sendBeacon(stapeUrl); else new Image().src = stapeUrl; } // ── 3. Show debug panel in test mode ─────────────────────── if (TEST_MODE && dbgEl) { var flagColor = emailResult.flag === ‘public_sector’ ? ‘good’ : emailResult.flag === ‘business’ ? ‘good’ : emailResult.flag === ‘personal’ ? ‘warn’ : ‘bad’; var valColor = stage1Value >= 8 ? ‘good’ : stage1Value >= 4 ? ‘warn’ : ‘bad’; dbgEl.style.display = ‘block’; dbgEl.innerHTML = ‘<div class=”sc-debug-title”>✓ dataLayer event — lead_submit</div>’ + dbgRow(‘form_type’, formKey, ”) + dbgRow(‘lead_type’, cfg.leadType, ”) + dbgRow(‘interested_in’, cfg.interestedIn, ”) + dbgRow(‘stage1_value’, ‘€’ + stage1Value, valColor) + dbgRow(‘email_quality_flag’, emailResult.flag, flagColor) + dbgRow(‘lead_email’, email, ”) + dbgRow(‘lead_org’, org, ”) + dbgRow(‘lead_phone’, tel || ‘(not provided)’, ”) + dbgRow(‘gclid’, payload.gclid || ‘(none — no ad click)’, payload.gclid ? ‘good’ : ‘warn’) + dbgRow(‘utm_source’, payload.utm_source || ‘(none)’, ”) + dbgRow(‘utm_campaign’, payload.utm_campaign || ‘(none)’, ”) + ‘<div class=”sc-debug-url”><strong>Stape beacon URL (not fired in test mode):</strong>’ + stapeUrl + ‘</div>’; } // ── 4. POST to Zoho Flow webhook ─────────────────────────── if (TEST_MODE) { // Test mode: skip webhook, show success immediately btn.disabled = false; btn.textContent = btnLabel; okEl.style.display = ‘block’; okEl.textContent = ‘✓ TEST MODE — Formulier gevalideerd. Webhook niet verstuurd. Controleer het debug paneel hieronder.’; } else { fetch(ZOHO_FLOW_WEBHOOK, { method: ‘POST’, headers: { ‘Content-Type’: ‘application/json’ }, body: JSON.stringify(payload) }) .then(function(res) { if (!res.ok) throw new Error(‘Webhook ‘ + res.status); okEl.style.display = ‘block’; okEl.textContent = ‘✓ Bedankt! U wordt doorgestuurd…’; setTimeout(function() { window.location.href = cfg.redirect; }, 1200); }) .catch(function(e) { console.error(‘SC form error:’, e); btn.disabled = false; btn.textContent = btnLabel; errEl.style.display = ‘block’; }); } }); } function dbgRow(k, v, cls) { return ‘<div class=”sc-debug-row”>’ + ‘<span class=”sc-debug-key”>’ + k + ‘</span>’ + ‘<span class=”sc-debug-val ‘ + cls + ‘”>’ + v + ‘</span>’ + ‘</div>’; } // ═══════════════════════════════════════════ // INIT // ═══════════════════════════════════════════ function init() { injectStyles(); document.querySelectorAll(‘.sc-form’).forEach(function(container) { var rawType = container.getAttribute(‘data-type’) || ”; var product = container.getAttribute(‘data-product’) || ”; var formKey = product ? rawType + ‘-‘ + product : rawType; var cfg = FORM_TYPES[formKey]; if (!cfg) { container.innerHTML = ‘<p style=”color:#dc2626;font-size:13px;”>⚠ Onbekend formuliertype: <code>’ + formKey + ‘</code></p>’; return; } renderForm(container, formKey, cfg); }); } if (document.readyState === ‘loading’) document.addEventListener(‘DOMContentLoaded’, init); else init(); })(); </script> </body>