---
# System prepended metadata

title: 'Cookie Consent for Microsoft Clarity in Switzerland: Dev Guide'

---

# Cookie Consent for Microsoft Clarity in Switzerland: Dev Guide

Switzerland is unique. It's not in the EU, but its data protection laws are equally strict. The Federal Act on Data Protection (FADP) requires explicit consent before collecting behavioural data. Microsoft Clarity's Consent API V2 includes Switzerland in its October 31st, 2025 enforcement deadline.

If your website serves Swiss users, you need this implementation.

## The Swiss Legal Landscape

Switzerland has:
- Federal Act on Data Protection (FADP)
- Cantonal-level variations
- Requirements nearly identical to GDPR

The bottom line: Swiss users expect their data to be treated with extreme care. Consent isn't optional. It's mandatory.

Microsoft recognizes this. That's why Switzerland is included in Consent API V2 enforcement. Starting November 1st, your Clarity tracking in Switzerland requires explicit user consent.

## The Implementation Strategy

Your code needs to:
1. Detect Swiss users
2. Show a clear consent banner
3. Fire consent signals to Clarity
4. Handle preference changes
5. Log consent for audit purposes

Here's how:

## Step 1: Detect Swiss Users

```javascript
async function detectSwissUser() {
  try {
    const response = await fetch('https://ipapi.co/json/');
    const data = await response.json();
    return data.country_code === 'CH';
  } catch (error) {
    // Fallback: assume strict compliance for uncertain locations
    return true;
  }
}
```

This checks user IP geolocation. If you can't determine location reliably, default to strict compliance.

## Step 2: Create Consent Banner

For Swiss users, display a clear consent banner:

```html
<div id="consent-banner" class="consent-banner">
  <h3>Your Privacy Matters to Us</h3>
  <p>We use Microsoft Clarity to understand how you use our website. This helps us improve your experience. We respect your choice.</p>
  
  <div class="consent-options">
    <label>
      <input type="checkbox" name="analytics" checked>
      Allow analytics tracking (required for improvements)
    </label>
    <label>
      <input type="checkbox" name="advertising">
      Allow advertising tracking (optional)
    </label>
  </div>
  
  <div class="consent-actions">
    <button id="accept-consent">Accept</button>
    <button id="reject-consent">Reject All</button>
    <button id="save-preferences">Save Preferences</button>
  </div>
</div>
```

Key points:
- Be specific about what you're tracking
- Explain why (improve experience, etc.)
- Make granular choices available
- Don't use dark patterns

## Step 3: Fire Consent Signals

```javascript
function fireConsentSignal(preferences) {
  // Convert user preferences to Clarity format
  const analyticsStorage = preferences.analytics ? "granted" : "denied";
  const adStorage = preferences.advertising ? "granted" : "denied";
  
  // Fire signal to Clarity
  window.clarity('consentv2', {
    analytics_storage: analyticsStorage,
    ad_storage: adStorage
  });
  
  // Log for compliance audit
  logConsentEvent({
    timestamp: new Date().toISOString(),
    analytics: analyticsStorage,
    advertising: adStorage,
    country: 'CH'
  });
}

// When user clicks Accept
document.getElementById('accept-consent').addEventListener('click', function() {
  const preferences = {
    analytics: true,
    advertising: true
  };
  fireConsentSignal(preferences);
  storePreferences(preferences);
  hideBanner();
});

// When user clicks Reject All
document.getElementById('reject-consent').addEventListener('click', function() {
  const preferences = {
    analytics: false,
    advertising: false
  };
  fireConsentSignal(preferences);
  storePreferences(preferences);
  hideBanner();
});

// When user saves custom preferences
document.getElementById('save-preferences').addEventListener('click', function() {
  const preferences = {
    analytics: document.querySelector('input[name="analytics"]').checked,
    advertising: document.querySelector('input[name="advertising"]').checked
  };
  fireConsentSignal(preferences);
  storePreferences(preferences);
  hideBanner();
});
```

## Step 4: Persistent Storage

Swiss law requires you to log and prove you captured consent. Store preferences:

```javascript
function storePreferences(preferences) {
  const consentRecord = {
    timestamp: new Date().toISOString(),
    preferences: preferences,
    version: '1.0', // Update if your banner changes
    ipHash: hashIP(getUserIP()), // Anonymized user identifier
  };
  
  // Store locally (session storage is fine for Swiss law)
  sessionStorage.setItem('clarity_consent', JSON.stringify(consentRecord));
  
  // Also send to your server for audit trail
  fetch('/api/log-consent', {
    method: 'POST',
    body: JSON.stringify(consentRecord)
  });
}
```

Maintain server-side records for compliance audits. Swiss regulators may ask for proof.

## Step 5: Handle Preference Updates

Users might change their minds. Add a preference center:

```javascript
function showPreferenceCenter() {
  // Open modal to update preferences
  const currentPrefs = getStoredPreferences();
  
  // Update UI to show current state
  document.querySelector('input[name="analytics"]').checked = currentPrefs.analytics;
  document.querySelector('input[name="advertising"]').checked = currentPrefs.advertising;
  
  // Show modal
  document.getElementById('preference-modal').style.display = 'block';
}

function updatePreferences(newPreferences) {
  // Fire new signal
  fireConsentSignal(newPreferences);
  
  // Update storage
  storePreferences(newPreferences);
  
  // Close modal
  document.getElementById('preference-modal').style.display = 'none';
}
```

## Key Swiss Compliance Points

• **Clear Language**: Use simple, non-technical language. FADP requires transparency.

• **Granular Control**: Users must control analytics and advertising separately. Don't force bundled consent.

• **Timing**: Show banner before
