A supplier report says a campaign received 10,000 clicks. Your analytics report says it produced 7,200 sessions. That 2,800 difference is large enough to raise a delivery question, but it does not identify the cause by itself.
Clicks and sessions are different measurements. A click records an interaction with a placement or ad. A session records a visit that your site and analytics setup successfully recognized.
The two systems can use different clocks, filters, labels, and counting rules. A careful clicks vs sessions discrepancy review separates explained differences from unresolved delivery questions.
Start with one aligned comparison
The first problem is often a comparison of totals that look similar but describe different populations. For example, a supplier may count clicks in UTC from 1 to 31 May, while your analytics property uses New York time and reports sessions that began on your landing page. The totals can differ before a visitor even reaches your page.
It helps to create one comparison row for each campaign and date range. A practical step is to record the source report, property or site, timezone, start and end timestamps, campaign label, landing URL, and counting unit. You may want to treat a date as a timestamp boundary, not just a calendar word. “31 May” needs a timezone and an end time.
A useful first check is:
gap = reported clicks - reported sessions
For the sample case, 10,000 - 7,200 = 2,800. The percentage gap against clicks is 2,800 / 10,000 = 28%. This is a descriptive measure, not a quality score or a fraud finding. If sessions exceed clicks, the same arithmetic produces a negative gap and may reflect returning visits, attribution rules, or different filters.
What clicks and sessions actually count
A click is usually counted when a person interacts with a placement and the supplier receives that interaction. A session is a period of site activity that analytics records after the landing page and its measurement code load. One person can click twice and create one session if both visits occur inside the configured session window. Another person can create a click without a session by leaving before the page or measurement code loads.
Sessions can also exceed clicks in a campaign-labelled report. A person may return later, use a saved URL that still contains a campaign identifier, or receive campaign credit through the analytics attribution rules. That session is relevant to site activity, but it is not a second supplier click.
You can use the campaign reporting service page when you need a structured record of dates, labels, and evidence requests rather than a quick total copied from two dashboards.
The useful question is: “Which clicks did not produce a recognized landing-page session, and which sessions came from returns or attribution?” That question can be tested.
Work the sample data before judging delivery
The following figures are hypothetical. They show how to classify a gap, not a client result.
| Reconciliation line | Count | Effect on click-to-session comparison |
|---|---|---|
| Supplier clicks | 10,000 | Starting click total |
| Repeat clicks within the same visit | 900 | Clicks can be higher than sessions |
| Clicks abandoned before page load | 600 | Clicks can be higher than sessions |
| Consent or browser measurement blocked | 500 | Clicks can be higher than sessions |
| Page errors or timeout evidence | 300 | Clicks can be higher than sessions |
| Sessions attributed to returning visitors | 700 | Sessions can be higher than fresh clicks |
| Sessions attributed after a saved campaign URL | 200 | Sessions can be higher than fresh clicks |
| Remaining unresolved difference | 1,400 | Requires evidence |
In this simplified example, each click-side category is mutually exclusive. In a real review, a slow exit can also involve blocked measurement or an error, so overlapping observations must not be added twice.
The explained click-side reductions total 900 + 600 + 500 + 300 = 2,300. The explained session-side additions total 700 + 200 = 900. Starting from 10,000 clicks, the working expectation is 10,000 - 2,300 + 900 = 8,600 sessions. The observed 7,200 sessions leave 8,600 - 7,200 = 1,400 still unexplained in this hypothetical table.
It is better not to force every row to balance. A repeat-click count may be available only from a supplier report, while a blocked measurement estimate may be directional. You can mark each value as observed, estimated, or unknown. An unresolved number is a reason to request evidence, not a reason to label the campaign defective.
Align time, labels, and counting units
A one-day boundary can create a false discrepancy. A click near midnight may appear on one date in a supplier export and the next date in analytics. A supplier can also report the time of the click, while analytics reports the time when the session started. A late click that opens slowly can cross the boundary.
It helps to use the same inclusive start and exclusive end timestamps in both reports. A practical step is to convert both exports to one timezone before grouping. You may want to preserve the original timestamp in a separate column so another person can audit the conversion.
Then align names. spring_brand, Spring Brand, and a missing campaign parameter may represent one placement, three placements, or a tagging error. You can compare the final landing URL and campaign identifier, not just the display name. If a redirect removes a tracking parameter, the visit may still be real while its campaign label becomes direct, unknown, or another channel.
Finally, confirm the counting unit. “Clicks,” “unique clicks,” “engagements,” “landing-page views,” and “sessions” are not interchangeable. It helps to ask whether a report includes invalid or filtered interactions, duplicate interactions, test traffic, or clicks from a placement that opens a new tab.
Test the path from click to session
A clean reconciliation follows the visitor path in order. A practical step is to test the exact destination URL, including its campaign parameters, in a controlled browser session. You may want to record the first URL, every redirect destination, the final URL, response status, page load time, and whether the session-start event appears.
The practical checks are:
- Redirect retention: Confirm that the final URL preserves the campaign parameters needed for attribution. A server or script redirect can remove them.
- Landing-page coverage: Confirm that the measurement code is present on every destination, including mobile and regional variants.
- Page errors: Check server logs or monitoring for 4xx, 5xx, DNS, TLS, and timeout responses during the campaign window.
- Slow exits: Compare page-load timing with click timestamps. A person who leaves before measurement code runs can create a click without a session.
- Consent and blockers: Determine whether consent choices, disabled scripts, browser settings, or content blockers limit analytics collection. Do not convert a privacy-related measurement limit into a claim about visitor absence.
- Repeat behavior: Segment returning visitors and review the session timeout setting. Multiple clicks can map to one session, while a later return can create another session under the campaign attribution rules.
These tests explain collection behavior, but they do not prove that every unmeasured click reached the page. Keep supplier and site evidence separate.
Use the reconciliation worksheet
You can download the clicks versus sessions reconciliation worksheet and make a copy for each reporting period. The file contains fictional starter rows and blank rows for your own evidence. It has no personal data and does not call an external service.
For each row, enter the same campaign key in both reports, the aligned start and end timestamps, and one classification. It helps to use observed for a value directly visible in a report or log, estimated for a documented approximation, and unknown when evidence is missing. A practical step is to keep a short note that names the evidence source, such as “redirect test, final URL lost parameter.”
A compact schema is:
| Column | How to use it |
|---|---|
campaign_key |
Stable comparison label, not a changing display name |
supplier_clicks |
Click count for the exact aligned period |
analytics_sessions |
Session count for the same key and period |
repeat_clicks |
Duplicate or repeat interactions supported by evidence |
blocked_or_no_load |
Clicks with a documented measurement or load failure |
returning_sessions |
Sessions identified as returns or attribution carryover |
explained_clicks |
Repeat, no-load, and other documented click-side differences |
explained_sessions |
Documented sessions that do not represent fresh clicks |
unresolved_gap |
Remaining difference after the documented adjustments |
status |
observed, estimated, or unknown |
For each row, calculate unresolved_gap as:
(supplier_clicks - explained_clicks + explained_sessions) - analytics_sessions
It is better not to add sessions across page-path rows if the report uses page paths. One session can visit several paths, so row totals may double-count it. You may want to use a landing-page dimension when the question is which sessions started on the campaign destination.
Request evidence with a narrow question
A useful evidence request avoids blame and gives the recipient a testable task. This fictional template keeps the reporting period and definitions visible:
Subject: Evidence request for campaign click and session reconciliation
We are comparing the supplier export and site analytics for campaign
FV-EXAMPLE-01, from2026-05-01 00:00through2026-06-01 00:00UTC. The supplier report shows 10,000 clicks and analytics shows 7,200 sessions. Please confirm the click definition, timezone, duplicate or invalid-click treatment, and whether the total includes all destination variants.Please also provide hourly click totals, destination URL, redirect behavior, and any delivery or error logs for the same period. We will compare those records with page-load, consent, and session-start evidence. This request is to classify 2,800 clicks, not to assume that the difference proves missing delivery.
This format turns a general concern into a finite evidence list. You can ask for raw or grouped data only at a level that respects privacy and contract terms.
Separate explained, unresolved, and out of scope
Your final reconciliation should have three outcomes. Explained means the evidence supports a mechanism, such as two clicks mapping to one session or a parameter being removed by a redirect. Unresolved means the numbers still differ after aligned tests. Out of scope means the row needs another owner, such as a site outage, consent configuration, or supplier filtering rule.
It helps to keep the original exports unchanged, store the transformation steps, and record the version or export time of each report. If you revise a classification, add a note instead of overwriting the earlier explanation. This creates an audit trail and makes the next reporting period faster to review.
For a practical follow-up on parameter naming and destination checks, read 5 campaign tracking links you can copy and test. If your remaining issue concerns duplicated outcomes rather than visits, finding duplicate purchase events covers a separate event-counting problem.
The decision after reconciliation
A clicks vs sessions discrepancy is useful when it produces a precise next step. If the gap is explained by definitions, timing, repeat behavior, consent, or page loading, document that result and improve the next test. If a material portion remains unresolved, request the missing hourly, URL, and delivery evidence before drawing a conclusion.
The 10,000-click and 7,200-session example does not prove failure or success. It demonstrates a disciplined process: align the reports, test the path, classify what the evidence supports, and keep the remaining question visible.