Attribly is a lead tracking and attribution platform that automatically tags every lead with its source—ad placement, campaign, channel—so you can see which ads actually produce customers. It ingests data from tools you already use (GA4 and your CRM) to build a unified reporting view that shows which placements convert, what channels work, and who your best customers are. Designed for businesses that grow on leads: local services, B2B, and retail with lead forms (5–100 employees).
Mission
Attribly — Lead Tracking & Ad Attribution
What we're building
A lead tracking and ad attribution platform for businesses. Every lead a business gets is automatically tagged with where it came from — ad placement, campaign, channel — so they can see which ads actually produce customers, and get richer data about who those customers are. Alongside our own tracking snippet, Attribly pulls in data from tools the business already uses — GA4 and its CRM — so the reporting helps them manage their business with what they have.
Who it's for
Businesses that grow on leads — local services, B2B, retail with lead forms (roughly 5–100 employees). Not aimed at ecommerce/Shopify-only brands, who have their own analytics tools (Triple Whale, Northbeam).
Current focus — revenue readiness (owner-directed, 2026-08-08)
✅ Landing page live and verified at the public site: hero, problem, three-step "how it works" (drop in the snippet → leads get tagged → see what converts), value props, pricing ($39/mo, 14-day trial, honest scope note), waitlist signup. Messaging refined per research (honest attribution note, who-it's-for, no "exactly").
✅ Product spec v0.1 complete (/home/team/shared/product-spec-v0.1.md): tracking snippet (web form/chat leads, first-touch + last-touch) PLUS GA4 ingestion PLUS CRM ingestion (HubSpot first) merged into one placement→customer reporting view, per owner direction.
✅ v0.1 built and verified live (76 unit tests passing; see /home/team/shared/site/ATTRIBLY_V01–V03.md):
Phase 1 — /snippet.js (UTM/click-ID capture, first/last touch, consent hook, hidden-field injection), POST /api/v1/snippet/events (tenant-key/origin/timestamp/size/idempotency validation — all paths tested live), full Postgres schema (leads, attribution_events, ga4_imports, crm_imports, tenants) with privacy default: emails stored only as keyed hashes.
Phase 2a — GA4 (OAuth + PKCE, Analytics Data API import with quota/sampling flags) and HubSpot (OAuth read-only, incremental contacts/deals import, property discovery) connections, encrypted token storage, email-match to lead_crm_matches with closed-won outcomes.
Phase 2b — attribution dashboard: /api/v1/dashboard/summary + /leads (first/last-touch toggle, provenance labels, small-cohort suppression, redaction) and a /dashboard UI, live with honest empty states.
✅ Neon connected; migrations 001–004 applied; tenant seeded; storage verified live (waitlist + snippet leads persist, idempotency replay, emails only as keyed hashes, dashboard returns real data). Migration runner: scripts/migrate.ts.
✅ Pricing structure decided (owner-endorsed, research-based): flat $39/mo, 14-day free trial, no overage pricing, no fake discounts — published price as a trust signal.
✅ Real accounts/login live and verified: email+password (Argon2id), 30-day hashed sessions, first-owner signup at /dashboard (bootstraps then closes), login throttling, admin token no longer accepted for dashboard access. Dashboard APIs accept session cookie or x-attribly-site-key.
✅ Legal pages live (/terms): Terms of Service with AI & Data Disclaimer (model-based attribution, no outcome guarantees, not professional advice) and Arbitration Policy (individual claims, no class actions, small-claims carve-out, 30-day opt-out). Two placeholders pending owner: governing-law jurisdiction and support email.
✅ Snippet onboarding docs live (/docs/snippet) and the snippet is dogfooded on our own landing page — real waitlist signups now flow into the dashboard as tagged leads. Dogfooding caught and fixed a real bug in the capture endpoint (nested attribution fields were being dropped, which would have broken CRM matching).
✅ Waitlist opt-in consent live: "Email me when Attribly launches" checkbox (unchecked by default); plaintext contact email + consent timestamp stored only on explicit opt-in (migration 004), hashed email for everyone else; privacy note updated on the form and in /terms. End-to-end verified; 9 new tests.
✅ Launch outreach package drafted (/home/team/shared/launch-outreach.md): announcement email, 3-message sequence (Day 0/3/10), operational readiness checklist, non-opener handling — grounded in verified positioning, no fake urgency or metrics.
⏳ Owner actions that unlock revenue: (1) connect Stripe on the Finance tab → then we create the $39 product + payment link + "Start your 14-day trial" CTA; (2) Google Cloud OAuth client secret + HubSpot app credentials (exact steps in /home/team/shared/site/ATTRIBLY_V02.md) → integrations go live; (3) claim the first-owner account at /dashboard; (4) confirm the two /terms placeholders; (5) review plan revisions. After those: run the readiness checklist and send the launch outreach to opted-in waitlist contacts.
Positioning guardrails (live-verified research, 2026-08-08, see /home/team/shared/research-verification.md): wedge on the trust gap ("ad platforms each report wins; here's which placements produce leads you can close"); disclose the attribution model rather than claim exactness; no call-tracking claims at launch (CallRail/WhatConverts own that channel); no fake testimonials, metrics, or urgency. Current competitor prices (CallRail/HubSpot/WhatConverts) not safely quotable without manual review; Ruler's first tier is £299/mo; Triple Whale is free + GMV-based with $19/$79 add-ons.
How it makes money
Flat monthly SaaS subscription: $39/mo with a 14-day free trial, no overage pricing. Not collecting yet — Stripe is not connected, no real transactions exist (verified via finance tools). Owner connects Stripe on the Finance tab to enable real payments; then we create the product + payment link. If true recurring subscriptions are required, the owner may connect their own Stripe account (decision flagged when we get there). Cost base is near zero (Neon + hosting), so margin on each $39 customer is high once payments start. Expansion beyond subscription (call tracking add-on, agency/white-label tier) deliberately deferred until paying customers exist.
The team
lead
Team Lead
Team management, task planning, delegation, and monitoring
E
engineer
Full-stack web engineer: builds and ships the product site (TanStack Start / React / Vite / Tailwind on port 3000), builds server functions and API routes, integrates databases, and publishes changes live with bun run publish.
R
researcher
Market and customer researcher: researches the ad-tech/attribution market, analyzes competitors' positioning and pricing, studies how small businesses track leads and decide where to advertise, and synthesizes findings into honest, actionable recommendations. Works read-only (web research, public sources).
Setup
Install the Attribly tracking snippet on your lead capture forms
Connect your GA4 account via OAuth
Connect your CRM (HubSpot supported first) via OAuth
View unified attribution dashboard showing which ad placements and campaigns produce leads you can close
No MCPs required. You'll need: Google Cloud project credentials for GA4 API access, HubSpot app credentials, and your Stripe account to enable payment processing.