> ## Documentation Index
> Fetch the complete documentation index at: https://docs.scanova.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Install Snippet

> Install tracking script directly or with GTM, and send custom frontend events

## Option A: Install Directly on Website (Recommended)

1. Copy the script from dashboard.
2. Paste it before `</head>` in your site template.
3. Deploy.
4. Verify browser network calls to `/ct`.

Example:

```html theme={null}
<head>
  <!-- other tags -->
  <script>
  (function(w,d,s,o,f,js,fjs){
    w['ScanovaTrackingObject']=o;w[o]=w[o]||function(){(w[o].q=w[o].q||[]).push(arguments)};
    js=d.createElement(s),fjs=d.getElementsByTagName(s)[0];
    js.id=o;js.src=f;js.async=1;fjs.parentNode.insertBefore(js,fjs);
  })(window,document,'script','scanova','https://cdn.scanova.io/ct/js/qcg.min.js');

  scanova('init', 'YOUR_SITE_ID', {
    debug: false,
    autoPageview: true,
    autoClicks: true,
    autoForms: true,
    autoScroll: true
  });
  </script>
</head>
```

## Option B: Install Using Google Tag Manager (GTM)

1. Open GTM container.
2. Create a new `Custom HTML` tag.
3. Paste the same Scanova script snippet.
4. Trigger: `All Pages`.
5. Save and publish container.

### GTM Best Practices

* Ensure only one Scanova script instance is loaded.
* Do not duplicate direct + GTM install on same page.
* Keep script in head-equivalent loading path for earliest capture.
* If your site is SPA, keep loader persistent and avoid repeated `init`.

## SPA Frameworks

* Add loader snippet in your root HTML (for example `index.html`).
* Keep one `scanova('init', ...)` call per page load lifecycle.

## Send Custom Events from Frontend Code

After `scanova('init', ...)`, send custom events any time:

```javascript theme={null}
scanova('track', 'event_name', { key: 'value' });
```

### Example: CTA click

```javascript theme={null}
document.getElementById('buy-now-btn')?.addEventListener('click', () => {
  scanova('track', 'buy_now_click', {
    page: window.location.pathname,
    plan: 'pro'
  });
});
```

### Example: Signup completed

```javascript theme={null}
scanova('track', 'signup_completed', {
  method: 'email',
  campaign: 'spring_offer'
});
```

### Metadata Guidelines

* Send compact JSON metadata.
* Do not send raw emails/PII in browser metadata.
* Use stable event names (snake\_case recommended).
* For conversions from backend systems, prefer server events.

## Optional Element Naming

Use `data-scnv-name` on links/buttons/forms for cleaner click labels in reports.

Example:

```html theme={null}
<button data-scnv-name="Pricing CTA">Start Trial</button>
```

## Next

* Browser verification: [Verify Client-Side Events](/conversion-tracking/client/verify-events)
* Server-side events: [Generate API Key](/conversion-tracking/server/generate-api-key-dashboard)
