{"id":1265,"date":"2024-07-15T11:33:36","date_gmt":"2024-07-15T16:33:36","guid":{"rendered":"https:\/\/www.exactdata.com\/info\/?post_type=products-services&#038;p=1265"},"modified":"2024-07-18T09:39:47","modified_gmt":"2024-07-18T14:39:47","slug":"marketing-solutions","status":"publish","type":"products-services","link":"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/","title":{"rendered":"Omnichannel Marketing Solutions for SMBs"},"content":{"rendered":"[vc_section css=&#8221;.vc_custom_1721051197215{padding-top: 80px !important;padding-bottom: 80px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/07\/light-blue-right.png?id=1320) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][vc_row][vc_column width=&#8221;7\/12&#8243;][vc_column_text css=&#8221;.vc_custom_1720535994136{margin-bottom: 15px !important;}&#8221;]\r\n<h1>Discover Our Range of Marketing Solutions<\/h1>\r\n[\/vc_column_text][vc_column_text css=&#8221;.vc_custom_1720536001289{margin-bottom: 15px !important;}&#8221;]\r\n<h2>Reach Your Sales and Marketing Goals<\/h2>\r\n[\/vc_column_text][vc_column_text]Exact Data offers a variety of marketing solutions designed to help you connect with potential prospects and personalize your outreach. As a subsidiary of Data Axle, Exact Data offers your business the power of having an extended marketing department at your fingertips. From highly targeted business and consumer lists to in-house creative experts and today\u2019s most popular marketing solutions, we make it easy to create personalized campaigns that connect with your audience. Working closely with clients so we can better understand their unique needs and goals, businesses trust Exact Data to be their marketing partner in today\u2019s crowded market. Discover our marketing solutions below or fill out the form at the bottom of this page, and one of our marketing partners will get in touch shortly.[\/vc_column_text]<a  href=\"#form\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Get Started Today<\/a>[\/vc_column][vc_column width=&#8221;5\/12&#8243; css=&#8221;.vc_custom_1721051258261{padding-top: 50px !important;}&#8221;][vc_single_image image=&#8221;1328&#8243; img_size=&#8221;full&#8221; alignment=&#8221;right&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721210871692{padding-top: 50px !important;padding-bottom: 50px !important;background-color: #f9f9f9 !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243;][vc_single_image image=&#8221;1384&#8243; img_size=&#8221;full&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1721212022922{padding-top: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1720540209470{margin-bottom: 15px !important;}&#8221;]\r\n<h3>Email Marketing<\/h3>\r\n[\/vc_column_text][vc_column_text]Email marketing with Exact Data is all about easily reaching the right audience. Our targeted business and consumer email lists help you discover the perfect leads. Build brand awareness, nurture current customers, or grow your email list faster than ever. We ensure our database is accurate and up to date through a rigorous data hygiene process, only providing you with the best possible leads for your email campaigns. Choose from millions of email contacts and send personalized emails directly to those most likely to buy.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/email-marketing-solutions\/\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Learn More<\/a>[\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721210891243{padding-top: 50px !important;padding-bottom: 50px !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1721214226497{padding-top: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1720544570871{margin-bottom: 15px !important;}&#8221;]\r\n<h3>Direct Mail<\/h3>\r\n[\/vc_column_text][vc_column_text]With Exact Data&#8217;s direct mail services, achieving your sales and marketing goals has never been easier. Whether you&#8217;re a new business looking to expand brand awareness or an established organisation seeking new customers, our direct mail campaigns effectively connect you to your audience. From postcards and brochures to flyers and letters, we help you advertise everything from special offers to new franchise openings. Use your own contact list, or let our team assist you with creating a brand new targeted mailing list from our business or consumer databases. From there, our designers can craft stand-out mail pieces that get noticed.[\/vc_column_text]<a  href=\"#form\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Learn More<\/a>[\/vc_column][vc_column width=&#8221;1\/2&#8243;][vc_single_image image=&#8221;1383&#8243; img_size=&#8221;full&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721210909368{padding-top: 50px !important;padding-bottom: 50px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/02\/grad-backgrnd.png?id=217) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243;][vc_single_image image=&#8221;1385&#8243; img_size=&#8221;full&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1721214234686{padding-top: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1720544854229{margin-bottom: 15px !important;}&#8221;]\r\n<h3>Online Display Advertising<\/h3>\r\n[\/vc_column_text][vc_column_text]Boost your marketing success with Exact Data&#8217;s online display advertising services. This powerful tool lets you place your brand and message on websites that your potential customers already visit, making it easy to connect with prospects who are ready to buy. Our experienced team of marketers can help you write copy, design ads, upload to the right channels, time your campaign launch, and even track metrics. Let Exact Data help you make the most of your online display advertising efforts![\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/online-display-services\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Learn More<\/a>[\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721211117852{padding-top: 50px !important;padding-bottom: 50px !important;background-color: #f9f9f9 !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1721214243153{padding-top: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1720547064371{margin-bottom: 15px !important;}&#8221;]\r\n<h3>Search Engine Marketing<\/h3>\r\n[\/vc_column_text][vc_column_text]Improve your Return On Investment with Exact Data&#8217;s Search Engine Marketing (SEM) services. Have you ever wondered how your competitors achieve top rankings in search results? SEM is the key, placing your business or website on major search engine pages like Google\u2122 and Bing\u2122. When you want to quickly gain more customers, paid ads can not only drive a positive return on investment but also give your business a leading spot in search results. At Exact Data, our in-house marketing team can handle all your SEM needs, from account setup and campaign management to customer support and detailed reporting. Let us help you find qualified leads so you can grow your business.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/search-engine-marketing\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Learn More<\/a>[\/vc_column][vc_column width=&#8221;1\/2&#8243;][vc_single_image image=&#8221;1381&#8243; img_size=&#8221;full&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721228312412{padding-top: 50px !important;padding-bottom: 50px !important;background-color: #ffffff !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243;][vc_single_image image=&#8221;1412&#8243; img_size=&#8221;full&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243;][vc_column_text css=&#8221;.vc_custom_1721227800901{margin-bottom: 15px !important;}&#8221;]\r\n<h3>Social Media Advertising<\/h3>\r\n[\/vc_column_text][vc_column_text]Engage customers on Facebook<sup>\u2122<\/sup> and more with Exact Data&#8217;s social media advertising services. Social media is one of today\u2019s fastest forms of communication, making it one of the easiest ways to increase your revenue and raise brand awareness. Our team of marketing experts can help you choose the best ad format for your message. Additionally, we&#8217;ll guide you in selecting the best target audience for your ads.\r\nThis helps ensure your ads reach those most likely to purchase your products or services.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/social-media-advertising\/\" target=\"_self\" class=\"da-button da-primary-button  scrollToElement da-large-button\">Learn More<\/a>[\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721214376161{padding-top: 50px !important;padding-bottom: 50px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/02\/data-background-3.png?id=212) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][vc_row][vc_column][vc_column_text]\r\n<h2 class=\"p1\" style=\"text-align: center\">What Sets Exact Data Apart from the Rest?<\/h2>\r\n<p style=\"text-align: center\">From our comprehensive and targeted marketing solutions to our data, we help you effectively connect with your ideal customers. Offering a wide range of services, our expertise in marketing ensures that you reach your audience through the right channels and stop wasting valuable marketing dollars. Our databases are meticulously maintained to provide accurate and up-to-date information, maximizing your ROI and saving you time and money. When your business needs marketing support, our trained marketing partners will be with you every step of the way. Start achieving your sales and marketing goals with help from Exact Data.<\/p>\r\n[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1721211106882{background-color: #ffffff !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][vc_row css=&#8221;.vc_custom_1712945699583{padding-top: 50px !important;padding-bottom: 50px !important;background-color: #ffffff !important;}&#8221;][vc_column width=&#8221;1\/2&#8243; el_id=&#8221;form&#8221;][vc_column_text]\r\n<h3 style=\"text-align: center\">Reach out to us to learn more!<\/h3>\r\n<p style=\"text-align: center\">Fill out the form on this page, and a trusted representative will contact you to discuss your marketing needs<\/p>\r\n[\/vc_column_text]    <div class=\"hs_inline_form\">\r\n        <script>\r\n            var device = \"\";\r\n            device += detectMob() ? \"Mobile\" : \"Desktop\"; device += \", \" + getBrowserName();\r\n            if (detectMob()) {\r\n                device += \", \" + getMobileOperatingSystem();\r\n            } else {\r\n                device += \", \" + getOperatingSystem();\r\n            }\r\n            var browserName = navigator.userAgent;\r\n\r\n            var randomStringId = Math.random().toString(36).substr(2, 9);\r\n\r\n            window.phone_status = \"Unknown\";\r\n            window.line_type = \"Unknown\";\r\n\r\n            var badWords = [\r\n                \"arse\",\"ass\",\"asshole\",\"bastard\",\"bitch\",\"bollocks\",\"brotherfucker\",\"bugger\",\r\n                \"bullshit\",\"child-fucker\",\"Christ on a bike\",\"Christ on a cracker\",\"crap\",\r\n                \"cunt\",\"damn\",\"effing\",\"fatherfucker\",\"frigger\",\"fuck\",\"goddamn\",\"godsdamn\",\r\n                \"hell\",\"holy shit\",\"horseshit\",\"Jesus Christ\",\"Jesus fuck\",\"Jesus H. Christ\",\r\n                \"Jesus Harold Christ\",\"Jesus wept\",\"Jesus, Mary and Joseph\",\"Judas Priest\",\r\n                \"motherfucker\",\"nigga\",\"prick\",\"shit\",\"shit ass\",\"shitass\",\"sisterfucker\",\r\n                \"slut\",\"son of a bitch\",\"son of a whore\",\"sweet Jesus\",\"twat\",\"suck\",\"sucker\",\r\n                \"fucker\"\r\n            ];\r\n\r\n            hbspt.forms.create({\r\n                region: \"na1\",\r\n                portalId: \"5267700\",\r\n                formId: \"c7691a65-1d48-48a8-aa19-64a1a2f02aa8\",\r\n                cssClass: \"ds_on_page_custom_class\",\r\n                formInstanceId: `ds_on_page_${randomStringId}`,\r\n                css:'',\r\n                onFormReady: function($form) {\r\n                    $form.find(\"input[type=submit]\").css(\"width\", \"100%\");\r\n                    $form.find(\"input[name=device]\").val();\r\n                    $form.find(\"input[name=bas_phone]\").val();\r\n                    $form.find(\"input[name=google_analytics_campaign]\").val(Cookies.get(\"campaignid\") || \"Not Present\");\r\n                    $form.find(\"input[name=sfcid]\").val(Cookies.get(\"sfcid\") || \"701Pa000007r0KSIAY\");\r\n                    $form.find(\"input[name=media_code]\").val(Cookies.get(\"media_code\") || \"EXDCMSW00100\");\r\n                    $form.find(\"input[name=gclid]\").val(Cookies.get(\"gclid\") || \"Not Present\");\r\n                    $form.find(\"input[name=ms_click_id]\").val(Cookies.get(\"msclkid\") || \"Not Present\");\r\n                    $form.find(\"input[name=facebook_cookie_fbc]\").val(Cookies.get(\"_fbc\") || \"Not Present\");\r\n                    $form.find(\"input[name=facebook_cookie_fbp]\").val(Cookies.get(\"_fbp\") || \"Not Present\");\r\n                    $form.find(\"input[name=utm_campaign]\").val(Cookies.get(\"utm_campaign\") || \"Not Present\");\r\n                    $form.find(\"input[name=utm_content]\").val(Cookies.get(\"utm_content\") || \"Not Present\");\r\n                    $form.find(\"input[name=utm_medium]\").val(Cookies.get(\"utm_medium\") || \"Not Present\");\r\n                    $form.find(\"input[name=utm_source]\").val(Cookies.get(\"utm_source\") || \"Not Present\");\r\n                    $form.find(\"input[name=utm_term]\").val(Cookies.get(\"utm_term\") || \"Not Present\");\r\n                    $form.find(\"input[name=adgroup_id]\").val(Cookies.get(\"adgroupid\") || \"Not Present\");\r\n                    $form.find(\"input[name=extension_id]\").val(Cookies.get(\"extensionid\") || \"Not Present\");\r\n                    $form.find(\"input[name=matchtype]\").val(Cookies.get(\"matchtype\") || \"Not Present\");\r\n                    $form.find(\"input[name=network]\").val(Cookies.get(\"network\") || \"Not Present\");\r\n                    $form.find(\"input[name=bp_line_type]\").val(Cookies.get(\"bp_line_type\") || \"Unknown\");\r\n                    $form.find(\"input[name=bp_phone_status]\").val(Cookies.get(\"bp_phone_status\") || \"Unknown\");\r\n                    $form.find(\"input[name=fbclid]\").val(Cookies.get(\"fbclid\") || \"Not Present\");\r\n                    $form.find(\"input[name=leadsource]\").val(Cookies.get(\"leadsource\") || \"Not Present\");\r\n                    $form.find(\"input[name=ip]\").val(connectingIP);\r\n                    $form.find(\"input[name=browser_user_agent]\").val(browserName);\r\n                    $form.find(\"input[name=page_url__long_text_]\").val(currentPageURL);\r\n                    var phoneField = $form.find(\"input[name=phone]\");\r\n                    const phoneMasker = IMask(phoneField.get(0), {\r\n                        mask: \"+1 (000) 000-0000\",\r\n                        lazy: false,\r\n                        placeholder: \"_\"\r\n                    });\r\n\r\n                    \/*Floating Labels*\/\r\n                    var $input = $(\".hs-input\");\r\n                    $input\r\n                        .on(\"focus\", function() {\r\n                            $(this)\r\n                                .parent()\r\n                                .parent()\r\n                                .addClass(\"active\");\r\n                        })\r\n                        .blur();\r\n\r\n                    \/\/ move label if input is empty or not\r\n                    $input.focusout(function() {\r\n                        if (!$(this).val()) {\r\n                            $(this)\r\n                                .parent()\r\n                                .parent()\r\n                                .removeClass(\"active\");\r\n                        } else {\r\n                            $(this)\r\n                                .parent()\r\n                                .parent()\r\n                                .addClass(\"active\");\r\n                        }\r\n                    }).focusout();\r\n\r\n                                            $form.find(\"input[name=keyword]\").val(Cookies.get(\"keyword\") || \"Not Present\");\r\n                    \r\n                    var domain = window.location.hostname;\r\n                    var baseUrls = {\r\n                        \"www.exactdata.com\": {\r\n                            terms: \"https:\/\/www.exactdata.com\/info\/terms-of-use\/\",\r\n                            privacy: \"https:\/\/www.exactdata.com\/info\/privacy-policy\/\"\r\n                        },\r\n                        \"qa.exactdata.com\": {\r\n                            terms: \"https:\/\/qa.exactdata.com\/info\/terms-of-use\/\",\r\n                            privacy: \"https:\/\/qa.exactdata.com\/info\/privacy-policy\/\"\r\n                        }\r\n                    };\r\n                    var urls = baseUrls[domain];\r\n                    var disclaimer = document.createElement(\"div\");\r\n                    disclaimer.innerHTML = `<p class=\"verbiage\">By submitting this form you are agreeing to Exact Data\\'s <a target=\"_blank\" href=\"${urls.terms}\">Terms & Conditions<\/a>, <a target=\"_blank\" href=\"${urls.privacy}\">Privacy Policy<\/a>, and consent to our <span class=\"contact-policy-hover\">Contact Policy<span class=\"contact-policy-tooltip\">I consent to Data Axle and its subsidiaries and affiliates using my email and phone number for marketing and analytical purposes, including to contact me regarding Data Axle products.<\/span><\/span>. No credit card required.<\/p>`;\r\n                    var style = document.createElement(\"style\");\r\n                    style.textContent = `\r\n                    .verbiage {\r\n                        font-size: 12px;\r\n                        margin: 0;\r\n                        padding: 0;\r\n                        line-height: 15px;\r\n                        text-shadow: none;\r\n                        color: rgba(59, 59, 59, 0.5);\r\n                        text-align: left;\r\n                        margin-top: 15px;\r\n                    }\r\n                    .verbiage a {\r\n                        text-decoration: underline;\r\n                        color: #039fff !important;\r\n                    }\r\n                    .contact-policy-hover {\r\n                        position: relative;\r\n                        cursor: pointer;\r\n                        text-decoration: underline;\r\n                        color: #039fff;\r\n                    }\r\n                    .contact-policy-tooltip {\r\n                        display: none; \/* Initially hidden *\/\r\n                        border-radius: 5px;\r\n                        background-color: #221f20;\r\n                        font-size: .6875rem;\r\n                        width: 200px; \/* Allow width to fit content *\/\r\n                        padding: 10px;\r\n                        position: absolute;\r\n                        color: #fff;\r\n                        z-index: 99999999999;\r\n                    }\r\n                    .contact-policy-tooltip.visible {\r\n                        display: block;\r\n                        inset: auto 0px 100% auto;\r\n                    }`;\r\n\r\n                    disclaimer.appendChild(style);\r\n                    document.body.appendChild(disclaimer);\r\n\r\n                    var $submitButton = $form.find(\"input[type=submit]\");\r\n                    var originalSubmitText = $submitButton.val();\r\n\r\n                    var emailField = $form[0].querySelector(\"input[name='email']\");\r\n                    var phoneField = $form[0].querySelector(\"input[name='phone']\");\r\n                    var firstnameField = $form[0].querySelector(\"input[name='firstname']\");\r\n                    var lastnameField = $form[0].querySelector(\"input[name='lastname']\");\r\n                    var companyField = $form[0].querySelector(\"input[name='company']\");\r\n\r\n                    var $emailError = $('<div class=\"mktoCustomError\">Must be a valid email.<\/div>').insertAfter(emailField);\r\n                    var $phoneError = $('<div class=\"mktoCustomError\">Must be a valid phone number.<\/div>').insertAfter(phoneField);\r\n                    var $fnameError = $('<div class=\"mktoCustomError\">This field is required.<\/div>').insertAfter(firstnameField);\r\n                    var $lnameError = $('<div class=\"mktoCustomError\">This field is required.<\/div>').insertAfter(lastnameField);\r\n\r\n                    $emailError.hide();\r\n                    $phoneError.hide();\r\n                    $fnameError.hide();\r\n                    $lnameError.hide();\r\n\r\n                    function showSpinner() {\r\n                        $submitButton.prop('disabled', true);\r\n                        $submitButton.val('PROCESSING...');\r\n                    }\r\n\r\n                    function hideSpinner() {\r\n                        $submitButton.prop('disabled', false);\r\n                        $submitButton.val(originalSubmitText);\r\n                    }\r\n\r\n                    $form.on(\"mouseenter\", \".contact-policy-hover\", function(event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                        var tooltip = $(this).find(\".contact-policy-tooltip\");\r\n                        tooltip.addClass(\"visible\");\r\n\r\n                        \/\/ Calculate the tooltip position\r\n                        var tooltipRect = tooltip[0].getBoundingClientRect();\r\n                        \/\/ var hoverRect = $(this)[0].getBoundingClientRect();\r\n                        var viewportWidth = window.innerWidth;\r\n                        var viewportHeight = window.innerHeight;\r\n\r\n                        \/\/ Reset any custom positioning\r\n                        tooltip.css({\r\n                            \"left\": \"\",\r\n                            \"right\": \"\",\r\n                            \"top\": \"\",\r\n                            \"bottom\": \"\",\r\n                            \"transform\": \"\",\r\n                            \"inset\": \"\"\r\n                        });\r\n\r\n                        \/\/ Adjust position based on available space\r\n                        if (tooltipRect.width > viewportWidth) {\r\n                            tooltip.css({\r\n                                \"width\": \"90vw\",\r\n                                \"left\": \"5vw\",\r\n                                \"right\": \"auto\",\r\n                                \"transform\": \"none\"\r\n                            });\r\n                        } else if (tooltipRect.right > viewportWidth) {\r\n                            tooltip.css({\r\n                                \"left\": \"auto\",\r\n                                \"right\": \"0\",\r\n                            });\r\n                        } else if (tooltipRect.right < viewportWidth) {\r\n                            tooltip.css({\r\n                                \"left\": \"auto\",\r\n                                \"right\": \"auto\",\r\n                            });\r\n                        } else if (tooltipRect.left < 0) {\r\n                            tooltip.css({\r\n                                \"left\": \"0\",\r\n                                \"right\": \"auto\"\r\n                            });\r\n                        } else if (tooltipRect.left > 0) {\r\n                            tooltip.css({\r\n                                \"left\": \"0\",\r\n                                \"right\": \"auto\"\r\n                            });\r\n                        } else {\r\n                            tooltip.css({\r\n                                \"left\": \"50%\",\r\n                                \"right\": \"auto\",\r\n                                \"transform\": \"translateX(-50%)\"\r\n                            });\r\n                        }\r\n\r\n                        if (tooltipRect.height > viewportHeight) {\r\n                            tooltip.css({\r\n                                \"height\": \"90vh\",\r\n                                \"top\": \"5vh\",\r\n                                \"bottom\": \"auto\"\r\n                            });\r\n                        } else if (tooltipRect.bottom > viewportHeight) {\r\n                            tooltip.css({\r\n                                \"top\": \"auto\",\r\n                                \"bottom\": \"100%\"\r\n                            });\r\n                        } else if (tooltipRect.top < 0) {\r\n                            tooltip.css({\r\n                                \"top\": \"100%\",\r\n                                \"bottom\": \"auto\"\r\n                            });\r\n                        } else {\r\n                            tooltip.css({\r\n                                \"top\": \"auto\",\r\n                                \"bottom\": \"100%\"\r\n                            });\r\n                        }\r\n                    });\r\n\r\n                    $form.on(\"mouseleave\", \".contact-policy-hover\", function(event) {\r\n                        event.stopPropagation();\r\n                        event.preventDefault();\r\n                        var tooltip = $(this).find(\".contact-policy-tooltip\");\r\n                        tooltip.removeClass(\"visible\");\r\n                    });\r\n\r\n                    var submitButton = $form[0].querySelector(\"input[type=submit]\");\r\n                    if (submitButton) {\r\n                        submitButton.parentNode.insertBefore(disclaimer, submitButton.nextSibling);\r\n                    } else {\r\n                        console.error(\"Submit button not found.\");\r\n                    }\r\n\r\n                    $(firstnameField).on('input', function() {\r\n                        $fnameError.hide();\r\n                        firstnameField.classList.remove('invalid', 'error');\r\n                    });\r\n\r\n                    $(lastnameField).on('input', function() {\r\n                        $lnameError.hide();\r\n                        lastnameField.classList.remove('invalid', 'error');\r\n                    });\r\n\r\n                    $(emailField).on('input', function() {\r\n                        $emailError.hide();\r\n                        emailField.classList.remove('invalid', 'error');\r\n                    });\r\n\r\n                    $(phoneField).on('input', function() {\r\n                        $phoneError.hide();\r\n                        phoneField.classList.remove('invalid', 'error');\r\n                    });\r\n\r\n                    $form.on('click', '.hs-button', async function (e) {\r\n                        e.preventDefault(); \/\/ Prevent form submission until validation is done\r\n\r\n                        showSpinner();\r\n\r\n                        var emailValue = emailField.value;\r\n                        var phoneValue = phoneField.value;\r\n                        var firstValue = firstnameField.value;\r\n                        var lnameValue = lastnameField.value;\r\n                        var companyValue = (companyField && companyField.value.trim() !== \"\")\r\n                            ? companyField.value.trim()\r\n                            : (firstValue + \" \" + lnameValue);\r\n\r\n                        \/\/ set hbEntry cookie using js-cookie (same library used elsewhere)\r\n                        var hbEntry = {\r\n                            email: emailValue,\r\n                            phone: (phoneMasker && phoneMasker.unmaskedValue) ? phoneMasker.unmaskedValue : phoneValue,\r\n                            firstname: firstValue,\r\n                            lastname: lnameValue,\r\n                            company: companyValue\r\n                        };\r\n\r\n                        \/\/ 30 days expiry, domain exactdata.com, secure only on https\r\n                        Cookies.set('hbEntry', JSON.stringify(hbEntry), {\r\n                            domain: \"exactdata.com\",\r\n                            path: \"\/\",\r\n                            secure: (window.location.protocol === 'https:')\r\n                        });\r\n\r\n\r\n                        \/\/ console.log(emailValue,phoneValue);\r\n                        \/\/ console.log(phone_status,line_type);\r\n                        \/\/ console.log(hbEntry);\r\n\r\n                        \/\/ $(emailField).on('blur',function (e){\r\n                        \/\/     $(emailField).find('.emailvalid-error').remove();\r\n                        \/\/ });\r\n\r\n                        \/\/ if(typeof phone_status == 'undefined' || phone_status === 'Unknown'){\r\n                        \/\/     $phoneError.show();\r\n                        \/\/ }\r\n\r\n\r\n                        try {\r\n                            \/\/ Validate email and phone asynchronously\r\n                            \/\/Assign Heap SID\r\n                            const hsidVal      = await processHeapData();\r\n                            const isEmailValid = (emailValue.length > 0) ? await validateEmail(emailValue,emailField,$emailError) : false;\r\n                            const isPhoneValid = (phoneMasker.unmaskedValue.length > 0) ? await validatePhone(phoneValue,phoneMasker.unmaskedValue,phoneField,$phoneError) : false;\r\n                            const getRegistrationFlow = (isEmailValid && isPhoneValid) ? await validateGetRegistrationFlow(emailValue, phoneMasker.unmaskedValue) : false;\r\n                            const isSalesGenieUser = (isEmailValid) ? await validateSalesGenieUser(emailValue) : false; \r\n                            \/\/ Set Registration Flow hidden field value\r\n                                if (getRegistrationFlow) {\r\n                                    $form.find(\"input[name=user_registration_flow]\").val(getRegistrationFlow);\r\n                                    \/\/ console.log('Set registration_flow field value to', getRegistrationFlow);\r\n                                } else {\r\n                                    $form.find(\"input[name=user_registration_flow]\").val('');\r\n                                    \/\/ console.log('Set registration_flow field value to \" \"');\r\n                                }\r\n\r\n                                if (getRegistrationFlow !== 'ED') {\r\n                                    \/\/ Set SalesGenie user status hidden field value\r\n                                    if (isSalesGenieUser) {\r\n                                        $form.find(\"input[name=existing_user_flag]\").val('true');\r\n                                        \/\/ console.log('Set existing_user field value to \"true\"');\r\n                                    } else {\r\n                                        $form.find(\"input[name=existing_user_flag]\").val('false');\r\n                                        \/\/ console.log('Set existing_user field value to \"false\"');\r\n                                    }\r\n                                }\r\n                            \/\/ const salesforceToken = (!isSalesGenieUser) ? await getSalesforceAccessToken() : null;\r\n                            const getSalesforceData = (!isSalesGenieUser && isEmailValid) ? await validateSalesforceData(emailValue) : false;\r\n                            const isSendToSF   = (isEmailValid && isPhoneValid) ? await sendHsDataToSf($form,hsidVal) : false;\r\n                            const isFnameValid = (firstValue.length > 0) ? await validateName(firstnameField,$fnameError) : false;\r\n                            const isLnameValid = (lnameValue.length > 0) ? await validateName(lastnameField,$lnameError) : false;\r\n                            \/\/ console.log(isEmailValid , isPhoneValid, isSendToSF );\r\n                            \/\/ console.log('isSalesGenieUser:', isSalesGenieUser);\r\n\r\n                            if (isFnameValid && isLnameValid && isEmailValid && isPhoneValid) {\r\n                                \/\/ Both validations passed, proceed to submit the form\r\n                                console.log('Both email and phone are valid. Submitting the form...');\r\n                                hideSpinner();\r\n\r\n                                $form.find(\"input[name=bp_phone_status]\").val(phone_status);\r\n                                $form.find(\"input[name=bp_line_type]\").val(line_type);\r\n                                \/\/Heap Value update\r\n                                $form.find(\"input[name=heap_session_id]\").val(hsidVal);\r\n\r\n                                $emailError.hide();\r\n                                emailField.classList.remove('invalid', 'error');\r\n\r\n                                $phoneError.hide();\r\n                                phoneField.classList.remove('invalid', 'error');\r\n\r\n                                \/\/Generate JWT\r\n                                \/\/FName,LName,Emailid,Phoneno\r\n                                await getJwtData(firstValue,lnameValue,emailValue,phoneValue);\r\n\r\n                                $form.submit();\r\n                            } else {\r\n                                \/\/ Handle validation failure\r\n                                if (!isEmailValid) {\r\n                                    emailField.classList.add('invalid', 'error');\r\n                                    $emailError.show();\r\n                                }\r\n\r\n                                if (!isPhoneValid) {\r\n                                    phoneField.classList.add('invalid', 'error');\r\n                                    $phoneError.show();\r\n                                }\r\n\r\n                                if (!isFnameValid) {\r\n                                    firstnameField.classList.add('invalid', 'error');\r\n                                    $fnameError.show();\r\n                                }\r\n\r\n                                if (!isLnameValid) {\r\n                                    lastnameField.classList.add('invalid', 'error');\r\n                                    $lnameError.show();\r\n                                }\r\n\r\n                                \/\/ Hide loader or re-enable the submit button\r\n                                \/\/$('.quoteloader').css('display', 'none');\r\n                                hideSpinner();\r\n                            }\r\n\r\n                        } catch (error) {\r\n                            console.error('Error during validation:', error);\r\n                            \/\/ Handle any unexpected errors during validation\r\n                            \/\/$('.quoteloader').css('display', 'none');\r\n                            hideSpinner();\r\n                        }\r\n\r\n                    });\r\n                },\r\n                \/\/ onFormSubmitted: async function ($form, data){\r\n                \/\/     let sfdub = await sendHsDataToSf($form);\r\n                \/\/     console.log(sfdub);\r\n                \/\/ },\r\n\r\n            });\r\n\r\n            async function validateGetRegistrationFlow(email, phone) {\r\n                try {\r\n                    const response = await fetch(edinfo.ajaxurl, {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\r\n                    body: new URLSearchParams({\r\n                        action: 'get_registration_flow',\r\n                        email: email,\r\n                        phone: phone\r\n                    }),\r\n                    });\r\n\r\n                    const result = await response.json();\r\n\r\n                    if (result.success) {\r\n                    \/\/ console.log('Registration Flow Data:', result.data);\r\n                    return result.data.UserFlowType || false;\r\n                    } else {\r\n                    console.error('Error:', result.data?.message || 'Unknown error');\r\n                    return false;\r\n                    }\r\n\r\n                } catch (error) {\r\n                    console.error('AJAX error:', error);\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            async function validateSalesGenieUser(email) {\r\n                try {\r\n                    let apiUrl=\"\";\r\n                    if (iusaEnvironment == \"TEST\") {\r\n                        apiUrl = `https:\/\/test-auth.salesgenie.com\/api\/v1\/Source\/GetProductListOfUser?username=${encodeURIComponent(email)}`;\r\n                    } else if (iusaEnvironment == \"PROD\") {\r\n                        apiUrl = `https:\/\/auth.salesgenie.com\/api\/v1\/Source\/GetProductListOfUser?username=${encodeURIComponent(email)}`;\r\n                    }\r\n\r\n                    const response = await fetch(apiUrl, {\r\n                        method: 'GET',\r\n                        headers: {\r\n                            'Content-Type': 'application\/json'\r\n                        }\r\n                    });\r\n\r\n                    if (!response.ok) return false;\r\n\r\n                    const data = await response.json();\r\n\r\n                    \/\/ If API returns false directly\r\n                    if (data === false) return false;\r\n\r\n                    \/\/ Check if it contains \"Salesgenie\": \"Salesgenie\"\r\n                    \/\/ return data.Salesgenie === \"Salesgenie\" || data.ExactData === \"ExactData\";\r\n                    return data.Salesgenie === \"Salesgenie\";\r\n\r\n                } catch (error) {\r\n                    console.error('SalesGenie API error:', error);\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            async function validateSalesforceData(email) {\r\n                try {\r\n                    const response = await fetch(edinfo.ajaxurl, {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/x-www-form-urlencoded' },\r\n                    body: new URLSearchParams({\r\n                        action: 'get_salesforce_data',\r\n                        email: email\r\n                    }),\r\n                    });\r\n\r\n                    const result = await response.json();\r\n\r\n                    if (result.success) {\r\n                    \/\/ console.log('Salesforce Data:', result.data);\r\n                    return result.data.success && result.data.isContactExist;\r\n\r\n                    \/\/ return result.data;\r\n                    } else {\r\n                    console.error('Error:', result.data?.message || 'Unknown error');\r\n                    return null;\r\n                    }\r\n                } catch (error) {\r\n                    console.error('AJAX error:', error);\r\n                    return null;\r\n                }\r\n            }\r\n\r\n\r\n            \/\/ Helper functions to make API requests\r\n            async function validateEmail(email,emailField,$emailError) {\r\n                \/\/Set user email cookie\r\n                Cookies.set(\"userEmailAddress\", email, { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                emailField.dispatchEvent(new Event('input', { bubbles: true }));\r\n\r\n                const hasInvalidClass = emailField.classList.contains('invalid');\r\n                const hasErrorClass = emailField.classList.contains('error');\r\n                if(hasInvalidClass || hasErrorClass){\r\n                    return false;\r\n                }\r\n\r\n                \/\/ Check for badwords\r\n                if (containsBadWords(email)) {\r\n                    emailField.classList.add('invalid', 'error');\r\n                    $emailError.show();\r\n                    return false;\r\n                }\r\n\r\n                \/\/ No badwords \u2192 valid\r\n                        $emailError.hide();\r\n                        emailField.classList.remove('invalid', 'error');\r\n                        return true;\r\n            }\r\n\r\n            async function validatePhone(phone,unmaskedPhone,phoneField,$phoneError) {\r\n                \/\/ console.log(phone.length,'<---phone');\r\n                \/\/ console.log(unmaskedPhone.length,'<---unmaskedPhone');\r\n                \/\/ console.log(unmaskedPhone);\r\n                \/\/ console.log(`${phone}_phone_status`);\r\n                \/\/ console.log(`${phone}_line_type`);\r\n                \/\/(192)847-8090 Found\r\n                \/\/(192)847-4090 \"The phone number must be in the format (192)847-4090.\"\r\n                \/\/ First, check if the phone number is in the cookie\r\n                phone_status = Cookies.get(`${phone}_phone_status`);\r\n                line_type = Cookies.get(`${phone}_line_type`);\r\n\r\n                var trimmedPhone = phone.replace(\/^\\+[0-9]\/, '');\r\n\r\n                console.log(phone_status,line_type,'<----');\r\n\r\n                const hasInvalidClassPhone = phoneField.classList.contains('invalid');\r\n                const hasErrorClassPhone = phoneField.classList.contains('error');\r\n                if(hasInvalidClassPhone || hasErrorClassPhone){\r\n                    return false;\r\n                }\r\n\r\n                \/\/const phoneFromCookie = Cookies.get(`${phone}_phone_status`);\r\n                \/\/ if (phoneFromCookie) {\r\n                \/\/     return true; \/\/ Skip validation if phone exists in the cookie\r\n                \/\/ }\r\n\r\n                if(typeof phone_status == 'undefined' || phone_status === 'Unknown'){\r\n                    \/\/ If not in the cookie, hit another DB API (assuming we have a custom API for this)\r\n                    const dbPhoneValidationResult = await checkPhoneInDatabase(phone,unmaskedPhone,trimmedPhone,$phoneError);\r\n                    if (dbPhoneValidationResult) {\r\n                        $phoneError.hide();\r\n                        phoneField.classList.remove('invalid','error');\r\n                        return true; \/\/ DB said valid\r\n                    }\r\n                    else{\r\n                        \/\/ If not in DB, check using the phone-validator API\r\n                        const url = `https:\/\/api.phone-validator.net\/api\/v2\/verify?PhoneNumber=${encodeURIComponent(phone)}&CountryCode=us&APIKey=pv-432c2ebbc71ef1f6bf017eeff8818eda`;\r\n                        try {\r\n                            $phoneError.hide();\r\n\r\n                            const response = await fetch(url);\r\n                            const dataByte = await response.json();\r\n                            console.log(dataByte,'apiii');\r\n                            if(dataByte.status === \"VALID_CONFIRMED\" || dataByte.status === \"VALID_UNCONFIRMED\"){\r\n                                phone_status = \"Valid\";\r\n                            }\r\n                            else if(dataByte.status === \"INVALID\"){\r\n                                phone_status = \"Invalid\";\r\n                            }\r\n                            line_type = (dataByte.linetype) ? dataByte.linetype : \"Unknown\";\r\n                            Cookies.set(`${phone}_phone_status`, phone_status , { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                            Cookies.set(`${phone}_line_type`, line_type, { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n\r\n                            let saveDbResponse = await saveBytePlantDataToDB(trimmedPhone,dataByte);\r\n                            console.log(saveDbResponse,'API data saved in DB');\r\n\r\n                            \/\/ if(phoneStatusResponse.status === 'VALID_CONFIRMED' || phoneStatusResponse.status === 'VALID_UNCONFIRMED'){\r\n                            \/\/     return true;\r\n                            \/\/ }\r\n                            \/\/ else{\r\n                            \/\/     return false;\r\n                            \/\/ }\r\n                            \/\/ return true;\r\n                            \/\/ return true only if API determined it as Valid\r\n                            if (phone_status === \"Valid\") {\r\n                                $phoneError.hide();\r\n                                phoneField.classList.remove('invalid','error');\r\n                            return true;\r\n                            } else {\r\n                                phoneField.classList.add('invalid', 'error');\r\n                                $phoneError.show();\r\n                                return false;\r\n                            }\r\n\r\n                        } catch (error) {\r\n                            phoneField.classList.add('invalid', 'error');\r\n                            $phoneError.show();\r\n                            console.error('Error validating phone:', error);\r\n                            return false;\r\n                        }\r\n                    }\r\n\r\n\r\n                }\r\n                else if(phone_status){\r\n                    \/\/HIT COUNT API HERE\r\n                    $.ajax({\r\n                        type: 'POST',\r\n                        data: {\r\n                            phone: trimmedPhone,\r\n                        },\r\n                        url: `${edinfo.ed_api}\/hubspot-form-byte_count`,\r\n                        success: function(res) {\r\n                            console.log(res,'Hit Count');\r\n                            return res;\r\n                        },\r\n                        error: function(xhr, status, error) {\r\n                            console.log(error);\r\n                            $phoneError.show();\r\n                            return error;\r\n                        }\r\n                    });\r\n                    \/\/ return true; \/\/ Skip validation if phone exists in the cookie\r\n                    \/\/ use cached cookie value to decide validity\r\n                    if (phone_status === \"Valid\") {\r\n                        $phoneError.hide();\r\n                        phoneField.classList.remove('invalid','error');\r\n                        return true;\r\n                    } else {\r\n                        phoneField.classList.add('invalid','error');\r\n                        $phoneError.show();\r\n                        return false;\r\n                    }\r\n                }\r\n\r\n            }\r\n\r\n            async function saveBytePlantDataToDB(phonenum,apidata){\r\n                const dbentyres = await $.ajax({\r\n                    type: 'POST',\r\n                    data: {\r\n                        phone: phonenum,\r\n                        response: JSON.stringify(apidata),\r\n                        count: 1\r\n                    },\r\n                    url: `${edinfo.ed_api}\/hubspot-form-byte`,\r\n                    success: function(res) {\r\n                        return res;\r\n                    },\r\n                    error: function(xhr, status, error) {\r\n                        console.log(error);\r\n                        return error;\r\n                    }\r\n                });\r\n\r\n                \/\/ console.log(dbentyres,'DB Entry');\r\n                if(dbentyres){\r\n                    return true;\r\n                }\r\n                else {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            \/\/ Example function to simulate checking the phone number in a DB\r\n            async function checkPhoneInDatabase(phone,unmaskedPhone,trimmedPhone,$phoneError) {\r\n                \/\/ console.log(trimmedPhone);\r\n                const res = await jQuery.ajax({\r\n                    url: `${edinfo.ed_api}\/hubspot-form-byte-1`,\r\n                    type: \"POST\",\r\n                    data: {\r\n                        phone:trimmedPhone\r\n                    },\r\n                    success: function(result) {\r\n                        $phoneError.hide();\r\n                        return result;\r\n                    },\r\n                    error: function(xhr, status, error) {\r\n                        console.error(\"AJAX Error:\" + error);\r\n                        $phoneError.show();\r\n                        return error;\r\n                    }\r\n                });\r\n\r\n                if (res.data) {\r\n                    \/\/ console.log(JSON.parse(res.data.response));\r\n                    var phoneStatusResponse = JSON.parse(res.data.response);\r\n                    \/\/ phone_status = phoneStatusResponse.status;\r\n                    \/\/ Normalize DB status into \"Valid\" \/ \"Invalid\"\r\n                    if (phoneStatusResponse.status === \"VALID_CONFIRMED\" || phoneStatusResponse.status === \"VALID_UNCONFIRMED\" || phoneStatusResponse.status === \"Valid\") {\r\n                        phone_status = \"Valid\";\r\n                    } else {\r\n                        phone_status = \"Invalid\";\r\n                    }\r\n\r\n                    line_type = (phoneStatusResponse.linetype) ? phoneStatusResponse.linetype : \"Unknown\";\r\n                    Cookies.set(`${phone}_phone_status`, phone_status , { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                    Cookies.set(`${phone}_line_type`, line_type, { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n\r\n                    \/\/Enable if you want to block Invalid number form submission saved in DB\r\n                    \/\/ if(phoneStatusResponse.status === 'VALID_CONFIRMED' || phoneStatusResponse.status === 'VALID_UNCONFIRMED'){\r\n                    \/\/     return true;\r\n                    \/\/ }\r\n                    \/\/ else{\r\n                    \/\/     return false;\r\n                    \/\/ }\r\n\r\n                    \/\/ return true;\r\n                    \/\/ Return true only when DB says Valid\r\n                    return (phone_status === \"Valid\");\r\n\r\n                } else {\r\n                    return false;\r\n                }\r\n            }\r\n\r\n            \/\/Send HubSpot Data to SalesForce\r\n            async function sendHsDataToSf($form,hsidVal){\r\n                \/\/Send Data to SalesForce start\r\n                let qparams = window.location.search.replace(\"?\",\"\").split(\"&\").reduce(function(p,e){\r\n                    var a = e.split(\"=\");\r\n                    p[ decodeURIComponent(a[0])] = decodeURIComponent(a[1]);\r\n                    return p;\r\n                },{});\r\n\r\n                let flag = Object.keys(qparams);\r\n                if(flag[0] !== \"\") {\r\n                    Cookies.set(\"_tracking_params\", JSON.stringify(qparams), { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                }\r\n\r\n                let formData = $form.serializeArray().reduce(function(obj, item) {\r\n                    obj[item.name] = item.value;\r\n                    return obj;\r\n                }, {});\r\n\r\n                console.log(hsidVal,'<----hsidVal');\r\n                formData['heapsessionid'] = hsidVal;\r\n                \/\/ formData['user_registration_flow'] = $form.find(\"input[name=user_registration_flow]\").val();\r\n                \/\/ formData['existing_user_flag'] = $form.find(\"input[name=existing_user_flag]\").val();\r\n\r\n                const response = jQuery.ajax({\r\n                    url: edinfo.ajaxurl,\r\n                    type: \"POST\",\r\n                    data: {\r\n                        action: \"w2c_to_middleware_hb\",\r\n                        data: formData\r\n                    },\r\n                    xhr: function () {\r\n                        let xhr = new window.XMLHttpRequest();\r\n\r\n                        \/\/ Track when request is successfully sent\r\n                        xhr.upload.onloadstart = function () {\r\n                            console.log(\"sent...\");\r\n                        };\r\n\r\n                        \/\/return true;\r\n                        return xhr;\r\n                    },\r\n                    success: function(result) {\r\n                        return result;\r\n                    },\r\n                    error: function(xhr, status, error) {\r\n                        console.error(\"AJAX Error:\" + error);\r\n                        return error;\r\n                    }\r\n                });\r\n\r\n                \/\/ console.log(response);\r\n\r\n                if (response.sf_success) {\r\n                    return true;\r\n                } else {\r\n                    return false;\r\n                }\r\n\r\n            }\r\n\r\n            \/\/Create Info\r\n            async function getJwtData(FName,LName,Emailid,Phoneno){\r\n                \/\/ console.log(edinfo.ed_api+'\/api\/pi');\r\n                jQuery.ajax({\r\n                    url: edinfo.ed_api+'\/api\/pi',\r\n                    data: {first_name: FName, last_name: LName, email:Emailid, phone: Phoneno},\r\n                    type: 'post',\r\n                    success: function (data) {\r\n                        jwt = data;\r\n                        \/\/ console.log(data);\r\n                        \/\/ console.log(\"JWT=\"+data);\r\n\r\n                        \/\/jQuery.cookie('form_jwt', JSON.stringify(data), { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                        \/\/Cookies.set('form_jwt', JSON.stringify(data), { domain: \"exactdata.com\", expires: 30, path: \"\/\" });\r\n                        \/\/$(BtnName).trigger('click', ['run']);\r\n                    }\r\n                });\r\n            }\r\n\r\n            \/**\r\n             * Heap SID Processor\r\n             * @returns {Promise<*|string>}\r\n             *\/\r\n            async function processHeapData() {\r\n                if (typeof window !== 'undefined' && typeof window.heap === 'object') {\r\n                    if (window.heap.loaded && typeof window.heap.getSessionId === 'function') {\r\n                        return window.heap.getSessionId();\r\n                    } else {\r\n                        return 'not available';\r\n                    }\r\n                } else {\r\n                    return 'Heap Undefined';\r\n                }\r\n            }\r\n\r\n            function containsBadWords(text) {\r\n                if (!text) return false;\r\n                const lower = text.toLowerCase();\r\n\r\n                return badWords.some(word => lower.includes(word.toLowerCase()));\r\n            }\r\n\r\n            async function validateName(field, $errorBox) {\r\n                const name = field.value.trim();\r\n\r\n                \/\/ Bad word check\r\n                if (containsBadWords(name)) {\r\n                    field.classList.add('invalid', 'error');\r\n                    $errorBox.text(\"Must be a valid name.\");\r\n                    $errorBox.show();\r\n                    return false;\r\n                }\r\n\r\n                \/\/ Valid\r\n                field.classList.remove('invalid', 'error');\r\n                $errorBox.hide();\r\n                return true;\r\n            }\r\n\r\n\r\n\r\n        <\/script>\r\n    <\/div>\r\n    [\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1721211926835{padding-top: 50px !important;}&#8221;][vc_single_image image=&#8221;1249&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221;][\/vc_column][\/vc_row][\/vc_section]","protected":false},"featured_media":0,"parent":0,"template":"","acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.8 (Yoast SEO v21.8.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Omnichannel Marketing Solutions for SMBs<\/title>\n<meta name=\"description\" content=\"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.\" \/>\n<meta name=\"robots\" content=\"noindex, nofollow\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Omnichannel Marketing Solutions for SMBs\" \/>\n<meta property=\"og:description\" content=\"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/\" \/>\n<meta property=\"og:site_name\" content=\"Exact Data Info\" \/>\n<meta property=\"article:modified_time\" content=\"2024-07-18T14:39:47+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Omnichannel Marketing Solutions for SMBs\" \/>\n<meta name=\"twitter:description\" content=\"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/\",\"url\":\"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/\",\"name\":\"Omnichannel Marketing Solutions for SMBs\",\"isPartOf\":{\"@id\":\"https:\/\/www.exactdata.com\/info\/#website\"},\"datePublished\":\"2024-07-15T16:33:36+00:00\",\"dateModified\":\"2024-07-18T14:39:47+00:00\",\"description\":\"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/\"]}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.exactdata.com\/info\/#website\",\"url\":\"https:\/\/www.exactdata.com\/info\/\",\"name\":\"Exact Data Info\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.exactdata.com\/info\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Omnichannel Marketing Solutions for SMBs","description":"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.","robots":{"index":"noindex","follow":"nofollow"},"og_locale":"en_US","og_type":"article","og_title":"Omnichannel Marketing Solutions for SMBs","og_description":"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.","og_url":"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/","og_site_name":"Exact Data Info","article_modified_time":"2024-07-18T14:39:47+00:00","twitter_card":"summary_large_image","twitter_title":"Omnichannel Marketing Solutions for SMBs","twitter_description":"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.","twitter_misc":{"Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/","url":"https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/","name":"Omnichannel Marketing Solutions for SMBs","isPartOf":{"@id":"https:\/\/www.exactdata.com\/info\/#website"},"datePublished":"2024-07-15T16:33:36+00:00","dateModified":"2024-07-18T14:39:47+00:00","description":"Discover omnichannel marketing solutions tailored for SMBs. Enhance your reach, engage your audience, and drive growth across all digital platforms with our expert strategies.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.exactdata.com\/info\/products-services\/marketing-solutions\/"]}]},{"@type":"WebSite","@id":"https:\/\/www.exactdata.com\/info\/#website","url":"https:\/\/www.exactdata.com\/info\/","name":"Exact Data Info","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.exactdata.com\/info\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services\/1265"}],"collection":[{"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services"}],"about":[{"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/types\/products-services"}],"version-history":[{"count":58,"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services\/1265\/revisions"}],"predecessor-version":[{"id":1413,"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services\/1265\/revisions\/1413"}],"wp:attachment":[{"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/media?parent=1265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}