Where the thread usually snaps
Capture gets all the attention, so it is usually the part that works. The break happens later, quietly, at one of two handoffs: when a lead is converted into a customer, and when a customer gets a job. If either step creates a brand-new record and copies over only name, phone and address, the origin is gone.
Nobody notices for months, because the lead reports still look right. It surfaces when someone tries to answer 'what did the spring campaign actually sell' and discovers that the sold jobs have no path back to any lead at all.
One identity thread, three stages
The fix is structural rather than procedural. A single durable identifier is minted when a contact first enters the system and is carried, unchanged, onto the customer record and every job that follows. Conversion becomes a change of stage on a continuing thread, not the birth of a new entity.
With that in place, tracing revenue is a lookup rather than a reconciliation exercise: a job knows its customer, the customer knows the original lead, and the lead knows what it arrived carrying.
What must travel through each handoff
- The identity number — unchanged, never regenerated, never reused for a different person.
- The captured origin — channel source plus any campaign parameters and click identifiers.
- The capture timestamp — needed to decide whether an outcome falls inside an attribution window.
- The capture path — form, bot, call, import or manual entry, so confidence can be judged later.
Honest handling of records with no origin
Some jobs genuinely have no advertising origin: a walk-in, a repeat customer from before the system existed, a commercial account added by hand. These should carry an explicit unattributed label all the way through.
The temptation is to backfill them with the most plausible campaign so the report totals feel complete. That single habit is what turns an attribution system into a story-telling device — and it is invisible afterwards, because a guessed value looks exactly like a captured one.