Install guide · framework · ~3 min
Install via npm for bundled frameworks.
Use the npm package when you want type safety and a single source of truth for your website ID. The package is SSR-safe: initPixel() no-ops on the server, so you can call it at module top-level without guards. identify() and track() are SSR-safe too — they buffer until the pixel loads, so you can call them anywhere. Building a SaaS with signups, free trials, and recurring revenue? See the SaaS install guide for the end-to-end funnel wiring.
Add @admaxxer/pixel to your dependencies.
npm install @admaxxer/pixel
Import and call initPixel once at app boot. It is safe to call at module top-level — the function detects SSR and no-ops server-side.
import { initPixel } from '@admaxxer/pixel';
initPixel({
websiteId: 'YOUR_WEBSITE_ID',
});
The package ships identify and track as named exports — both SSR-safe (buffered until the pixel loads). After the user signs up, call identify(user.email) (or identify(user.id, { email: user.email, plan: user.plan })) to stitch the anonymous visitor to the named account, then track('Signup', { plan, source }): import { identify, track } from '@admaxxer/pixel'; identify(user.email); track('Signup', { plan: 'pro' });. For server-side identify (e.g. when you create the account in an API route), POST to /api/identify directly. See the SaaS install guide for the end-to-end flow.
Load any public page on your site in a fresh browser tab. Within a few seconds, the Admaxxer dashboard realtime view should show the event. If nothing lands after 2 minutes, re-check the snippet is actually in the rendered HTML <head> (View Source, not just DevTools).