Skip to content
'; user_status_content.firstChild.appendChild(avatarContainer); } else { // Placeholder for LoggedOutUserMenu let loggedOutContainer = document.createElement('div'); // if LoggedOutUserMenu fallback let userBtn = document.createElement('button'); userBtn.style.width = "33px"; userBtn.style.height = "33px"; userBtn.style.display = "flex"; userBtn.style.alignItems = "center"; userBtn.style.justifyContent = "center"; userBtn.style.color = "var(--ds-gray-900)"; userBtn.style.border = "1px solid var(--ds-gray-300)"; userBtn.style.borderRadius = "100%"; userBtn.style.cursor = "pointer"; userBtn.style.background = "transparent"; userBtn.style.padding = "0"; // user icon ( from geist) let svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg'); svg.setAttribute('data-testid', 'geist-icon'); svg.setAttribute('height', '16'); svg.setAttribute('stroke-linejoin', 'round'); svg.setAttribute('style', 'color:currentColor'); svg.setAttribute('viewBox', '0 0 16 16'); svg.setAttribute('width', '16'); let path = document.createElementNS('http://www.w3.org/2000/svg', 'path'); path.setAttribute('fill-rule', 'evenodd'); path.setAttribute('clip-rule', 'evenodd'); path.setAttribute('d', 'M7.75 0C5.95507 0 4.5 1.45507 4.5 3.25V3.75C4.5 5.54493 5.95507 7 7.75 7H8.25C10.0449 7 11.5 5.54493 11.5 3.75V3.25C11.5 1.45507 10.0449 0 8.25 0H7.75ZM6 3.25C6 2.2835 6.7835 1.5 7.75 1.5H8.25C9.2165 1.5 10 2.2835 10 3.25V3.75C10 4.7165 9.2165 5.5 8.25 5.5H7.75C6.7835 5.5 6 4.7165 6 3.75V3.25ZM2.5 14.5V13.1709C3.31958 11.5377 4.99308 10.5 6.82945 10.5H9.17055C11.0069 10.5 12.6804 11.5377 13.5 13.1709V14.5H2.5ZM6.82945 9C4.35483 9 2.10604 10.4388 1.06903 12.6857L1 12.8353V13V15.25V16H1.75H14.25H15V15.25V13V12.8353L14.931 12.6857C13.894 10.4388 11.6452 9 9.17055 9H6.82945Z'); path.setAttribute('fill', 'currentColor'); svg.appendChild(path); userBtn.appendChild(svg); loggedOutContainer.appendChild(userBtn); loggedOutContainer.style.display = 'flex'; loggedOutContainer.style.gap = '8px'; loggedOutContainer.style.alignItems = 'center'; user_status_content.firstChild.appendChild(loggedOutContainer); } })();
Menu

Integrate flags with Vercel Web Analytics

Last updated February 11, 2026

Web Analytics integration is available in Beta on all plans

Feature Flags section in Vercel Web Analytics
Feature Flags section in Vercel Web Analytics

Vercel Web Analytics can look up the values of evaluated feature flags in the DOM. It can then enrich page views and client-side events with these feature flags.

  1. To share your feature flags with Web Analytics you have to emit your feature flag values to the DOM as described in Supporting Feature Flags.

    This will automatically annotate all page views and client-side events with your feature flags.

  2. Client-side events in Web Analytics will now automatically respect your flags and attach those to custom events.

    To manually overwrite the tracked flags for a specific track event, call:

    component.ts
    import { track } from '@vercel/analytics';
     
    track('My Event', {}, { flags: ['summer-sale'] });

    If the flag values on the client are encrypted, the entire encrypted string becomes part of the event payload. This can lead to the event getting reported without any flags when the encrypted string exceeds size limits.

To track feature flags in server-side events:

  1. First, report the feature flag value using reportValue to make the flag show up in Runtime Logs:

    app/api/test/route.ts
    import { reportValue } from 'flags';
     
    export async function GET() {
      reportValue('summer-sale', false);
      return Response.json({ ok: true });
    }
  2. Once reported, any calls to track can look up the feature flag while handling a specific request:

    app/api/test/route.ts
    import { track } from '@vercel/analytics/server';
    import { reportValue } from 'flags';
     
    export async function GET() {
      reportValue('summer-sale', false);
      track('My Event', {}, { flags: ['summer-sale'] });
     
      return Response.json({ ok: true });
    }

If you are using an implementation of the Flags SDK you don't need to call reportValue. The respective implementation will automatically call reportValue for you.


Was this helpful?

supported.