{"id":1687,"date":"2024-11-25T14:53:12","date_gmt":"2024-11-25T20:53:12","guid":{"rendered":"https:\/\/www.exactdata.com\/info\/?post_type=products-services&#038;p=1687"},"modified":"2024-11-26T09:57:59","modified_gmt":"2024-11-26T15:57:59","slug":"data-solutions","status":"publish","type":"products-services","link":"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/","title":{"rendered":"Data Solutions for SMBs"},"content":{"rendered":"[vc_section css=&#8221;.vc_custom_1732566924455{padding-top: 80px !important;padding-bottom: 80px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/01\/ed_background-2.jpg?id=57) !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_1732559424506{margin-bottom: 20px !important;}&#8221;]\r\n<h1>Discover Our Range of Data\u00a0Solutions<\/h1>\r\n<h3>Reach Your Sales and Data Goals<\/h3>\r\n[\/vc_column_text][vc_column_text]Exact Data, backed by fifty years of experience, specializes in providing comprehensive online and offline business and consumer data solutions.\r\n\r\nOur accurate, up to date, and high-quality databases provide companies with a wide range of business information, including primary contacts, number of employees, annual sales, phone numbers, and more. For companies seeking consumer information, our lists include age, buying behavior, interests, email, and more than 600 additional selects.\r\n\r\nBeyond our comprehensive databases, we offer numerous data solutions to enhance, enrich, clean, and update both data owned by businesses and our own <a href=\"https:\/\/www.exactdata.com\/ready-made-lists.html\">ready-made lists<\/a>. Discover our data solutions below or fill out the form at the bottom of this page, and one of our experts will get in touch shortly to discuss your data needs.[\/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;1756&#8243; img_size=&#8221;full&#8221; alignment=&#8221;right&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1732566188187{padding-top: 50px !important;padding-bottom: 25px !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;1718&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221; css=&#8221;.vc_custom_1732562504700{padding-right: 40px !important;padding-left: 40px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/bkgrd-circle-gradient-terracotta-2.png?id=1723) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1732566408302{margin-bottom: 50px !important;padding-top: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1732559630158{margin-bottom: 8px !important;}&#8221;]\r\n<h2>Data Enrichment<\/h2>\r\n[\/vc_column_text][vc_column_text]Your clients and their information are your most valuable assets. Data enrichment is a critical strategy for better understanding your customers by adding new info to your existing database. By leveraging our services, your business can get a more-complete, detailed, and accurate picture of your audience to enable better targeting, personalization, and lead qualification. These improvements will help you drive higher engagement, increase conversion rates, and improve ROI by focusing resources on high-value opportunities.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/data-enrichment-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_1732566054548{padding-top: 50px !important;padding-bottom: 35px !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1732566416367{padding-top: 50px !important;padding-bottom: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1732559636906{margin-bottom: 8px !important;}&#8221;]\r\n<h2>Data Licensing<\/h2>\r\n[\/vc_column_text][vc_column_text]Performing in-depth market research or needing to enhance or improve your innovative app or solution? Data licensing may be just the solution your business needs. By licensing our data, you get the rights to access and use it for your specific application. When working with Exact Data, you will always have the most up to date and accurate data possible because our data is verified and validated by our team of over 300 data specialists.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/data-licensing\/\" 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;1719&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221; css=&#8221;.vc_custom_1732562519570{padding-right: 40px !important;padding-left: 40px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/05\/Untitled-2.png?id=1080) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1732566221651{padding-top: 50px !important;padding-bottom: 25px !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;1757&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221; css=&#8221;.vc_custom_1732567479228{padding-right: 30px !important;padding-left: 30px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/bkgrd-circle-gradient-blue.png?id=1728) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1732566448835{padding-top: 50px !important;padding-bottom: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1732559646440{margin-bottom: 8px !important;}&#8221;]\r\n<h2>Data Enhancement Services<\/h2>\r\n[\/vc_column_text][vc_column_text]Ensure you have the most accurate, up-to-date information to connect with your customers with data enhancement services. Our experts will optimize your data by scrubbing your list against our records, removing outdated and incorrect information. The result is a refreshed list for your business that will save you time and money by ensuring your sales and marketing efforts are focused on the right people using the right information.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/info\/products-services\/enhancement-your-data\/\" 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_1732566233468{padding-top: 50px !important;padding-bottom: 25px !important;}&#8221;][vc_row][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1732566464500{padding-top: 50px !important;padding-bottom: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1732559654456{margin-bottom: 8px !important;}&#8221;]\r\n<h2>Business Email Append<\/h2>\r\n[\/vc_column_text][vc_column_text]Let us help you uncover your B2B customers&#8217; email addresses by matching names and addresses to emails. By appending as many records as possible and cross-referencing unmatched records with our Small Home Office (SOHO) database, we deliver the most accurate and comprehensive results. With guaranteed high match rates and access to millions of records, our B2B Email Appending boosts communication, reduces costs, and ensures your campaigns achieve maximum impact with high-quality, updated data.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/business-email-append.html\" 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;1744&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221; css=&#8221;.vc_custom_1732566260385{padding-right: 30px !important;padding-left: 30px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/bkgrd-circle-gradient-green.png?id=1732) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1732566288568{padding-top: 50px !important;padding-bottom: 25px !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;1740&#8243; img_size=&#8221;full&#8221; alignment=&#8221;center&#8221; css=&#8221;.vc_custom_1732565716800{padding-right: 50px !important;padding-left: 50px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/bkgrd-circle-gradient-terracotta-2.png?id=1723) !important;background-position: center !important;background-repeat: no-repeat !important;background-size: cover !important;}&#8221;][\/vc_column][vc_column width=&#8221;1\/2&#8243; css=&#8221;.vc_custom_1732566472585{padding-top: 50px !important;padding-bottom: 50px !important;}&#8221;][vc_column_text css=&#8221;.vc_custom_1732559662373{margin-bottom: 8px !important;}&#8221;]\r\n<h2>Social Media Append<\/h2>\r\n[\/vc_column_text][vc_column_text]Our Social Media Append service enhances customer databases by matching email addresses with corresponding social media accounts across platforms like Facebook, LinkedIn, and X (formally Twitter). By leveraging a database of nearly 300 million contacts, this service can help your company create valuable customer relationships, increase brand awareness, and improve lead generation. Companies can use these appends to diversify marketing strategies, reach clients on their preferred platforms, and identify potential social media influencers who can amplify brand messaging.[\/vc_column_text]<a  href=\"https:\/\/www.exactdata.com\/social-media-appends.html\" 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_1732556939356{padding-top: 50px !important;padding-bottom: 15px !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\">At Exact Data, we&#8217;re committed to helping your business thrive. Our targeted data solutions and meticulously maintained databases help you connect with your ideal customers more effectively, ensuring you don&#8217;t waste precious resources. With our team of experts and comprehensive data solutions, we&#8217;ll guide you through all aspects of data management so you can have an accurate, complete foundation from which to launch your sales and marketing efforts.<\/p>\r\n[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1713378739388{padding-top: 0px !important;padding-bottom: 0px !important;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 learn more!<\/h3>\r\n<p style=\"text-align: center\">Fill out the form on this page so a trusted advisor can reach you about 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: \"2bf3c23d-0ffd-40c2-a822-97307ce32a31\",\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;][vc_empty_space height=&#8221;150px&#8221;][vc_single_image image=&#8221;433&#8243; img_size=&#8221;450&#215;450&#8243; alignment=&#8221;center&#8221;][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1732636576728{padding-top: 50px !important;background-color: #3d4456 !important;}&#8221;][vc_row][vc_column][vc_column_text el_class=&#8221;whitetext&#8221; css=&#8221;.vc_custom_1732556896873{margin-bottom: 50px !important;}&#8221;]\r\n<h2 style=\"text-align: center\">Call <span style=\"color: #00a0dc\">877.440.3282<\/span> to get started or fill out the form above.<\/h2>\r\n[\/vc_column_text][\/vc_column][\/vc_row][\/vc_section][vc_section css=&#8221;.vc_custom_1732555509903{padding-top: 50px !important;padding-bottom: 50px !important;background-image: url(https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/black_bg_2.png?id=1683) !important;}&#8221;][vc_row][vc_column][vc_column_text el_class=&#8221;whitetext&#8221;]\r\n<h3 style=\"text-align: center\">Customer Reviews<\/h3>\r\n[\/vc_column_text]<div class=\"trustpilot-widget\" data-locale=\"en-US\" data-template-id=\"53aa8912dec7e10d38f59f36\" data-businessunit-id=\"5cd550d3478699000150e05b\" data-style-height=\"140px\" data-style-width=\"100%\" data-theme=\"dark\" data-stars=\"4,5\" data-review-languages=\"en\" data-font-family=\"Open Sans\" data-text-color=\"#ffffff\"><a href=\"https:\/\/www.trustpilot.com\/review\/exactdata.com\" target=\"_blank\" rel=\"noopener\">Trustpilot<\/a><\/div>[\/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>Data Solutions for SMBs<\/title>\n<meta name=\"description\" content=\"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.\" \/>\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.exactdata.com\/info\/products-services\/data-solutions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Data Solutions for SMBs\" \/>\n<meta property=\"og:description\" content=\"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/\" \/>\n<meta property=\"og:site_name\" content=\"Exact Data Info\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-26T15:57:59+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/illustration-apps-green.png\" \/>\n\t<meta property=\"og:image:width\" content=\"974\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Data Solutions for SMBs\" \/>\n<meta name=\"twitter:description\" content=\"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 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\/data-solutions\/\",\"url\":\"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/\",\"name\":\"Data Solutions for SMBs\",\"isPartOf\":{\"@id\":\"https:\/\/www.exactdata.com\/info\/#website\"},\"datePublished\":\"2024-11-25T20:53:12+00:00\",\"dateModified\":\"2024-11-26T15:57:59+00:00\",\"description\":\"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.exactdata.com\/info\/products-services\/data-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":"Data Solutions for SMBs","description":"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.","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.exactdata.com\/info\/products-services\/data-solutions\/","og_locale":"en_US","og_type":"article","og_title":"Data Solutions for SMBs","og_description":"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.","og_url":"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/","og_site_name":"Exact Data Info","article_modified_time":"2024-11-26T15:57:59+00:00","og_image":[{"width":974,"height":900,"url":"https:\/\/www.exactdata.com\/info\/wp-content\/uploads\/2024\/11\/illustration-apps-green.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_title":"Data Solutions for SMBs","twitter_description":"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/","url":"https:\/\/www.exactdata.com\/info\/products-services\/data-solutions\/","name":"Data Solutions for SMBs","isPartOf":{"@id":"https:\/\/www.exactdata.com\/info\/#website"},"datePublished":"2024-11-25T20:53:12+00:00","dateModified":"2024-11-26T15:57:59+00:00","description":"Enhance your B2B outreach with our Data Solutions. Access accurate, verified contact and company data to connect with the right decision-makers.","inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.exactdata.com\/info\/products-services\/data-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\/1687"}],"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":48,"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services\/1687\/revisions"}],"predecessor-version":[{"id":1777,"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/products-services\/1687\/revisions\/1777"}],"wp:attachment":[{"href":"https:\/\/www.exactdata.com\/info\/wp-json\/wp\/v2\/media?parent=1687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}