Admaxxer documentation · the single source of truth.

Every metric that matters, then let Claude act on it.

Admaxxer is a DTC analytics platform with built-in Meta + Google ad ops. Install the pixel, connect Meta and Google, and ship revenue attribution, blended MER, cohort LTV, MMM, forecasting, and AI-driven ad ops in under ten minutes.

Start your free trial See pricing

7-day free trial on every plan. No credit card required.

Deep dives

Six focused sub-pages cover the platform in depth. Start with the topic closest to your goal:

Quickstart — four steps to live data

Most teams are reporting blended MER and ad-level LTV inside an hour. Run these four steps in order:

  1. Sign up. Create your workspace at admaxxer.com/signup. Magic-link, Google, and Apple sign-in are all supported. Workspaces are multi-tenant from day one — you can invite teammates immediately.
  2. Install the pixel. Drop one <script> tag into your site head. Twenty platform-specific install guides cover Shopify, WordPress, Webflow, Next.js, Google Tag Manager, Wix, Squarespace, Magento, BigCommerce, custom React/Vue/Svelte builds, and more. See the install index.
  3. Connect Meta Ads. Generate a long-lived user token from Meta for Developers and paste it into Settings › Integrations › Meta. Tokens are encrypted with AES-256-GCM at rest and never written to logs. No Meta App Review is required because the token is user-supplied.
  4. Connect Google Ads. Paste a Google OAuth refresh token plus your approved developer token. Admaxxer handles token refresh, GAQL batching, and the cost_micros → USD conversion automatically.

From that point, your dashboard, attribution view, and the Claude agent are all reading the same Tinybird pipes — no duplicated data layer.

Analytics surface

Analytics is the primary surface in Admaxxer. The first-party pixel feeds 33+ Tinybird pipes that power every chart, every cohort, every model. Pipes are grouped by category:

Visitors and sessions

Revenue and orders

Blended efficiency

Attribution

Forecasting (v0.1)

Admaxxer ships a lightweight OLS forecast with weekly seasonality. It is good enough to steer weekly decisions — "are we on pace for this month's revenue target?" — but it does not pretend to be Prophet. The OLS coefficients are exposed in the API so you can audit assumptions. v1.5 will upgrade to Prophet (or an equivalent state-space model) for richer seasonality and changepoint detection.

Marketing-mix modeling (MMM, v0.1)

Channel contribution is estimated with OLS plus geometric adstock (no priors in v1). The output is a per-channel contribution to revenue, with adstock-decayed spend as the regressor. v1.5 will replace this with a Robyn-style Bayesian MMM that accepts priors and produces credible intervals. The current implementation is fast, transparent, and good enough to flag obvious channel imbalances — not to replace a full MMM consulting engagement.

Incrementality (v0.1)

The incrementality module compares conversion rates between paid-exposed and organic-only cohorts using a two-proportion z-test. It returns a lift estimate and a p-value. v1.5 will add geo-lift testing — randomly holding out paid traffic to a subset of geos and measuring revenue delta — for a more defensible causal estimate.

Analytics AI chat

The analytics chat is a Sonnet-powered drawer (open from anywhere with ⌘J) that gives natural-language access to the same Tinybird pipes the dashboards read. It exposes 8 read-only tools, gated by a PIPE_ALLOWLIST so it can never query an unapproved pipe. Prompts are cached on the system block and tools array for low latency and predictable cost.

Claude AI agent — campaign operator

The Claude agent is the secondary surface: a data operator first, a campaign operator second. Model: claude-sonnet-4-6. Streaming SSE keeps tokens flowing as they're generated. Prompt caching is preserved on the system block and the tools array — cache regressions are treated as cost regressions.

Six tools

The agent has six tools. The first three are read-only and run without confirmation. The last three are destructive and require an explicit confirmed: true from the user before they fire:

An additional read-only tool, query_metrics, gives the agent access to the same Tinybird analytics pipes the dashboards use — so anything you can chart, the agent can read.

Confirmation flow

If you ask the agent to "pause all ad sets with ROAS below 1.5", it will draft the call, surface the candidate list in chat, and wait for explicit confirmation before firing. Clicking Confirm in the UI sets confirmed: true on the next tool call. There is no "auto-pilot" mode — destructive intent is always explicit.

Where to talk to the agent

Two surfaces: the /chat page (full-screen) and the global drawer triggered with ⌘J from anywhere in the app. Both stream the same conversation back-end. Sessions are per-workspace.

Meta Ads operations

Admaxxer talks to Meta via the Marketing API on the Graph API surface (default v21.0; configurable via META_API_VERSION). Two auth modes are supported:

Rate limits are respected aggressively: the practical user-token ceiling is roughly 200 calls per hour, and Admaxxer auto-backoffs on the documented error codes (17, 32, 613). Ad account safety is the top priority — we never spam the Graph API on your behalf.

Read the Platforms deep dive for token rotation, error handling, and the full list of operations the agent can perform.

Google Ads operations

Google Ads requires both an OAuth refresh token (per-user) and an approved developer token (per-platform). Paste both into Settings › Integrations › Google. Admaxxer:

