PageSourceSearch

https://howmanyextension.com/contact

html howmanyextension.com collected 2026-09-24 13:58:15 UTC 27,754 bytes, 341 lines download raw bytes

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 &amp; 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 &amp; 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 &amp; 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 &amp; 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&rsquo;t reading right, an API integration, early access to a module &mdash; 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&#160;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 &mdash; 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 &rarr;</a></li><li><a href="/faq">FAQ &rarr;</a></li><li><a href="https://api-docs.howmanyextension.com/" target="_blank" rel="noopener">API documentation &rarr;</a></li><li><a href="https://chromewebstore.google.com/detail/how-many/fifaampimdjablpkjapdjehjcfloecjp" target="_blank" rel="noopener">Chrome Web Store listing &rarr;</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&rsquo;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&rsquo;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&#160;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 &amp; LEGAL</h2><ul><li><a href="/contact">Contact &amp; 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 &amp; Conditions</a></li></ul></div>
174 </div>
175 <div class="copy">2026 &copy; 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.