An analytics event can record a submitted form, connected call or booking action. It cannot decide that the enquiry fits the service, territory, budget, timing or commercial rules of the business. A lead becomes qualified only when the team authorised to judge those conditions returns a disposition against the same business record. Until that happens, marketing has an event and an unknown outcome.
If nobody who handled the enquiry has classified it, the SEO report has not earned the word qualified.
The missing component is rarely another attribution dashboard. It is a reliable handback from the people who learned what the enquiry actually was.
TL;DR
- A contact event answers one question: did the system record the action it was configured to record? Commercial judgement is separate.
- Agree a small disposition dictionary before exporting anything, and give each accepted contact one opaque record identifier.
- Require a receipt before requesting a disposition, put the return on a clock, and report every denominator in the order it occurred.
- Stop the join where the evidence stops. An exact contact-to-disposition join is not a query-to-lead join.
Keep contact and commercial judgement separate
A raw contact event answers one narrow question: did the implemented system record the action it was configured to record? That action may be a form accepted by the server, a completed booking request, a connected call through a tracked route, a request for information or a message created inside an approved contact system.
It does not automatically establish that the contact was genuine, reachable, new or commercially suitable. A form may be spam. A supplier may call the tracked number. An existing customer may use the sales form for support. A booking can fall outside the service area. A good prospect can be lost because nobody responds.
Do not fix that uncertainty by teaching marketing automation to guess harder. Preserve the contact state. Ask the accountable sales or intake function to return the observable business state. In this article, “sales” means whoever is authorised to assess fit. That could be a sales team, receptionist, partner, practice intake function or operations queue. The job title matters less than the decision authority.
Agree the language before exporting the data
The handback breaks when marketing and sales use the same word for different things. One person’s lead is a form event. Another’s is a reachable prospect. A third uses lead only after budget and timing have been established. Write a small shared disposition dictionary before building the report.
| Status | Minimum meaning | Useful controlled detail |
|---|---|---|
received | A business record was created | Contact route and receipt time |
invalid | Not a genuine new-business enquiry | Spam, test, supplier, recruitment or malformed contact |
duplicate | The commercial enquiry already exists | Earlier lead-record reference |
uncontactable | Agreed contact attempts produced no assessment | Attempt count and last attempt date |
disqualified | Genuine contact outside an agreed fit rule | Service, territory, customer type, timing or another controlled reason |
qualified | Meets the documented opportunity criteria | Material fit fields confirmed |
working | An owner is actively progressing it | Owner and next-action date |
closed_won | The defined commercial conversion occurred | Approved outcome date or band |
closed_lost | The opportunity did not convert | Controlled loss reason |
unknown | Evidence is missing or conflicting | Missing join, overdue status or unresolved conflict |
Keep the statuses few enough to apply consistently. Put detail in controlled reason codes rather than creating fifty nearly identical stages. Google Analytics itself separates recommended lead events such as generate_lead, qualify_lead, disqualify_lead and working_lead (Google Analytics recommended events). Those names do not make the judgement. They record states the business has defined and implemented.
Give each accepted contact one controlled record
The handback needs a join that survives forms, calls, booking tools and CRM updates. Create an opaque, unique lead-record identifier when the business intake record is created. Use it to connect receipt, routing and later disposition inside the systems the business controls. The identifier should not be an email address, phone number, name or other readable personal detail. Decide where it may travel, who can access it, why it is required and how long it is retained.
The ICO’s data-protection guidance states that personal data should be adequate, relevant and limited to what is necessary, and retained no longer than required for its purpose (ICO: data-protection principles). The correct implementation depends on the organisation’s role and circumstances; this is measurement design, not legal advice.
I use the identifier for one defensible purpose: proving that the returned disposition belongs to the same business record as the accepted contact. It does not prove that organic search caused the enquiry.
Write a Sales Disposition Return Contract
I call the handback specification the Sales Disposition Return Contract. It is less exciting than an attribution model and considerably more useful.
| Field | Owner | Boundary |
|---|---|---|
lead_record_id | Intake system | Unique, opaque, stable and never recycled |
received_at | Intake system | Timestamp and timezone retained |
contact_route | Intake system | Form, phone, booking, chat or approved route |
route_record | Marketing or telephony | Event, call or booking reference where a permitted join exists |
landing_context | Marketing | Landing URL or controlled page group; no invented query |
source_observation | Marketing | Recorded source evidence with collection rule and confidence |
assigned_owner | Sales or operations | Person or queue responsible for returning status |
disposition | Sales or operations | One approved dictionary value |
reason_code | Sales or operations | Observable fit or failure reason, not an SEO diagnosis |
disposition_at | Sales or operations | Timestamp for the returned judgement |
next_state | Sales or operations | Working, closed, nurture or another approved route |
join_status | Data owner | Exact, partial, conflicting, missing or prohibited |
review_owner | Business owner | Person resolving overdue or contradictory records |
Sales should not be asked to decide whether SEO deserves credit. Ask whether the enquiry was genuine, whether it fitted the agreed rules and what happened next. Marketing can interpret permitted acquisition evidence after the commercial state is returned. That keeps channel politics out of call notes. A prospect mentioning Google is not a reliable instruction to select “organic”.
Require a receipt before requesting a disposition
The sequence begins only after the contact route can prove that the business accepted an enquiry record. For a form, that means confirmed acceptance rather than a Submit-button click. For a call, it means an intake record rather than a telephone-link tap. For a booking, it means the confirmed state the organisation has defined rather than an opened calendar.
Form delivery, phone routing, duplicate suppression and fallback handling belong to their implementation owners. The prerequisite here is one permitted receipt joined to one business record. If the route cannot supply that join, mark the limitation. Do not manufacture identity from a timestamp window because two events happened within five minutes of each other.
I call this the receipt-before-quality rule. Qualification analysis cannot repair an unproven intake event.
Put the return on a clock the business can keep
A disposition returned three months later may be accurate and still useless for routine diagnosis. Set a service level that matches the sales cycle and staffing reality. Fast local enquiries may receive an initial valid, invalid, duplicate, uncontactable or fit decision within a few working days. Complex B2B opportunities may need an interim working status. The clock is an operating choice, not an industry benchmark. Track the handback itself:
Do not remove overdue records from the denominator to improve the qualified rate. Missing sales feedback is a measurement result. Show it. A live unresolved queue is often more useful than a polished monthly slide. It identifies the exact records preventing a defensible conclusion.
Reporting “SEO leads” without a disposition coming back from sales? We design the dictionary, the join and the return contract with both teams in the room.
Report the denominators in the order they occurred
Do not collapse every stage into “SEO leads”. Retain the sequence:
- contact actions recorded;
- business records created;
- records with an exact or permitted source join;
- dispositions due;
- dispositions returned;
- genuine enquiries;
- qualified opportunities;
- working opportunities;
- closed outcomes.
Then name the denominator for every rate.
Disposition coverage = returned dispositions / dispositions due
Qualified share of assessed enquiries = qualified / returned assessable dispositions
Qualified share of created records = qualified / business records createdThose percentages answer different questions. The first measures the handback process. The second describes fit among assessed records. The third preserves invalid, duplicate, uncontactable and unknown records in the commercial yield.
My rule is that a rate without a named denominator is not ready for a decision. “SEO lead quality improved” is meaningless until the audience can see which records were eligible, assessed and excluded.
Stop the join where the evidence stops
An exact contact-to-disposition join does not create an exact search-query join. Search Console query data is aggregated and privacy-limited. Do not attach a query to an individual CRM record because its landing page ranked for that term during the same week. Keep evidence levels separate:
Five evidence levels, strongest first
- Exact contact-to-dispositionOne controlled identifier connects receipt to returned status.
- Recorded acquisition contextImplemented analytics or call routing supplies source evidence under stated rules.
- Page-group associationCohorts can be compared by controlled landing-page groups.
- Search-demand contextSearch Console shows query and page patterns, not a named lead's complete history.
- UnknownConsent, identifier, route or handback evidence is insufficient.
Google’s Measurement Protocol can supplement normal tagging with server-side and offline interactions, but it still depends on correct identifiers, implementation and privacy handling (Google Analytics Measurement Protocol). An accepted request does not prove that the CRM status or channel interpretation is correct.
Let the returned reason choose the system to inspect
The disposition is valuable because it can route the next investigation. Repeated wrong-service contacts may expose unclear copy, poor routing or demand the company does not serve. Wrong-area contacts may indicate weak territory language or paid targeting. Duplicates may belong to CRM logic. Uncontactable records may expose response delay, invalid details or low-intent forms. A high unknown rate belongs to the handback process before it belongs to SEO.
Do not assume the landing page caused the status. Compare the page, offer, route, response process and relevant acquisition settings. Change the smallest system that owns the demonstrated failure. The point is not to make sales produce marketing data. It is to return one observable commercial judgement so marketing stops treating every recorded event as the same opportunity.
Make the report earn the word qualified
Choose one contact route and follow a controlled test from successful receipt to record creation, assigned owner, returned disposition and reporting. Confirm that:
Then inspect the unresolved queue before calculating a lead-quality rate. If the handback is incomplete, report the incompleteness.
Marketing can own the event. Sales can own the fit judgement. The data owner can govern the join. Nobody gets to turn one stage into another because the dashboard needs a cleaner story.
Good to know
FAQs
A disposition returned by the team authorised to judge fit, recorded against the same business record as the accepted contact. An analytics event only proves the system recorded an action. Until sales or intake classifies the enquiry, marketing has an event and an unknown outcome.
No. Create an opaque, unique lead-record identifier when the intake record is created and use that for the join. ICO guidance says personal data should be limited to what is necessary and retained no longer than needed; the identifier exists only to prove the disposition belongs to the same record.
No. Search Console query data is aggregated and privacy-limited. A landing page ranking for a term in the same week does not attach that query to a CRM record. Keep search-demand context as its own evidence level, separate from the exact contact-to-disposition join.
With a named denominator every time. Disposition coverage is returned over due; qualified share of assessed enquiries is qualified over returned assessable dispositions; qualified share of created records keeps invalid, duplicate, uncontactable and unknown records in the yield. Never drop overdue records to improve the rate.
Next step
Want your SEO report to earn the word qualified?
We build the disposition dictionary, the opaque join and the Sales Disposition Return Contract, then report every denominator in order so nobody can turn an event into an opportunity.
