Loading dashboard...
NEXT_PUBLIC_GOOGLE_CONVERSION_ID and GOOGLE_CONVERSION_LABEL in your deploy env vars. The demo page saves a “demo_engaged” conversion to /api/demo/conversion today; once both env vars are set, the JS path calls gtag('event', 'conversion', { send_to: 'ID/LABEL' }) for real attribution.Paste this snippet to install the real Google tag
<!-- Paste into src/components/custom/head-content.tsx (next/script)
and replace the two placeholders with the real values from your
Google Ads UI → Conversions → New conversion → 'Use Google Tag Manager? No'.
Until then leave NEXT_PUBLIC_GOOGLE_CONVERSION_ID unset so the stub fires. -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-XXXXXXXXX"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'AW-XXXXXXXXX');
</script>
<!-- The label aQm0wbedlRKFw+dhr6Gsx9WcBVqzbHkGgmNk304tkrg= is the conversion label printed by Google Ads. -->GET /api/v1/watched-products and receive signed webhook deliveries. The raw token AND the per-token HMAC signing secret are each shown once at creation — store both before dismissing the banner.Webhooks fire regardless of the per-product email mute toggle on/settings/products — they're a separate push channel. Header contract: X-PriceSense-Signature: sha256=<hex>.
Last checked: —
/api/v1/* and the outbound webhook fanout from each token. Helpful for confirming a freshly minted token is landing.Last call: —
Loading dashboard...