One script tag puts it on your site — that part takes a minute. What your ad links carry is what decides how much the product can tell you, and that is step three below.
Add a site in the app and its setup screen hands you this tag with your two ids already filled in. Copy it into the <head> of every page you advertise on. It loads async, so it never blocks your page from rendering.
<script async src="https://cdn.intelligenceads.io/sdk/tracker.latest.js" data-organization-id="YOUR_ORGANIZATION_ID" data-site-id="YOUR_SITE_ID"></script>
YOUR_ORGANIZATION_ID and YOUR_SITE_ID are the only two things you substitute. They are on your site’s setup screen the moment you add the site, already pasted into a copy-ready snippet — you never have to type them. Nothing else in the tag changes, and the ids bind to the site, not to its address: renaming your domain needs no re-install.
Add it as a Custom HTML tag on the Initialization – All Pages trigger, then publish the container. Tag Manager re-creates the script element it injects and drops data-* attributes along the way, so this variant carries the same two ids as query parameters instead.
<script async src="https://cdn.intelligenceads.io/sdk/tracker.latest.js?organization_id=YOUR_ORGANIZATION_ID&site_id=YOUR_SITE_ID"></script>
Your site’s own screen in the app stays a setup view until its first event lands. It checks every ten seconds, and the moment one arrives it replaces itself with your monitor — there is no button to press and no second place to look.
Any event will do it. A single page view from your own browser on the live site is enough to prove the tag is wired; you do not need a paid click to finish the install.
Every lens in the product is scoped to paid arrivals. A session counts as paid when the URL it landed on carries a click ID, or a paid medium naming a platform. Everything else is stored and simply not shown.
Deterministic — the parameter’s presence proves the platform, so nothing has to be inferred.
Google Ads and Microsoft Advertising append theirs on their own when auto-tagging is on — for those two there is nothing to do.
A utm_medium from the list below establishes that the click was bought. Only then is utm_source read, for the platform name.
cpcppcpaidpaidsearchpaid_searchpaidsocialpaid_socialsponsoreddisplayaffiliate
Sources are matched loosely, because marketers tag loosely: adwords and googleads both read as Google, fb and ig as Meta, bing as Microsoft. LinkedIn and X are named too.
The tag reads the request and the page. Whether a visitor converted, and what they chose on your cookie banner, are facts only your own code holds — each is one call.
Call it when a visitor completes a goal — from your page code or a Tag Manager tag on the event you already push.
window.iads('conversion', { type: 'primary' });Call it from your banner’s own button handlers, every time a visitor decides or changes their mind.
window.iads('consent_update', {
analytics: true,
marketing: false,
action: 'custom',
});Both calls can run before the tag has finished loading, if you define the queue stub first. Queued calls flush in order the moment the tracker is ready.
window.iads = window.iads || function () {
(window.iads.q = window.iads.q || []).push(arguments);
};Four things you might reasonably expect, and don’t get. We would rather you read them here than discover them on the Monday.
gtag('consent', …) and the IAB TCF string are invisible to the tracker. There is no automatic hook into a consent platform: if you want your banner’s choice recorded here, the call above is what bridges it, and you map the values yourself.
This product sees clicks arriving — never spend, never bids, never campaign state. There is no cost column and no return-on-ad-spend, because nothing here has ever seen what you paid.
Not one, on any visit — and no third-party cookie, no ad-network sync. Three first-party keys in the browser’s own storage, listed below, are the whole footprint. What your banner has to say about them stays your call: the storage is written on your site, for your purposes.
A datacenter ASN, a VPN exit, a privacy relay: each is stated as a fact, in the same ink as home broadband, with no score beside it.
All first-party, all in the visitor’s own browser storage, all clearable by them at any time from their browser settings.
A random identifier distinguishing repeat visits from the same browser on the same device.
localStorage · Until the visitor clears their browser storage — no automatic expiry is set.
A random identifier grouping the page views of one browsing session together.
sessionStorage · Cleared when the tab or window session ends; a new key is minted each calendar day.
The first referrer seen in the session, so later page views keep reporting how the visitor arrived.
sessionStorage · Same as the session identifier.
None of it is shared with an advertising network, and the visitor identifier is scoped to one browser on one device — it is never used to link the same person across browsers, devices or unrelated sites. The full detail is in the cookie policy and the privacy policy.
Five of them are the install, and the sixth is not a fault at all.
Still nothing after real traffic has run? support@intelligenceads.io, with your site URL — we’ll look at it with you.
Everything your site sends is ingested and kept, on every plan — the event allowance never governs what gets written down, and nothing is ever deleted to make room. Free covers one site, 10,000 events a month and a seven-day window; past the allowance that month’s tail waits, unread, until an upgrade reveals it. On a paid plan nothing is held back at all: the overflow is billed, and collection and reading both carry on. See the plans.
Free plan, no credit card, no trial timer. Install in under 5 minutes — drop a script, load a page, and watch your first observations arrive.
Start free→