Skip to content
LITE
Insights

Reports, visits and the network view

7 min readUpdated September 2026Applies to: Lite & Pro

Three screens sit under Insights in the sidebar — Reports, Visits and Network — and they answer three different questions: is the programme working, what actually happened on any one click, and who recruited whom. Knowing which one to open saves you searching the wrong table.

Reports: is the programme working?#

Three cards across the top, and they deliberately don’t count the same population:

  • Earned sums the amount on every referral whose status is unpaid or paid. A referral still pending review, or one that was rejected, contributes nothing. This is what the programme has actually committed to pay, not a raw sum of the referral list — a number that looks smaller than “total referrals” times an average isn’t a bug, it’s pending and rejected rows sitting outside it on purpose.
  • Referrals counts every referral row regardless of status, rejected ones included.
  • Visits counts every row ever logged in the click table — every link follow, converting or not.

Below the cards, a fourteen-day chart of referral count and commission per day. It’s built server-side as one grouped query rather than bucketed from whatever page of referrals the browser already has loaded — a chart built from a paginated list quietly becomes “the last ten rows” the moment pagination kicks in, which answers a different question than “the last two weeks” without telling you it changed. Every day in the window appears, including days with nothing in them, because a chart that silently skips quiet days compresses time and makes the trend look steadier than it is. The window is genuinely fixed at fourteen days here — there’s no picker on this screen, and rejected referrals are left out of the trend the same way they’re left out of Earned.

Two more breakdowns follow:

  • By source — which integration each referral came through (WooCommerce, Easy Digital Downloads, and so on), ranked by commission total. A referral whose context wasn’t recorded is grouped under “unknown” rather than dropped. This is the fastest way to notice that the integration you spent a week wiring up has produced four referrals.
  • By campaign — clicks, conversions, revenue and a conversion rate, per campaign tag. Clicks are counted from the visit log and conversions from referrals (excluding rejected ones), tallied separately and then matched up by campaign name rather than joined in one SQL query — a join between two tables on a shared, repeatable key multiplies rows instead of counting them, which would silently inflate both sides. A referral or click carrying no campaign is grouped under an empty key and shown as untagged rather than dropped, because knowing how much traffic arrives with no campaign attached is the first thing that makes the rest of the table mean something. Rows are ranked by revenue first, then by clicks, so a campaign with real traffic but no sales yet still shows up near the top instead of sinking to the bottom on a technicality.

Two CSV buttons sit in the page header, Affiliates and Referrals, each pulling up to ten thousand rows straight from the repository rather than whatever the screen happens to have rendered — the export isn’t narrowed by a search box or a filter you left set. The affiliate export carries affiliate ID, user ID, status, rate, rate type, lifetime earnings, unpaid balance and registration date; the referral export carries referral ID, affiliate ID, order ID, amount, currency, status, source and date. Exporting is the thing to do before any change you can’t easily undo.

Visits: what actually happened#

The raw click log, one row per link follow, newest first — the highest-volume table in the plugin, since a busy programme logs one of these for every follow whether or not it converts.

  • Search matches the affiliate, the landing page or the referrer; a numeric search term is also matched against the affiliate ID directly.
  • An outcome filter narrows to Converted or No conversion.
  • A from/to date range narrows the window — unlike the Reports screen, Visits genuinely lets you pick one.
  • Each row shows the affiliate, the landing page, the referrer and the result. A visit with no referrer header prints as Direct, which is usually a typed URL, an app, or a link that had its referrer stripped somewhere upstream.

There’s no CSV export on this screen. The total shown is a live count rather than a cached one — pagination here promises exactly as many pages as currently exist, not a snapshot that can drift stale under a busy programme. If you need the click log out of the database in bulk, that’s a REST call rather than a button, since exporting ten thousand-plus rows of raw click data isn’t something this screen is built to hand you in one file.

Network: who recruited whom#

The recruitment tree, and it’s off by default. Turn on Affiliates can recruit affiliates under Settings → Commissions and an affiliate who signs up through another affiliate’s link is recorded as that affiliate’s recruit; every generation above a sale then earns whatever override percentage you’ve configured for that level. The percentages themselves, and Pro’s named topology constraints on top of the free plugin’s unlimited tree, are covered in Recurring, lifetime and tiered commissions — this page is about reading the tree once it exists, not configuring what it pays.

The screen is rooted on one affiliate at a time rather than drawing every chain in the programme at once — a programme with a thousand partners has no single tree, and “show me everybody” answers a question nobody actually asks. It opens on whoever has earned the most, since if anyone has a downline worth looking at it’s usually them, and a picker at the top moves you to anybody else.

Under the picker sits a level-by-level table: how many people are at each level, what they’ve collectively earned, and what that level is currently worth as an override — or the word “nothing” for a level with no rate configured. Only settled money counts toward the earnings column: a pending or rejected referral doesn’t make a downline look more productive than it’s actually been. Below the table, the same tree is drawn out visually.

With the network switched off, the screen still shows whatever was recorded while it was on, with a plain notice at the top that nothing new is being recorded and no overrides are currently being paid — recorded history doesn’t disappear just because the toggle moved.

Under the hood the tree is built breadth-first, one query per level rather than one query per affiliate, so drawing a network of two hundred partners costs the depth of the tree in queries rather than its size. Depth is capped at ten levels regardless of what’s asked for, and a node already seen once is never expanded a second time — a cycle in the parent-child data, however it got there, ends the branch instead of looping the request to death. Two separate REST routes serve this: one admin route that takes any affiliate ID and needs the programme capability, and one that always returns the caller’s own downline and needs nothing more than being logged in. They’re kept apart deliberately — collapsing them into a single route with a parameter would put one authorization check between an ordinary affiliate and everybody else’s names, sign-up dates and earnings.

Reading it through an agent#

The same programme totals and daily series are available as a read-only ability, squad-affiliate/program-stats, gated by manage_options and covered in full in REST API, abilities and MCP. It answers affiliate count, referral count, totals grouped by status, and a daily series for however many days you ask for (thirty by default, clamped between one and three hundred sixty-five) — the same shape as this page, built for a model to read rather than a screen to render.

Two things that live nearby#

The leaderboard — who’s currently ranked highest by earned commission — is drawn from the same Domain\Insight code as the Reports screen, but it’s covered where it’s used: in Creatives, short links and the leaderboard, since that’s where an affiliate actually encounters it, in their own portal rather than here.

And if you’d rather affiliates heard their own numbers on a schedule instead of you checking this screen for them, there’s a recurring recap email — weekly or monthly, off by default — covered in Transactional email.