Why we use our own affiliate tracker as our web analytics (and how)
LimeliJourney's marketing site runs on LimeliJourney — no GA4, no consent banner, no third-party vendor. Here is the actual setup behind "we track our own site with our own tracker."
Most companies that sell analytics or tracking software still run Google Analytics on their own marketing site. We did not want to be most companies. If we are asking you to trust LimeliJourney with your funnel, the least we can do is trust it with our own — no GA4, no third-party pixel, no cookie-consent banner, because there is no third-party cookie to consent to. Every page view on limelijourney.com is recorded by the same first-party SDK, the same event pipeline, and the same reports a customer gets on day one.
The house tenant
Internally we call it "Lime Lift" — a tenant like any other in the platform, seeded the same way our customers are: a tenant row, an admin login, and the default set of channels every tenant starts with. The tracking domain is lime-lift.track.limelijourney.com — the platform's built-in per-tenant subdomain, derived automatically from the tenant's slug. No DNS setup, no certificate provisioning, no custom-domain flow: the subdomain is ready the moment the tenant is created. No special-cased infrastructure, no shortcut through the schema. Tenant isolation does not bend for us either — our own traffic lives in exactly the same tenant-scoped tables as everyone else's, filtered by the same tenant_id.
Page views are just clicks with nowhere to redirect
Our tracking SDK, track.v1.js, was built for two jobs: follow a tracking link to a landing page, or beacon a direct visit straight from the page's own JavaScript. A marketing page load is the second case — nobody clicked a partner link, they just typed the URL or followed a search result. So every page loads one small config script (ll-self-track.js) before the SDK tag itself.
ll-self-track.js sets window.LL_DEFAULTS with two values before the SDK ever runs: s1 is the page path (/pricing, /demo, /blog/self-tracking), and s2 is a referrer class computed client-side — direct, internal, search, social, or referral. Those are the same generic s1–s5 sub-id columns every LimeliJourney offer already supports for tagging traffic. Because the SDK fires its beacon whenever a signal is present and s1 counts as one, every page load reports itself automatically, with no attribution parameters required on the URL.
The server does the rest. Our tracker resolves the visiting tenant from the request's Host header, so a beacon that lands on lime-lift.track.limelijourney.com is unambiguously ours. Channel attribution happens without us baking a channel ID into the page at all — the server's own resolver reads document.referrer and utm_medium/gclid/fbclid and falls back through the same cascade a partner's traffic goes through, landing on the tenant's Direct, Organic Search, Paid Search, Paid Social, or Unknown channel. It is the identical code path that classifies a customer's affiliate traffic; we just happen to be the tenant asking.
Why the reports need nothing new
This is the part we actually wanted to prove out: the Clicks report, the Channels breakdown, and the sub-id views already group by s1/s2 and by channel for every tenant. Point them at Lime Lift and they read as a page-view-by-path, referrer-source site analytics dashboard without a single new report being built. /pricing shows up as a "click" with s1=/pricing; a visit from a Google search shows up with s2=search. It is a rough mapping — every affiliate-tracking noun (click, offer, campaign) is doing double duty as a web-analytics noun (page view, section) — but it is a real one, and it is the whole point of dogfooding: if these five reports cannot tell us how our own site performs, they were never going to tell you how yours does either.
First-party, and why that is not a footnote
The privacy story is a side effect of the architecture, not a separate feature we bolted on. lime-lift.track.limelijourney.com is a first-party subdomain of the site the visitor is already on — there is no third-party cookie, no cross-site request, and nothing for a consent-management platform to intercept. That is the identical mechanism that keeps a customer's attribution alive when Safari's Intelligent Tracking Prevention starts capping third-party cookies: first-party by default, not first-party as a compliance workaround.
What is next
The visitor-side page views are live; the next piece is closing the loop from a demo request back to the channel that produced it, so a "Book a demo" click on a paid campaign shows up as a conversion in the same report — the exact conversion-tracking wiring we ship for every customer's checkout or lead form. When it lands, this same house tenant is how we will measure it.
Curious what your own funnel looks like through five reports instead of five tools? Book a demo and we will show you Lime Lift's dashboard as the example.