Refresh tokens are revoked under three conditions: (1) the user revokes consent, (2) the OAuth client hits the 50-refresh-token cap, or (3) the token has been unused for 6 months. Admaxxer surfaces the revocation state in the connection panel and prompts you to re-authorize.

Connection lifecycle and token security

Every ad-platform credential is encrypted at rest with AES-256-GCM. The encryption key is derived via scrypt from the ENCRYPTION_KEY environment variable, with per-record nonces. Key rotation is supported via dual-key decrypt: during a rotation window, decryption tries the new key first, falls back to the old key, and re-encrypts on read so the old key can be retired cleanly. No raw token is ever written to logs, audit trails, or error reports.

Connection state lives in ad_platform_connections with a status enum (active, expiring_soon, expired, revoked, error). A nightly cron checks expiry windows and emails you 7 days before a Meta token lapses. Rotated tokens reset the status to active without touching downstream sync state.

Workspaces, multi-tenancy, and team invites

Every account starts with a personal workspace. From there:

Workspaces can be switched from the header workspace picker without re-authentication.

Authentication

Three sign-in methods, all funneling into the same session model:

Sessions are HTTP-only cookies, signed with SESSION_SECRET, defaulting to 30 days (SESSION_MAX_AGE_DAYS). Sessions are revoked server-side on logout — no JWT replay risk.

REST API

Programmatic access lives under /api/v1/*. Every route is session-auth or API-key auth, zod-validated, and rate-limited via Upstash Redis. The API surface is intentionally narrow:

API keys are issued from Settings › API Keys. Keys are workspace-scoped and shown once at creation — we store only the SHA-256 hash. See the Developer deep dive for full schemas, error codes, and SDK examples.

Plans and pricing

Three published plans, billed monthly through Stripe Checkout. Self-serve upgrades and downgrades from the Customer Portal — proration is handled by Stripe. 7-day free trial on every plan. No credit card required. 14-day money-back guarantee on monthly plans.

Quotas are enforced at the API layer, not the UI layer — you cannot bypass them by hitting the REST endpoints directly. When you hit a quota, you'll see an X-Admaxxer-Quota-Remaining header and a 402 with a structured error body. See the Billing & plans deep dive for plan transitions, dunning, and the recovery flow.

Pixel install — 20 platforms

The Admaxxer pixel is a single first-party <script> tag, cookieless-compatible, that powers every analytics surface. Twenty platform-specific install guides are linked from the install index:

Average install time is under three minutes. The pixel works on any site where you can edit <head> — the universal snippet is the fallback when no platform-specific guide applies.

Security and data handling

Reliability and rate limits

Admaxxer leans hard on Upstash Redis for queues, caches, and rate limiters. BullMQ runs background workers for ad-platform sync and token expiry checks. Rate limits are layered: a per-IP limit on auth endpoints, a per-workspace limit on the REST API, and a per-token limit on outbound Meta and Google calls. The outbound limits exist to protect your ad account — we never spam.

The full rate-limit table is documented in the Developer deep dive. Cache TTLs are tuned conservatively: insights cache for 15 minutes, account metadata for 1 hour, pixel JWTs for 120 seconds. Sync workers operate on a back-pressured queue so that a Meta or Google API outage cannot stall the rest of the app — user-facing dashboards continue to serve from the last cached snapshot, with a banner indicating staleness.

Background jobs are observable: every BullMQ worker emits structured logs on enqueue, start, success, and failure, and exposes its queue depth on a private metrics endpoint. Failed jobs land in a dead-letter queue with a 7-day retention so we can replay them once an upstream issue is resolved. Crashes never silently lose work.

Data architecture — what lives where

Admaxxer separates state across three storage layers, each chosen for its strengths:

The Claude agent reads from all three: Postgres for connection state and chat history, Tinybird via query_metrics for analytics, and the live Meta/Google APIs (via cached service classes) for campaign mutations. There is no separate "agent data layer" — the agent uses exactly the same internal endpoints the UI uses, which means anything a human can see or do, the agent can see or do.

Observability and audit

Every billable or destructive event is observable. Stripe webhooks land in an audit table before they're processed, so we have a verifiable record of every subscription state change. Ad-platform mutations — pause, scale, launch, budget update — write to ad_sync_logs with the request body, response code, and outcome. AI agent tool calls are recorded with input, output, and the user's confirmed flag where applicable. Authentication events (sign-in, sign-out, magic-link consume) are logged with IP and user agent. None of these logs include secret values — tokens, keys, and bearer headers are scrubbed at the logger boundary.

For customer-facing visibility, the in-app activity feed surfaces recent agent actions and connection events in plain English. For team-level visibility, owners can export the audit trail to CSV from Settings › Audit Log.

Internal links

Once you've finished the quickstart, the deep-dive sub-pages cover everything else:

Need help?

Email support@admaxxer.com for product help, integration questions, or anything else. We typically respond within one business day. For Stripe billing questions, the Customer Portal handles invoices, payment methods, and plan changes directly.

Found a bug? Include your workspace ID (visible in Settings), the time of the incident, and a one-line repro. We will respond with a fix or a workaround.