1<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1">
1<script>document.documentElement.classList.add('js');</script>
1<title>Contact & Support â How Many?</title><meta name="description" content="Contact HowMany for product questions, billing help, listing checks, API integrations, and module early access."><link rel="canonical" href="https://howmanyextension.com/contact"><meta property="og:type" content="website"><meta property="og:site_name" content="HowMany"><meta property="og:title" content="Contact & Support â How Many?"><meta property="og:description" content="Contact HowMany for product questions, billing help, listing checks, API integrations, and module early access."><meta property="og:url" content="https://howmanyextension.com/contact"><meta property="og:image" content="https://howmanyextension.com/og/howmany-og.png"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:alt" content="HowMany â Uncover Your Competitorsâ True Inventory"><meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Contact & Support â How Many?"><meta name="twitter:description" content="Contact HowMany for product questions, billing help, listing checks, API integrations, and module early access."><meta name="twitter:image" content="https://howmanyextension.com/og/howmany-og.png"><meta name="twitter:image:alt" content="HowMany â Uncover Your Competitorsâ True Inventory"><meta name="theme-color" content="#536ddc"><link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32.png"><link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16.png"><link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon.png"><link rel="preconnect" href="https://fonts.googleapis.com"><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin><link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display:ital@0;1&family=Manrope:wght@500;600;700;800&display=swap" rel="stylesheet">
1<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"BreadcrumbList","@id":"https://howmanyextension.com/contact#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://howmanyextension.com/"},{"@type":"ListItem","position":2,"name":"Contact & Support","item":"https://howmanyextension.com/contact"}]}]}</script>
1<script>(function(){const projectId = "y732uy959u"; 2 3 (() => { 4 const hostname = window.location.hostname.toLowerCase(); 5 if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]') return; 6 if (document.querySelector('script[data-hme-clarity-loader]')) return; 7 8 window.clarity = window.clarity || function () { 9 (window.clarity.q = window.clarity.q || []).push(arguments); 10 }; 11 window.clarity('consentv2', { 12 ad_Storage: 'denied', 13 analytics_Storage: 'denied', 14 }); 15 16 const script = document.createElement('script'); 17 const firstScript = document.getElementsByTagName('script')[0]; 18 script.async = true; 19 script.dataset.hmeClarityLoader = projectId; 20 script.src = `https://www.clarity.ms/tag/${projectId}`; 21 if (firstScript?.parentNode) firstScript.parentNode.insertBefore(script, firstScript); 22 else document.head.appendChild(script); 23 })(); 24 })();</script>
24<script>(function(){const projectKey = "phc_L9eoVLFomKreeJwEo4wbMZUTeAlrPpR6ttWGdc8p6bD"; 25const apiHost = "https://us.i.posthog.com"; 26const environment = "production"; 27 28 (() => { 29 const hostname = window.location.hostname.toLowerCase(); 30 if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]') return; 31 32 let pageviewQueued = false; 33 34 const startCapture = (client) => { 35 if (pageviewQueued) return; 36 37 const attribution = {}; 38 const search = new URLSearchParams(window.location.search); 39 for (const key of ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content']) { 40 const value = search.get(key); 41 if (value) attribution[`$${key}`] = value.slice(0, 500); 42 } 43 let referringDomain = ''; 44 try { referringDomain = document.referrer ? new URL(document.referrer).hostname : ''; } catch {} 45 46 client.register({ environment, hostname }); 47 client.capture('$pageview', { 48 page: window.location.pathname, 49 environment, 50 hostname, 51 $current_url: `${window.location.origin}${window.location.pathname}`, 52 $referring_domain: referringDomain, 53 ...attribution, 54 }); 55 pageviewQueued = true; 56 }; 57 58 const initializePostHog = () => { 59 !function (documentObject, posthogObject) { 60 let scriptElement; 61 let firstScript; 62 let methods; 63 posthogObject.__SV || ( 64 window.posthog = posthogObject, 65 posthogObject._i = [], 66 posthogObject.init = function (token, config, name) { 67 function addMethod(target, method) { 68 const parts = method.split('.'); 69 if (parts.length === 2) { 70 target = target[parts[0]]; 71 method = parts[1]; 72 } 73 target[method] = function () { 74 target.push([method].concat(Array.prototype.slice.call(arguments, 0))); 75 }; 76 } 77 scriptElement = documentObject.createElement('script'); 78 scriptElement.type = 'text/javascript'; 79 scriptElement.crossOrigin = 'anonymous'; 80 scriptElement.async = true; 81 scriptElement.src = config.api_host.replace('.i.posthog.com', '-assets.i.posthog.com') + '/static/1/array.js'; 82 firstScript = documentObject.getElementsByTagName('script')[0]; 83 if (firstScript?.parentNode) firstScript.parentNode.insertBefore(scriptElement, firstScript); 84 else documentObject.head.appendChild(scriptElement); 85 let instance = posthogObject; 86 if (name !== undefined) instance = posthogObject[name] = []; 87 else name = 'posthog'; 88 instance.people = instance.people || []; 89 instance.toString = function (asString) { 90 const label = 'posthog'; 91 return name !== 'posthog' ? label + '.' + name : asString ? label : label + ' (stub)'; 92 }; 93 instance.people.toString = function () { return instance.toString(1) + '.people (stub)'; }; 94 methods = 'init capture register register_once unregister reset isFeatureEnabled onFeatureFlags group set_config startSessionRecording stopSessionRecording captureException'.split(' '); 95 for (let index = 0; index < methods.length; index += 1) addMethod(instance, methods[index]); 96 posthogObject._i.push([token, config, name]); 97 }, 98 posthogObject.__SV = 1 99 ); 100 }(document, window.posthog || []); 101 102 window.posthog.init(projectKey, { 103 api_host: apiHost, 104 ui_host: 'https://us.posthog.com', 105 defaults: '2026-05-30', 106 strict_script_versioning: true, 107 autocapture: true, 108 cookieless_mode: 'always', 109 capture_heatmaps: false, 110 capture_pageview: false, 111 capture_pageleave: true, 112 disable_session_recording: true, 113 enable_recording_console_log: false, 114 advanced_disable_flags: true, 115 person_profiles: 'never', 116 // The signup fragment is for the app handoff, not a link property in 117 // autocapture ($elements, $elements_chain or $external_click_url). 118 // Retain existing click events and unrelated properties unchanged. 119 before_send: (event) => { 120 try { 121 const stripHandoff = (value) => { 122 if (typeof value === 'string') return value.replace(/#hme_touch=[^"\s;]*/g, ''); 123 if (Array.isArray(value)) return value.map(stripHandoff); 124 if (value && typeof value === 'object') return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, stripHandoff(item)])); 125 return value; 126 }; 127 return event ? { ...event, properties: stripHandoff(event.properties) } : event; 128 } catch { return null; } 129 }, 130 }); 131 startCapture(window.posthog); 132 }; 133 134 initializePostHog(); 135 })(); 136 })();</script>
136<link rel="stylesheet" href="/_astro/BaseLayout.Cw_y-ivb.css"></head><body data-site-environment="production"><nav><div class="wrap"> 137 <a class="brand" href="/"><span class="tile"><img src="/assets/howmany-logo--69bd478cddd4.png" alt="HowMany" width="160" height="160" decoding="async"></span><span>HowMany<small>AMAZON INTELLIGENCE</small></span></a> 138 <div class="navlinks"> 139 <a href="/">Home</a> 140 <a href="/#features">Features</a> 141 <a href="/#pricing">Pricing</a> 142 <a href="/how-it-works">How it works</a> 143 <a href="https://api-docs.howmanyextension.com/" class="ext" target="_blank" rel="noopener">API</a> 144 <a href="https://chromewebstore.google.com/detail/how-many/fifaampimdjablpkjapdjehjcfloecjp" target="_blank" rel="noopener">Install Extension</a> 145 <div class="mobile-navcta"><a class="btn btn-ghost dark" href="https://app.howmanyextension.com/login">Log In</a><a class="btn btn-primary" href="https://app.howmanyextension.com/register">Start free trial</a></div> 146 </div> 147 <div class="navcta"><a class="btn btn-ghost dark" href="https://app.howmanyextension.com/login">Log In</a><a class="btn btn-primary" href="https://app.howmanyextension.com/register">Start free trial</a></div> 148 <button class="burger" type="button" aria-label="Menu" aria-expanded="false"><i></i><i></i><i></i></button> 149</div></nav> 150<main><section class="route on" id="contact"> 151<section class="phero"><div class="wrap"><div class="lab">CONTACT & SUPPORT</div><h1>Talk to a person <em class="s">who uses the product.</em></h1><p class="lead">Questions, billing, a listing that isn’t reading right, an API integration, early access to a module — one address reaches us for all of it.</p><div class="cta-row"></div></div></section><section style="padding:10px 0 60px"><div class="wrap grid3"> 152 <div class="card contactcard" style="grid-column:span 2"><h2 class="source-h3">Email support</h2><a class="mail" href="/cdn-cgi/l/email-protection#0e7d7b7e7e617c7a4e666179636f60776b767a6b607d676160206d6163"><span class="__cf_email__" data-cfemail="4a393f3a3a25383e0a22253d272b24332f323e2f243923252464292527">[email protected]</span></a> 153 <div class="kv"><b>Best for</b><span>account and billing, a check that looks wrong, module questions, Brand Protection early access, API keys and integration help</span><b>Include</b><span>the ASIN or product URL, your account email, and a screenshot if something looks off — it saves a round trip</span><b>Hours</b><span>we read every message and reply as quickly as we can, usually within a business day</span></div></div> 154 <div class="card contactcard"><h2 class="source-h3">Before you write</h2><p style="font-size:15px">Most questions are answered on these pages:</p><ul style="list-style:none;margin-top:12px;display:grid;gap:10px;font-weight:700"><li><a href="/how-it-works">How it works →</a></li><li><a href="/faq">FAQ →</a></li><li><a href="https://api-docs.howmanyextension.com/" target="_blank" rel="noopener">API documentation →</a></li><li><a href="https://chromewebstore.google.com/detail/how-many/fifaampimdjablpkjapdjehjcfloecjp" target="_blank" rel="noopener">Chrome Web Store listing →</a></li></ul></div> 155</div></section> 156<section class="two" style="padding-top:0"><div class="wrap" style="grid-template-columns:1fr"> 157 <div class="note"><h2 class="source-h3">About How Many</h2><p>How Many launched in 2016 as the first Chrome extension to show real-time inventory on Amazon. Ten years on it’s an Amazon intelligence platform used by 14,000+ sellers a week: live checks and Limit Buster on the product page, and Shelf Intelligence, AI Visibility and Brand Protection in the dashboard. It’s built and run by a small team who sell on Amazon themselves.</p></div> 158</div></section> 159<section class="ctaslab"> 160 <h2>See what your competitors <em class="s">actually</em> have.</h2> 161 <p>Start your 14-day free trial. No credit card needed.</p> 162 <a class="btn btn-white" href="https://app.howmanyextension.com/register">Start free trial</a> 163</section> 164</section></main><footer><div class="wrap"> 165 <div class="cols">
166 <div> 167 <a class="brand" href="/" style="margin-bottom:16px"><span class="tile"><img src="/assets/howmany-logo--69bd478cddd4.png" alt="HowMany" width="160" height="160" loading="lazy" decoding="async"></span><span>HowMany<small>AMAZON INTELLIGENCE</small></span></a> 168 <p>Launched in 2016 as the pioneering Chrome extension to display real-time inventory levels on Amazon, How Many is now an Amazon intelligence platform: live checks on the page, and three modules that track your Buy Box, MAP compliance and Alexa visibility every day.</p> 169 <p style="margin-top:14px"><a href="/cdn-cgi/l/email-protection#a1d2d4d1d1ced3d5e1c9ced6ccc0cfd8c4d9d5c4cfd2c8cecf8fc2cecc"><span class="__cf_email__" data-cfemail="cdbeb8bdbda2bfb98da5a2baa0aca3b4a8b5b9a8a3bea4a2a3e3aea2a0">[email protected]</span></a></p><div class="socials" role="navigation" aria-label="Social media"><a href="https://www.instagram.com/howmanyextension/" target="_blank" rel="noopener" aria-label="HowMany on Instagram"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2.5" y="2.5" width="19" height="19" rx="5.2"/><circle cx="12" cy="12" r="4.4"/><circle cx="17.6" cy="6.4" r="1.15" fill="currentColor" stroke="none"/></svg></a><a href="https://www.linkedin.com/company/howmanyextension/" target="_blank" rel="noopener" aria-label="HowMany on LinkedIn"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M4.98 3.5C4.98 4.88 3.87 6 2.5 6S0 4.88 0 3.5 1.12 1 2.5 1s2.48 1.12 2.48 2.5zM.4 8.2h4.2V23H.4V8.2zm7.1 0h4.02v2.02h.06c.56-1.06 1.93-2.18 3.97-2.18 4.25 0 5.03 2.8 5.03 6.44V23h-4.2v-7.6c0-1.81-.03-4.14-2.52-4.14-2.53 0-2.92 1.97-2.92 4.01V23H7.5V8.2z"/></svg></a><a href="https://www.youtube.com/@HowManyExtension" target="_blank" rel="noopener" aria-label="HowMany on YouTube"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true"><path d="M23 7s-.2-1.6-.9-2.3c-.9-.9-1.9-.9-2.3-1C16.6 3.5 12 3.5 12 3.5s-4.6 0-7.8.2c-.4.1-1.4.1-2.3 1C1.2 5.4 1 7 1 7S.8 8.9.8 10.8v1.8C.8 14.5 1 16.4 1 16.4s.2 1.6.9 2.3c.9.9 2.1.9 2.6 1 1.9.2 7.5.3 7.5.3s4.6 0 7.8-.3c.4 0 1.4-.1 2.3-1 .7-.7.9-2.3.9-2.3s.2-1.9.2-3.8v-1.8C23.2 8.9 23 7 23 7ZM9.7 15.3V8.7l6 3.3-6 3.3Z"/></svg></a></div> 170 </div> 171 <div><h2 class="source-h4">PRODUCT</h2><ul><li><a href="/#features">Features</a></li><li><a href="/#pricing">Pricing</a></li><li><a href="/how-it-works">How it works</a></li><li><a href="https://chromewebstore.google.com/detail/how-many/fifaampimdjablpkjapdjehjcfloecjp" target="_blank" rel="noopener">Install Extension</a></li><li><a href="https://api-docs.howmanyextension.com/" class="ext" target="_blank" rel="noopener">API docs</a></li></ul></div> 172 <div><h2 class="source-h4">MODULES</h2><ul><li><a href="/shelf-intelligence">Shelf Intelligence</a></li><li><a href="/ai-visibility">AI Visibility <span class="pill beta">BETA</span></a></li><li><a href="/brand-protection">Brand Protection <span class="pill early">EARLY</span></a></li></ul></div> 173 <div><h2 class="source-h4">SUPPORT & LEGAL</h2><ul><li><a href="/contact">Contact & Support</a></li><li><a href="/faq">FAQ</a></li><li><a href="/resources">Resources</a></li><li><a href="/privacy-policy">Privacy Policy</a></li><li><a href="/terms-conditions">Terms & Conditions</a></li></ul></div> 174 </div> 175 <div class="copy">2026 © HME. All Rights Reserved</div> 176</div></footer> 177<div class="lightbox" id="lb" role="dialog" aria-modal="true" aria-label="Expanded image"><button class="x" type="button" aria-label="Close">Ã</button><img alt=""><div class="cap">Click anywhere or press Esc to close</div></div>
vendor: 108 bytes, line 177
177<script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script>
177<script type="module">var e=`hme_website_touch_v1`,t=[`utm_source`,`utm_medium`,`utm_campaign`,`utm_id`,`utm_term`,`utm_content`,`utm_source_platform`],n=[`/`,`/pricing`,`/features`,`/about`,`/faq`,`/faqs`,`/articles`,`/amazon-inventory-management`,`/amazon-sales-estimator`,`/how-it-works`,`/shelf-intelligence`,`/ai-visibility`,`/brand-protection`,`/contact`,`/resources`,`/resources/amazon-regional-shipping`,`/resources/amazon-999-trick`,`/privacy-policy`,`/terms-conditions`];function r(e,t){try{return e.doNotTrack===`1`||e.globalPrivacyControl===!0?!1:t?.get_explicit_consent_status?t.get_explicit_consent_status()!==`denied`:t?.has_opted_out_capturing?.()!==!0}catch{return!1}}function i(e,r=Date.now()){if(!e||typeof e!=`object`||Array.isArray(e)||JSON.stringify(e).length>2048)return;let i=e,a=Date.parse(i.captured_at);if(!Number.isFinite(a)||a<r-864e5||a>r+6e4)return;let o={captured_at:new Date(a).toISOString(),hme_source_surface:`website`};for(let e of t){let t=i[e];typeof t==`string`&&t.length<=80&&/^[a-z0-9][a-z0-9 _-]*$/i.test(t)&&!/(?:password|secret|token|bearer|sk_live|sk_test|pk_live|pk_test|eyj[a-z0-9]{12}|\d{8,}|[a-f0-9]{24})/i.test(t)&&(o[e]=t.trim().toLowerCase())}n.includes(i.original_landing_path)&&(o.original_landing_path=i.original_landing_path);let s=i.referrer_domain;return typeof s==`string`&&s.length<=253&&/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/i.test(s)&&(o.referrer_domain=s.toLowerCase().replace(/^www\./,``)),o}function a(e,n,r,a=Date.now()){try{let e=r&&i(JSON.parse(r),a);if(e)return e}catch{}let o=new URL(e),s=``;try{s=new URL(n).hostname.replace(/^www\./,``)}catch{}let c={captured_at:new Date(a).toISOString(),original_landing_path:o.pathname,referrer_domain:s};if(s!==`howmanyextension.com`&&!s.endsWith(`.howmanyextension.com`))for(let e of t)c[e]=o.searchParams.get(e)||``;return i(c,a)}function o(e,t,n){let r=new URL(e);if(r.origin!==`https://app.howmanyextension.com`||![`/register`,`/login`].includes(r.pathname)||r.hash)return e;n&&(r.hostname=`staging-app.howmanyextension.com`);let a=i(t);return a&&(r.hash=`hme_touch=`+encodeURIComponent(JSON.stringify(a))),r.href}function s(){let t=document.body.dataset.siteEnvironment===`staging`,n=window.location.hostname;if(!t&&![`howmanyextension.com`,`www.howmanyextension.com`].includes(n))return;let i=new Map,s,c=()=>r(navigator,window.posthog),l=()=>{try{let n=c();if(!n){s=void 0;try{sessionStorage.removeItem(e)}catch{}}if(n&&!s){let t=null;try{t=sessionStorage.getItem(e)}catch{}s=a(location.href,document.referrer,t);try{sessionStorage.setItem(e,JSON.stringify(s))}catch{}}document.querySelectorAll(`a[href]`).forEach(e=>{let n=i.get(e)||e.href,r=o(n,s,t);r!==n&&(i.set(e,n),e.href=r)})}catch{}};l(),document.addEventListener(`pointerdown`,l,!0),document.addEventListener(`keydown`,l,!0),document.addEventListener(`click`,l,!0)}s();</script>
177<script> 178 (() => { 179 const nav = document.querySelector('nav'); 180 const burger = document.querySelector('.burger'); 181 const route = document.querySelector('.route.on'); 182 let tocTick = false; 183 184 const closeNavigation = () => { 185 nav?.classList.remove('open'); 186 burger?.setAttribute('aria-expanded', 'false'); 187 }; 188 189 const updateTocActive = () => { 190 const toc = route?.querySelector('.legal-toc'); 191 document.querySelectorAll('.legal-toc a.active').forEach((link) => link.classList.remove('active')); 192 if (!toc) return; 193 const sections = route.querySelectorAll('.legal-section[id]'); 194 let current = sections[0] || null; 195 sections.forEach((section) => { 196 if (section.getBoundingClientRect().top <= 132) current = section; 197 }); 198 const hashTarget = window.location.hash ? route.querySelector(window.location.hash) : null; 199 if (hashTarget?.classList.contains('legal-section')) { 200 const hashRect = hashTarget.getBoundingClientRect(); 201 if (hashRect.bottom > 84 && hashRect.top < window.innerHeight * 0.7) current = hashTarget; 202 } 203 if (!current) return; 204 const link = toc.querySelector(`a[href="#${current.id}"]`); 205 link?.classList.add('active'); 206 }; 207 208 burger?.addEventListener('click', () => { 209 const isOpen = nav?.classList.toggle('open') ?? false; 210 burger.setAttribute('aria-expanded', isOpen ? 'true' : 'false'); 211 }); 212 nav?.addEventListener('click', (event) => { 213 if (event.target.closest('a')) closeNavigation(); 214 }); 215 window.addEventListener('scroll', () => { 216 if (tocTick) return; 217 tocTick = true; 218 requestAnimationFrame(() => { 219 updateTocActive(); 220 tocTick = false; 221 }); 222 }, { passive: true }); 223 window.addEventListener('hashchange', updateTocActive); 224 updateTocActive(); 225 226 const lightbox = document.getElementById('lb'); 227 const expandedImage = lightbox?.querySelector('img'); 228 let lastTrigger = null; 229 let lastScrollY = 0; 230 const openLightbox = (trigger) => { 231 const image = trigger.querySelector('img'); 232 const source = trigger.dataset.lightboxSrc || image?.dataset.fullSrc || image?.src; 233 if (!lightbox || !expandedImage || !source) return; 234 lastScrollY = window.scrollY; 235 expandedImage.src = source; 236 expandedImage.alt = trigger.dataset.lightboxAlt || image?.alt || ''; 237 lightbox.classList.toggle('geo-wide-evidence', trigger.dataset.lightboxWide === 'true'); 238 lightbox.classList.add('open'); 239 document.body.style.overflow = 'hidden'; 240 lastTrigger = trigger; 241 }; 242 const closeLightbox = () => { 243 if (!lightbox || !expandedImage || !lightbox.classList.contains('open')) return; 244 lightbox.classList.remove('open'); 245 lightbox.classList.remove('geo-wide-evidence'); 246 expandedImage.src = ''; 247 document.body.style.overflow = ''; 248 window.scrollTo({ top: lastScrollY, left: 0, behavior: 'instant' }); 249 lastTrigger?.focus({ preventScroll: true }); 250 }; 251 document.querySelectorAll('.zoom').forEach((trigger) => { 252 trigger.addEventListener('click', () => openLightbox(trigger)); 253 }); 254 lightbox?.addEventListener('click', closeLightbox); 255 document.addEventListener('keydown', (event) => { 256 if (event.key === 'Escape') closeLightbox(); 257 }); 258 259 const geoViewModal = document.getElementById('geo-view-modal'); 260 const geoViewClose = geoViewModal?.querySelector('.geo-view-modal-close'); 261 const geoViewFrame = geoViewModal?.querySelector('#geo-view-demo'); 262 let geoViewLastTrigger = null; 263 let geoViewLastScrollY = 0; 264 const openGeoViewModal = (trigger) => { 265 if (!geoViewModal) return; 266 geoViewLastScrollY = window.scrollY; 267 if (geoViewFrame && !geoViewFrame.srcdoc) geoViewFrame.srcdoc = geoViewFrame.dataset.srcdoc || ''; 268 geoViewLastTrigger = trigger; 269 geoViewModal.classList.add('open'); 270 geoViewModal.setAttribute('aria-hidden', 'false'); 271 document.documentElement.classList.add('geo-view-modal-open'); 272 document.body.style.overflow = 'hidden'; 273 geoViewClose?.focus({ preventScroll: true }); 274 }; 275 const closeGeoViewModal = () => { 276 if (!geoViewModal?.classList.contains('open')) return; 277 geoViewModal.classList.remove('open'); 278 geoViewModal.setAttribute('aria-hidden', 'true'); 279 document.documentElement.classList.remove('geo-view-modal-open'); 280 if (geoViewFrame) geoViewFrame.srcdoc = ''; 281 document.body.style.overflow = ''; 282 window.scrollTo({ top: geoViewLastScrollY, left: 0, behavior: 'instant' }); 283 geoViewLastTrigger?.focus({ preventScroll: true }); 284 }; 285 document.querySelectorAll('.geo-demo-trigger').forEach((trigger) => { 286 trigger.addEventListener('click', () => openGeoViewModal(trigger)); 287 }); 288 geoViewClose?.addEventListener('click', closeGeoViewModal); 289 geoViewModal?.addEventListener('click', (event) => { 290 if (event.target === geoViewModal) closeGeoViewModal(); 291 }); 292 document.addEventListener('keydown', (event) => { 293 if (event.key === 'Escape') closeGeoViewModal(); 294 }); 295 296 const environment = document.body.dataset.siteEnvironment || 'production'; 297 const eventForLink = (anchor) => { 298 if (anchor.classList.contains('demo-trigger')) return 'Watch Demo'; 299 const href = anchor.getAttribute('href') || ''; 300 if (href.includes('subject=Brand%20Protection%20early%20access')) return 'Brand Protection early access'; 301 if (href.includes('app.howmanyextension.com/register')) return 'Start Trial'; 302 if (href.includes('chromewebstore.google.com')) return 'Install E
302xtension'; 303 if (href === '/how-it-works#video' || href.endsWith('/how-it-works#video')) return 'Watch Demo'; 304 if (href.includes('app.howmanyextension.com/login')) return 'Log In'; 305 if (href.includes('api-docs.howmanyextension.com')) return 'API Docs'; 306 if (href.includes('rufussignup.howmanyextension.com')) return 'Join Beta'; 307 if (href === '/contact' || href.startsWith('mailto:[email protected]')) return 'Contact'; 308 return null; 309 }; 310 document.addEventListener('click', (event) => { 311 const anchor = event.target.closest('a[href]'); 312 if (!anchor) return; 313 const eventName = eventForLink(anchor); 314 if (!eventName || typeof window.posthog?.capture !== 'function') return; 315 const destination = new URL(anchor.href); 316 window.posthog.capture(eventName, { 317 page: window.location.pathname, 318 cta_label: (anchor.textContent || '').replace(/\s+/g, ' ').trim(), 319 destination: destination.protocol === 'mailto:' || anchor.classList.contains('demo-trigger') ? anchor.href : destination.origin + destination.pathname + (destination.hash === '#video' ? '#video' : ''), 320 environment, 321 hostname: window.location.hostname, 322 }); 323 }); 324 })(); 325 </script>
325<script>(function(){const propertyId = "65dc84148d261e1b5f656be7"; 326const widgetId = "1hnim7sgq"; 327 328 (() => { 329 const hostname = window.location.hostname.toLowerCase(); 330 if (hostname === 'localhost' || hostname === '127.0.0.1' || hostname === '::1' || hostname === '[::1]') return; 331 window.Tawk_API = window.Tawk_API || {}; 332 window.Tawk_LoadStart = new Date(); 333 const script = document.createElement('script'); 334 const firstScript = document.getElementsByTagName('script')[0]; 335 script.async = true; 336 script.src = `https://embed.tawk.to/${propertyId}/${widgetId}`; 337 script.setAttribute('charset', 'UTF-8'); 338 script.setAttribute('crossorigin', '*'); 339 firstScript.parentNode.insertBefore(script, firstScript); 340 })(); 341 })();</script>
341</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.