{"id":2106,"date":"2025-10-28T16:48:25","date_gmt":"2025-10-28T16:48:25","guid":{"rendered":"https:\/\/100.53.225.157\/?page_id=2106"},"modified":"2026-02-17T22:27:02","modified_gmt":"2026-02-17T22:27:02","slug":"roi-wizard","status":"publish","type":"page","link":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/","title":{"rendered":"ROI Wizard"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2106\" class=\"elementor elementor-2106\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-440a6f0 e-flex e-con-boxed e-con e-parent\" data-id=\"440a6f0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-f246911 e-con-full e-flex e-con e-child\" data-id=\"f246911\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t<div class=\"elementor-element elementor-element-91e8e89 e-con-full e-flex e-con e-child\" data-id=\"91e8e89\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79565fd elementor-position-inline-start elementor-view-default elementor-mobile-position-block-start elementor-widget elementor-widget-icon-box\" data-id=\"79565fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-icon-box-wrapper\">\n\n\t\t\t\t\t\t<div class=\"elementor-icon-box-icon\">\n\t\t\t\t<span  class=\"elementor-icon\">\n\t\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"16\" height=\"20\" viewBox=\"0 0 16 20\" fill=\"none\"><path d=\"M7.625 0.0809999C6.746 0.456 1.47199 2.70701 0.593994 3.082C0.224994 3.239 0 3.58701 0 3.98801C0 8.36801 0.174994 10.328 0.968994 12.585C2.00799 15.54 4.048 17.895 7.5 19.868C7.807 20.044 8.193 20.044 8.5 19.868C11.983 17.877 14.032 15.53 15.062 12.585C15.846 10.344 16 8.48001 16 3.98801C16 3.58901 15.773 3.24 15.406 3.082L8.43799 0.0809999C8.18599 -0.027 7.877 -0.027 7.625 0.0809999ZM8 2.04999L13.996 4.65302C14.083 11.828 12.677 14.973 8.009 17.834C3.22 14.855 1.94801 11.676 1.99701 4.66101C3.36001 4.07901 6.847 2.54199 8 2.04999Z\" fill=\"#21A0A0\"><\/path><\/svg>\t\t\t\t<\/span>\n\t\t\t<\/div>\n\t\t\t\n\t\t\t\t\t\t<div class=\"elementor-icon-box-content\">\n\n\t\t\t\t\t\t\t\t\t<h2 class=\"elementor-icon-box-title\">\n\t\t\t\t\t\t<span  >\n\t\t\t\t\t\t\tResource Center  &gt;  Toolkit\t\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/h2>\n\t\t\t\t\n\t\t\t\t\n\t\t\t<\/div>\n\t\t\t\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c008bf5 elementor-widget elementor-widget-heading\" data-id=\"c008bf5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">ROI Wizard<\/h1>\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-89e6bf5 e-con-full e-flex e-con e-child\" data-id=\"89e6bf5\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-825b807 elementor-widget elementor-widget-html\" data-id=\"825b807\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ROI Wizard \u2013 Elementor-safe (scoped, no global CSS\/JS, no <html>\/<head>\/<body>) -->\r\n<div data-roi-wizard  class=\"roi-wizard-main\">\r\n\r\n  <header class=\"container\">\r\n    <h2>Outbound Campaign ROI Wizard<\/h2>\r\n    <div class=\"sub\">Answer a few short questions (one at a time). We\u2019ll explain each metric in plain English and compute ROI at the end.<\/div>\r\n  <\/header>\r\n\r\n  <main class=\"container\">\r\n    <div class=\"progress\"><div class=\"bar\" data-id=\"bar\"><\/div><\/div>\r\n    <div class=\"card\" data-id=\"wizard\">\r\n\r\n      <!-- Steps -->\r\n      <div class=\"step active\" data-step=\"1\">\r\n        <div class=\"q\">How many dials will this campaign make?<\/div>\r\n        <div class=\"explain\">A \u201cdial\u201d is one outbound call attempt. This sets the size of your campaign. If you\u2019re unsure, start with 5,000\u201310,000.<\/div>\r\n        <div class=\"input\"><input data-id=\"dials\" type=\"number\" min=\"0\" value=\"10000\" \/> <span class=\"mini\">e.g., 10000<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" disabled>Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"2\">\r\n        <div class=\"q\">What\u2019s your expected contact rate (%)?<\/div>\r\n        <div class=\"explain\">Contact rate is the share of dials that reach a live person (not voicemail). Typical B2B ranges 10\u201320%.<\/div>\r\n        <div class=\"input\"><input data-id=\"cr\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"18\" \/> <span class=\"mini\">e.g., 15\u201320%<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"3\">\r\n        <div class=\"q\">Of those live contacts, what % book a meeting?<\/div>\r\n        <div class=\"explain\">Meeting (appointment) rate measures how compelling your opening and value prop are. Typical 10\u201320%.<\/div>\r\n        <div class=\"input\"><input data-id=\"mr\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"15\" \/> <span class=\"mini\">e.g., 12\u201318%<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"4\">\r\n        <div class=\"q\">What % of meetings become qualified opportunities?<\/div>\r\n        <div class=\"explain\">Opportunity rate reflects how well your product fits the prospect\u2019s needs. Typical 40\u201360%.<\/div>\r\n        <div class=\"input\"><input data-id=\"or\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"50\" \/> <span class=\"mini\">e.g., 40\u201360%<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"5\">\r\n        <div class=\"q\">What % of opportunities turn into customers?<\/div>\r\n        <div class=\"explain\">Close rate varies by industry and deal size. SMB sales often land around 20\u201330% for well-qualified opps.<\/div>\r\n        <div class=\"input\"><input data-id=\"sr\" type=\"number\" min=\"0\" max=\"100\" step=\"0.1\" value=\"25\" \/> <span class=\"mini\">e.g., 20\u201330%<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"6\">\r\n        <div class=\"q\">How long is the average conversation (AHT) in minutes?<\/div>\r\n        <div class=\"explain\">Average Handling Time per live connect. Includes talk + quick notes. Typical 5\u20137 minutes.<\/div>\r\n        <div class=\"input\"><input data-id=\"aht\" type=\"number\" min=\"0\" step=\"0.1\" value=\"6\" \/> <span class=\"mini\">e.g., 6.0<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"7\">\r\n        <div class=\"q\">What\u2019s the fully-loaded wage per hour for agents ($)?<\/div>\r\n        <div class=\"explain\">Include base pay + taxes\/benefits. Many SMB teams land between $20\u2013$28\/hr loaded.<\/div>\r\n        <div class=\"input\"><input data-id=\"wage\" type=\"number\" min=\"0\" step=\"0.01\" value=\"22\" \/> <span class=\"mini\">e.g., 22.00<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"8\">\r\n        <div class=\"q\">Gross margin per sale OR LTV (in $)?<\/div>\r\n        <div class=\"explain\">Use your expected <b>gross margin<\/b> per new customer (revenue minus COGS). If you sell subscriptions, use <b>LTV<\/b> (gross margin over the relationship).<\/div>\r\n        <div class=\"input\">\r\n          <select data-id=\"valType\" data-change=\"toggleVal\">\r\n            <option value=\"gm\" selected>Gross Margin per sale<\/option>\r\n            <option value=\"ltv\">Customer LTV (gross margin)<\/option>\r\n          <\/select>\r\n          <input data-id=\"value\" type=\"number\" min=\"0\" step=\"1\" value=\"600\" \/>\r\n        <\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"9\">\r\n        <div class=\"q\">Any fixed campaign costs ($)?<\/div>\r\n        <div class=\"explain\">One-time costs like creative, compliance reviews, management time, training, or list cleaning.<\/div>\r\n        <div class=\"input\"><input data-id=\"fixed\" type=\"number\" min=\"0\" step=\"1\" value=\"5000\" \/> <span class=\"mini\">e.g., 5000<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"10\">\r\n        <div class=\"q\">Telephony cost per minute ($\/min)?<\/div>\r\n        <div class=\"explain\">Your carrier\/dialer minutes cost. Typical ranges $0.005\u2013$0.02 per minute.<\/div>\r\n        <div class=\"input\"><input data-id=\"telMin\" type=\"number\" min=\"0\" step=\"0.001\" value=\"0.01\" \/> <span class=\"mini\">e.g., 0.010<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"11\">\r\n        <div class=\"q\">How do you pay for data?<\/div>\r\n        <div class=\"explain\">If you pay per <i>dialed record<\/i>, choose \u201cPer Dial\u201d. If you buy a curated list, choose \u201cQualified Records\u201d.<\/div>\r\n        <div class=\"input\">\r\n          <select data-id=\"dataBasis\" data-change=\"toggleDataBasis\">\r\n            <option value=\"per_dial\">Per Dial<\/option>\r\n            <option value=\"qualified_records\" selected>Qualified Records<\/option>\r\n          <\/select>\r\n          <input data-id=\"dataUnit\" type=\"number\" min=\"0\" step=\"0.01\" value=\"2\" \/>\r\n        <\/div>\r\n        <div data-id=\"qRecords\" class=\"input\">\r\n          <span class=\"mini\">Qualified Records (count):<\/span>\r\n          <input data-id=\"qualified\" type=\"number\" min=\"0\" step=\"1\" value=\"3000\" \/>\r\n        <\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"next\">Next<\/button><\/div>\r\n      <\/div>\r\n\r\n      <div class=\"step\" data-step=\"12\">\r\n        <div class=\"q\">What\u2019s your sales cycle length (days)?<\/div>\r\n        <div class=\"explain\">Time from first contact to cash collection. Used to estimate payback period.<\/div>\r\n        <div class=\"input\"><input data-id=\"cycle\" type=\"number\" min=\"1\" step=\"1\" value=\"45\" \/> <span class=\"mini\">e.g., 30\u201360 days<\/span><\/div>\r\n        <div class=\"nav\"><button class=\"btn secondary\" data-action=\"back\">Back<\/button><button class=\"btn\" data-action=\"finish\">See Results<\/button><\/div>\r\n      <\/div>\r\n\r\n      <!-- Results -->\r\n      <div class=\"step\" data-step=\"13\">\r\n        <div class=\"q\">Your Results<\/div>\r\n        <div class=\"explain\">Here\u2019s what your funnel and economics look like based on your answers.<\/div>\r\n\r\n        <div class=\"funnel\">\r\n          <div class=\"pill\"><div class=\"k\">Dials<\/div><div data-id=\"r_dials\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"pill\"><div class=\"k\">Contacts<\/div><div data-id=\"r_contacts\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"pill\"><div class=\"k\">Meetings<\/div><div data-id=\"r_meet\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"pill\"><div class=\"k\">Opportunities<\/div><div data-id=\"r_opps\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"pill\"><div class=\"k\">Sales<\/div><div data-id=\"r_sales\" class=\"v\">\u2013<\/div><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"grid\" style=\"margin-top:12px\">\r\n          <div class=\"metric\"><div class=\"k\">ROI %<\/div><div data-id=\"r_roi\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"k\">Net Profit (Gross Profit)<\/div><div data-id=\"r_profit\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"k\">CAC ($\/customer)<\/div><div data-id=\"r_cac\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"k\">Breakeven Sales<\/div><div data-id=\"r_be\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"k\">Payback (days)<\/div><div data-id=\"r_pay\" class=\"v\">\u2013<\/div><\/div>\r\n          <div class=\"metric\"><div class=\"k\">LTV:CAC<\/div><div data-id=\"r_lc\" class=\"v\">\u2013<\/div><\/div>\r\n        <\/div>\r\n\r\n        <div data-id=\"warnings\" class=\"warn\"><\/div>\r\n\r\n        <div class=\"nav\" style=\"margin-top:16px\">\r\n          <button class=\"btn secondary\" data-action=\"restart\">Start Over<\/button>\r\n          <button class=\"btn\" data-action=\"share\">Copy Shareable Link<\/button>\r\n        <\/div>\r\n\r\n        <div class=\"tip\">Tip: If ROI is negative, try improving contact or meeting rates, reducing data cost, or increasing gross margin per sale.<\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n\r\n    <footer>Formulas: Contacts = Dials \u00d7 CR; Meetings = Contacts \u00d7 MR; Opps = Meetings \u00d7 OR; Sales = Opps \u00d7 SR. Labor cost uses AHT \u00d7 contacts and allows data costs per dial or per qualified record. \u00a9 2025<\/footer>\r\n  <\/main>\r\n\r\n  <!-- Lead Gate Modal (shown once per device before results) -->\r\n  <div data-id=\"leadGate\" class=\"lg-overlay\" style=\"display:none;\">\r\n    <div class=\"lg-card\">\r\n      <button class=\"lg-close\" data-id=\"lg_close\" aria-label=\"Close\">\u00d7<\/button>\r\n      <h3>Almost there\u2014where can we send your results?<\/h3>\r\n      <p class=\"lg-sub\">We\u2019ll email you a copy and a link to revisit. You\u2019ll only see this once on this device.<\/p>\r\n\r\n      <form data-id=\"leadForm\" novalidate>\r\n        <div class=\"lg-row\">\r\n          <label>First name<\/label>\r\n          <input type=\"text\" data-id=\"lg_first\" required autocomplete=\"given-name\" \/>\r\n        <\/div>\r\n        <div class=\"lg-row\">\r\n          <label>Last name<\/label>\r\n          <input type=\"text\" data-id=\"lg_last\" required autocomplete=\"family-name\" \/>\r\n        <\/div>\r\n        <div class=\"lg-row\">\r\n          <label>Email<\/label>\r\n          <input type=\"email\" data-id=\"lg_email\" required autocomplete=\"email\" \/>\r\n        <\/div>\r\n        <div class=\"lg-row\">\r\n          <label>Phone (optional)<\/label>\r\n          <input type=\"tel\" data-id=\"lg_phone\" autocomplete=\"tel\" \/>\r\n        <\/div>\r\n\r\n        <!-- Honeypot (bots fill this; humans don\u2019t) -->\r\n        <input type=\"text\" data-id=\"lg_company\" class=\"hp\" tabindex=\"-1\" autocomplete=\"off\" aria-hidden=\"true\" \/>\r\n\r\n        <label class=\"lg-consent\">\r\n          <input type=\"checkbox\" data-id=\"lg_consent\" required \/>\r\n          I agree to the <a href=\"\/privacy\" target=\"_blank\" rel=\"noopener\">Privacy Policy<\/a>\r\n          and consent to receive this calculator result by email.\r\n        <\/label>\r\n\r\n        <div class=\"lg-actions\">\r\n          <button type=\"submit\" class=\"btn\" data-id=\"lg_submit\">Send &amp; show results<\/button>\r\n        <\/div>\r\n        <div data-id=\"lg_err\" class=\"lg-err\"><\/div>\r\n      <\/form>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n  (function(){\r\n    \/\/ Robust root resolution (works in Elementor editor\/front-end)\r\n    const scriptEl = document.currentScript;\r\n    let root = scriptEl ? scriptEl.closest('[data-roi-wizard]') : null;\r\n    if (!root) {\r\n      const all = document.querySelectorAll('[data-roi-wizard]');\r\n      root = all[all.length - 1];\r\n    }\r\n    if(!root) return;\r\n\r\n    \/\/ Helpers (scoped lookups using data-id)\r\n    const $ = (name) => root.querySelector('[data-id=\"'+name+'\"]');\r\n    const $$ = (sel) => Array.from(root.querySelectorAll(sel));\r\n    let step = 1, totalSteps = 13;\r\n\r\n    function showStep(n){\r\n      step = Math.max(1, Math.min(totalSteps, n));\r\n      $$('.step').forEach(s => s.classList.remove('active'));\r\n      const el = root.querySelector('.step[data-step=\"'+step+'\"]');\r\n      if (el) el.classList.add('active');\r\n      const pct = Math.min(100, Math.round(((step-1)\/(totalSteps-1))*100));\r\n      $('bar').style.width = pct+'%';\r\n    }\r\n    const next = () => showStep(step+1);\r\n    const back = () => showStep(step-1);\r\n    const restart = () => showStep(1);\r\n\r\n    function toggleVal(){\r\n      const sel = $('valType').value;\r\n      $('value').placeholder = (sel==='gm'?'Gross margin per sale':'Customer LTV (gross margin)');\r\n    }\r\n    function toggleDataBasis(){\r\n      $('qRecords').style.display = ($('dataBasis').value==='qualified_records') ? 'flex':'none';\r\n    }\r\n\r\n    function read(){\r\n      return {\r\n        dials:+$('dials').value||0,\r\n        cr:(+$('cr').value||0)\/100,\r\n        mr:(+$('mr').value||0)\/100,\r\n        orr:(+$('or').value||0)\/100,\r\n        sr:(+$('sr').value||0)\/100,\r\n        aht:+$('aht').value||0,\r\n        wage:+$('wage').value||0,\r\n        valType:$('valType').value,\r\n        unitVal:+$('value').value||0,\r\n        fixed:+$('fixed').value||0,\r\n        telMin:+$('telMin').value||0,\r\n        dataBasis:$('dataBasis').value,\r\n        dataUnit:+$('dataUnit').value||0,\r\n        qualified:+$('qualified').value||0,\r\n        cycle:+$('cycle').value||1\r\n      };\r\n    }\r\n    function calc(m){\r\n      const contacts = m.dials * m.cr;\r\n      const meetings = contacts * m.mr;\r\n      const opps = meetings * m.orr;\r\n      const sales = opps * m.sr;\r\n\r\n      const talkMin = contacts * m.aht;\r\n      const labor = (talkMin\/60) * m.wage;\r\n      const telephony = talkMin * m.telMin;\r\n      const data = m.dataBasis==='per_dial' ? m.dials*m.dataUnit : m.qualified*m.dataUnit;\r\n      const totalCost = labor + telephony + data + m.fixed;\r\n\r\n      const gm_total = sales * m.unitVal;\r\n      const profit = gm_total - totalCost;\r\n      const roi = totalCost>0 ? (profit\/totalCost)*100 : NaN;\r\n      const cac = sales>0 ? totalCost\/sales : NaN;\r\n      const be = m.unitVal>0 ? totalCost\/m.unitVal : NaN;\r\n      const pay = (m.unitVal>0 && sales>0) ? m.cycle * ( (totalCost\/sales)\/m.unitVal ) : NaN;\r\n      const ltvcac = (sales>0 && m.unitVal>0) ? (m.unitVal)\/(totalCost\/sales) : NaN;\r\n\r\n      return {contacts,meetings,opps,sales,talkMin,labor,telephony,data,totalCost,gm_total,profit,roi,cac,be,pay,ltvcac};\r\n    }\r\n    function fmt(n,d=0){ if(!isFinite(n)) return '\u2013'; return n.toLocaleString(undefined,{minimumFractionDigits:d,maximumFractionDigits:d}) }\r\n    function money(n){ if(!isFinite(n)) return '\u2013'; return '$'+fmt(n,0) }\r\n    function percent(n){ if(!isFinite(n)) return '\u2013'; return fmt(n,1)+'%' }\r\n\r\n    \/\/ ===== Lead gate (restored to original flow with cleanup) =====\r\n    const GATE_KEY = 'roi_gate_done';\r\n    function openLeadGate(){\r\n      return new Promise((resolve)=>{\r\n        const modal = $('leadGate');\r\n        const form  = $('leadForm');\r\n        const close = $('lg_close');\r\n        const errEl = $('lg_err');\r\n\r\n        const openedAt = Date.now();\r\n        modal.style.display = 'flex';\r\n        errEl.textContent = '';\r\n\r\n        const onClose = () => { cleanup(); resolve(false); };\r\n        close.addEventListener('click', onClose, { once:true });\r\n\r\n        async function onSubmit(e){\r\n          e.preventDefault();\r\n          errEl.textContent = '';\r\n\r\n          if ($('lg_company').value.trim() !== '') { cleanup(); resolve(true); return; } \/\/ honeypot\r\n          const first = $('lg_first').value.trim();\r\n          const last  = $('lg_last').value.trim();\r\n          const email = $('lg_email').value.trim();\r\n          const phone = $('lg_phone').value.trim();\r\n          const consent = $('lg_consent').checked;\r\n\r\n          if (!first || !last || !email || !consent){\r\n            errEl.textContent = 'Please complete required fields and consent.'; return;\r\n          }\r\n          if (!\/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email)){\r\n            errEl.textContent = 'Please enter a valid email address.'; return;\r\n          }\r\n          const phoneNorm = phone.replace(\/[^\\d+]\/g,'');\r\n\r\n          if (Date.now() - openedAt < 1500){\r\n            errEl.textContent = 'Please take a moment to complete the form.'; return;\r\n          }\r\n\r\n          const payload = {\r\n            first, last, email, phone: phoneNorm, consent: true,\r\n            ua: navigator.userAgent, ts: new Date().toISOString(),\r\n            inputs: read()\r\n          };\r\n\r\n          try{\r\n            const res = await fetch('\/api\/leads\/roi-gate', {\r\n              method:'POST',\r\n              headers:{'Content-Type':'application\/json'},\r\n              body: JSON.stringify(payload)\r\n            });\r\n            if (!res.ok) throw new Error('Network error');\r\n            cleanup(); resolve(true);\r\n          }catch(err){\r\n            console.error(err);\r\n            cleanup(); resolve(true); \/\/ fail-open\r\n          }\r\n        }\r\n\r\n        form.addEventListener('submit', onSubmit);\r\n\r\n        function cleanup(){\r\n          modal.style.display = 'none';\r\n          form.removeEventListener('submit', onSubmit);\r\n        }\r\n      });\r\n    }\r\n\r\n    function showResults(){\r\n      const m = read();\r\n      const r = calc(m);\r\n\r\n      $('r_dials').textContent = fmt(m.dials,0);\r\n      $('r_contacts').textContent = fmt(r.contacts,0);\r\n      $('r_meet').textContent = fmt(r.meetings,0);\r\n      $('r_opps').textContent = fmt(r.opps,0);\r\n      $('r_sales').textContent = fmt(r.sales,0);\r\n\r\n      const roiEl = $('r_roi');\r\n      roiEl.textContent = percent(r.roi);\r\n      roiEl.className = 'v '+ (r.roi>=0?'ok':'bad');\r\n\r\n      const profEl = $('r_profit');\r\n      profEl.textContent = money(r.profit);\r\n      profEl.className = 'v '+ (r.profit>=0?'ok':'bad');\r\n\r\n      $('r_cac').textContent = money(r.cac);\r\n      $('r_be').textContent = fmt(r.be,1);\r\n      $('r_pay').textContent = fmt(r.pay,0);\r\n      $('r_lc').textContent = fmt(r.ltvcac,2);\r\n\r\n      \/\/ Warnings & plain-English coach\r\n      let notes = [];\r\n      const m2 = m;\r\n      const impliedApc = m2.cr>0 ? (1\/m2.cr) : Infinity;\r\n      if (isFinite(impliedApc) && (impliedApc<3 || impliedApc>10)){\r\n        notes.push(`Heads up: your contact rate implies roughly ${impliedApc.toFixed(1)} attempts per contact. If that seems off, revisit your CR.`);\r\n      }\r\n      if (m2.dataBasis==='per_dial' && m2.dataUnit>2) notes.push('Your data cost per dial looks high for SMB lists. Double-check it.');\r\n      if (m2.valType==='gm' && m2.unitVal<300) notes.push('Gross margin per sale seems low. Make sure you\u2019re using margin, not revenue.');\r\n      if (r.roi<0) notes.push('ROI is negative. Try improving meeting\/close rates, reducing data cost, or increasing gross margin per sale.');\r\n      $('warnings').innerHTML = notes.map(n=>`\u2022 ${n}`).join('<br>');\r\n\r\n      showStep(13);\r\n    }\r\n\r\n    function gateThenFinish(){\r\n      let done = false;\r\n      try { done = localStorage.getItem(GATE_KEY) === '1'; } catch(e){}\r\n      if (done) { showResults(); return; }\r\n      openLeadGate().then((ok)=>{\r\n        try{ if (ok) localStorage.setItem(GATE_KEY,'1'); }catch(e){}\r\n        showResults(); \/\/ soft gate: show results even if skipped\/failed\r\n      });\r\n    }\r\n    function finish(){ gateThenFinish(); }\r\n\r\n    function encodeState(){\r\n      const m = read();\r\n      try{\r\n        return btoa(unescape(encodeURIComponent(JSON.stringify(m))));\r\n      }catch(e){\r\n        return btoa(JSON.stringify(m));\r\n      }\r\n    }\r\n    function decodeState(h){\r\n      try{ return JSON.parse(decodeURIComponent(escape(atob(h)))) }catch(e){\r\n        try{ return JSON.parse(atob(h)) }catch(_){ return null }\r\n      }\r\n    }\r\n    async function share(){\r\n      const url = location.origin + location.pathname + '#'+encodeState();\r\n      try{\r\n        await navigator.clipboard.writeText(url);\r\n        alert('Link copied!');\r\n      }catch(e){\r\n        prompt('Copy this link:', url);\r\n      }\r\n    }\r\n\r\n    \/\/ Wire up button actions\r\n    $$('.btn[data-action]').forEach(btn=>{\r\n      const act = btn.getAttribute('data-action');\r\n      if (act==='next') btn.addEventListener('click', next);\r\n      if (act==='back') btn.addEventListener('click', back);\r\n      if (act==='restart') btn.addEventListener('click', restart);\r\n      if (act==='finish') btn.addEventListener('click', finish);   \/\/ <-- gate restored here\r\n      if (act==='share') btn.addEventListener('click', share);\r\n    });\r\n    \/\/ Wire up select changes\r\n    $$('select[data-change]').forEach(sel=>{\r\n      const ch = sel.getAttribute('data-change');\r\n      if (ch==='toggleVal') sel.addEventListener('change', toggleVal);\r\n      if (ch==='toggleDataBasis') sel.addEventListener('change', toggleDataBasis);\r\n    });\r\n\r\n    \/\/ Initial setup + hash-state load\r\n    (function init(){\r\n      toggleVal(); toggleDataBasis();\r\n      const hash = (location.hash||'').replace('#','').trim();\r\n      if(hash){\r\n        const m = decodeState(hash);\r\n        if(m){\r\n          $('dials').value=m.dials; $('cr').value=m.cr*100; $('mr').value=m.mr*100; $('or').value=m.orr*100; $('sr').value=m.sr*100;\r\n          $('aht').value=m.aht; $('wage').value=m.wage; $('valType').value=m.valType; $('value').value=m.unitVal;\r\n          $('fixed').value=m.fixed; $('telMin').value=m.telMin; $('dataBasis').value=m.dataBasis; $('dataUnit').value=m.dataUnit;\r\n          $('qualified').value=m.qualified; $('cycle').value=m.cycle; toggleVal(); toggleDataBasis();\r\n        }\r\n      }\r\n      showStep(1);\r\n    })();\r\n\r\n    \/\/ All scoped to 'root' (no globals)\r\n  })();\r\n<\/script>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-297201a e-flex e-con-boxed e-con e-parent\" data-id=\"297201a\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[],&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-fe12559 e-con-full e-flex e-con e-child\" data-id=\"fe12559\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-048d4ba elementor-widget elementor-widget-jet-headline\" data-id=\"048d4ba\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"jet-headline.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"jet-headline jet-headline--direction-horizontal\"><span class=\"jet-headline__part jet-headline__first\"><span class=\"jet-headline__label\">Don\u2019t Do It Alone -  <\/span><\/span><span class=\"jet-headline__space\">&nbsp;<\/span><span class=\"jet-headline__part jet-headline__second\"><span class=\"jet-headline__label\"> Get Expert Support<\/span><\/span><\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1144afd e-con-full e-flex e-con e-child\" data-id=\"1144afd\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e1ca27e elementor-widget elementor-widget-text-editor\" data-id=\"e1ca27e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Putting this system into practice requires consistent drills, coaching, and measurement. Partner with a team that already runs this playbook so you can accelerate adoption, free up manager time, and see measurable improvements in connect and conversion rates.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-55ed614 e-con-full e-flex e-con e-child\" data-id=\"55ed614\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4d7e41f elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"4d7e41f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.telemarketing.com\/services\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-angle-double-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Explore Our Services<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-0f14502 elementor-mobile-align-center elementor-widget elementor-widget-button\" data-id=\"0f14502\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.telemarketing.com\/contact-us\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t<span class=\"elementor-button-icon\">\n\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-angle-double-right\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z\"><\/path><\/svg>\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Request a Quote<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f82cb7f e-flex e-con-boxed e-con e-parent\" data-id=\"f82cb7f\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b4c64ab elementor-widget elementor-widget-template\" data-id=\"b4c64ab\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"section\" data-elementor-id=\"1232\" class=\"elementor elementor-1232\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-62e68d0 e-flex e-con-boxed e-con e-parent\" data-id=\"62e68d0\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-ce18b8d e-con-full e-flex e-con e-child\" data-id=\"ce18b8d\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d19c819 elementor-widget elementor-widget-heading\" data-id=\"d19c819\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Learn From Teams Running Campaigns Right Now<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f24071 elementor-widget elementor-widget-text-editor\" data-id=\"8f24071\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">We build and train outbound programs across industries\u2014from healthcare to tech. Everything we share here is tested in real campaigns and proven to work.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6a86666 e-con-full e-flex e-con e-child\" data-id=\"6a86666\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t<div class=\"elementor-element elementor-element-e31e6ad e-grid e-con-full e-con e-child\" data-id=\"e31e6ad\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6ae2b70 elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"6ae2b70\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/compliance-checklists\/\" tabindex=\"-1\"><img fetchpriority=\"high\" decoding=\"async\" width=\"348\" height=\"196\" src=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133.png\" class=\"attachment-full size-full wp-image-1233\" alt=\"\" srcset=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133.png 348w, https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-300x169.png 300w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/compliance-checklists\/\">DNC\/TCPA awareness baked into every play <\/a><\/h3><p class=\"elementor-image-box-description\">Explore Compliance Checklists<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9f3a0b elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"c9f3a0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/script-templates\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"348\" height=\"196\" src=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-1.png\" class=\"attachment-full size-full wp-image-1234\" alt=\"\" srcset=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-1.png 348w, https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-1-300x169.png 300w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/script-templates\/\"> Script coaching for empathy and clarity <\/a><\/h3><p class=\"elementor-image-box-description\">Explore Script Templates<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6678b2a elementor-position-top elementor-widget elementor-widget-image-box\" data-id=\"6678b2a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image-box.default\">\n\t\t\t\t\t<div class=\"elementor-image-box-wrapper\"><figure class=\"elementor-image-box-img\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/\" tabindex=\"-1\"><img decoding=\"async\" width=\"348\" height=\"196\" src=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-2.png\" class=\"attachment-full size-full wp-image-1235\" alt=\"\" srcset=\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-2.png 348w, https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/10\/Frame-133-2-300x169.png 300w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/a><\/figure><div class=\"elementor-image-box-content\"><h3 class=\"elementor-image-box-title\"><a href=\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/\">KPI dashboards that drive decisions, not guesses<\/a><\/h3><p class=\"elementor-image-box-description\">Explore Outbound Toolkit<\/p><\/div><\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Resource Center &gt; Toolkit Outbound Campaign ROI Wizard Answer a few short questions (one at a time). We\u2019ll explain each metric in plain English and compute ROI at the end. How many dials will this campaign make? A \u201cdial\u201d is one outbound call attempt. This sets the size of your campaign. If you\u2019re unsure, start [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":753,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2106","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Outbound Campaign ROI Calculator - Free Wizard Tool<\/title>\n<meta name=\"description\" content=\"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Outbound Campaign ROI Calculator - Free Wizard Tool\" \/>\n<meta property=\"og:description\" content=\"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/\" \/>\n<meta property=\"og:site_name\" content=\"Telemarketing\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-17T22:27:02+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/\",\"url\":\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/\",\"name\":\"Outbound Campaign ROI Calculator - Free Wizard Tool\",\"isPartOf\":{\"@id\":\"https:\/\/www.telemarketing.com\/#website\"},\"datePublished\":\"2025-10-28T16:48:25+00:00\",\"dateModified\":\"2026-02-17T22:27:02+00:00\",\"description\":\"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.telemarketing.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Resource Center\",\"item\":\"https:\/\/www.telemarketing.com\/resource-center\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Toolkit\",\"item\":\"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"ROI Wizard\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.telemarketing.com\/#website\",\"url\":\"https:\/\/www.telemarketing.com\/\",\"name\":\"Telemarketing\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.telemarketing.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.telemarketing.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.telemarketing.com\/#organization\",\"name\":\"Telemarketing\",\"url\":\"https:\/\/www.telemarketing.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.telemarketing.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/07\/telemarketing-by-answernet-temporal.svg\",\"contentUrl\":\"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/07\/telemarketing-by-answernet-temporal.svg\",\"width\":354,\"height\":76,\"caption\":\"Telemarketing\"},\"image\":{\"@id\":\"https:\/\/www.telemarketing.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Outbound Campaign ROI Calculator - Free Wizard Tool","description":"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/","og_locale":"en_US","og_type":"article","og_title":"Outbound Campaign ROI Calculator - Free Wizard Tool","og_description":"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.","og_url":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/","og_site_name":"Telemarketing","article_modified_time":"2026-02-17T22:27:02+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/","url":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/","name":"Outbound Campaign ROI Calculator - Free Wizard Tool","isPartOf":{"@id":"https:\/\/www.telemarketing.com\/#website"},"datePublished":"2025-10-28T16:48:25+00:00","dateModified":"2026-02-17T22:27:02+00:00","description":"Answer a few questions and get an instant ROI estimate for your outbound telemarketing campaign. Free, no signup required.","breadcrumb":{"@id":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/roi-wizard\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.telemarketing.com\/"},{"@type":"ListItem","position":2,"name":"Resource Center","item":"https:\/\/www.telemarketing.com\/resource-center\/"},{"@type":"ListItem","position":3,"name":"Toolkit","item":"https:\/\/www.telemarketing.com\/resource-center\/toolkit\/"},{"@type":"ListItem","position":4,"name":"ROI Wizard"}]},{"@type":"WebSite","@id":"https:\/\/www.telemarketing.com\/#website","url":"https:\/\/www.telemarketing.com\/","name":"Telemarketing","description":"","publisher":{"@id":"https:\/\/www.telemarketing.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.telemarketing.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.telemarketing.com\/#organization","name":"Telemarketing","url":"https:\/\/www.telemarketing.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.telemarketing.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/07\/telemarketing-by-answernet-temporal.svg","contentUrl":"https:\/\/www.telemarketing.com\/wp-content\/uploads\/2025\/07\/telemarketing-by-answernet-temporal.svg","width":354,"height":76,"caption":"Telemarketing"},"image":{"@id":"https:\/\/www.telemarketing.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/pages\/2106","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/comments?post=2106"}],"version-history":[{"count":31,"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/pages\/2106\/revisions"}],"predecessor-version":[{"id":3372,"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/pages\/2106\/revisions\/3372"}],"up":[{"embeddable":true,"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/pages\/753"}],"wp:attachment":[{"href":"https:\/\/www.telemarketing.com\/wp-json\/wp\/v2\/media?parent=2106"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}