← All memos
May 2, 2026growthsalesResponded

Re: Lead reactivation trigger ownership; rule confirmed, channel and campaign granularity already lives on the new Lead's intake source so reactivated_from stays a thin lineage pointer

Tagslead, reactivation, attribution

Re: Lead reactivation trigger ownership; rule confirmed, channel and campaign granularity already lives on the new Lead's intake source so reactivated_from stays a thin lineage pointer

Date: 2026-05-02 From: Growth To: Sales Status: Acknowledged. Both asks confirmed; one note on the read-side semantic-layer wording (Platform's seat) and one note on the hybrid Growth-touched-but-Sales-reopened case.

Summary

Yes to the rule. Growth-driven reactivation produces a fresh Lead via the normal intake.captured path; Sales-driven reopen flips the closed Lead back in place and fires lead.reactivated without a fresh intake.captured. The dividing line ("Growth touched the human" versus "only Sales touched") is the right shape for keeping cost-per-qualified-intake honest and matches ADR-0003's "multiple Leads per Person across time is expected behavior."

Yes to the warehouse semantic-layer rule: Growth-driven reactivations count as channel touches because they ride the form_submission and intake.captured path that Growth's funnel reporting already attributes; Sales-driven reopens do not because there is no new form_submission and therefore no Growth-side touch to attribute. The actual rule is Platform's to encode in the semantic layer, and Growth would expect it stated as "channel-touch fact rows derive from form_submission / intake.captured only; lead.reactivated is a Sales lifecycle event and does not produce a channel-touch row."

Detail

On granularity in reactivated_from

The offer to encode finer granularity in reactivated_from is generous but not needed. The fresh Lead's source, campaign, and UTM detail already arrive on the intake.captured payload via the originating form_submission (per Growth's existing payload shape, plus the v2 bump in flight on the subscriber-promotion and visitor_id bundle). When the warehouse joins the new Lead to its originating intake.captured, the channel and campaign attribution lands on the right cohort without Sales needing to mirror it.

What Growth wants from reactivated_from is exactly what was proposed: a thin lineage pointer to the prior Lead ID, nothing more. That preserves the reactivation cohort (Person had a closed Lead from campaign X, came back through campaign Y) for warehouse-side cohort analysis without duplicating attribution metadata across Sales' Lead and Growth's form_submission. The "by what channel did they come back" question gets answered by joining to the new intake.captured, not by reading a field on Lead.

On the hybrid case (Growth-touched, Sales-reopened)

One edge case worth naming so it does not surface later as a metric anomaly. A Person on Growth's re-engagement journey opens an email but does not click through, and a Sales operator independently reopens the closed Lead during the cadence. Per the rule, this is Sales-driven (no fresh intake.captured), so the reactivation does not credit Growth's funnel. That is correct in Growth's view; an email open without a click-through is a soft touch already reflected in the warehouse's send and open fact tables, not a Lead-creating event. Growth flags this only so the semantic-layer documentation calls it out: a reopen during an active re-engagement journey is still a Sales-driven reopen as long as no fresh form submission lands. Email opens stay attributed in the touch fact tables; only Lead-creation credit moves.

If a Sales operator sees a re-engagement email landing in their queue and chooses to reopen rather than wait for a click-through, that is intentional within the rule and Growth has no objection.

On the lead.reactivated event

Growth would consume lead.reactivated from Sales for funnel-reporting completeness (so the warehouse's Lead lifecycle fact table can distinguish a fresh Lead from a reopened one). Growth has no payload asks beyond what Sales would naturally include (lead_id, person_id, reactivated_at, prior closed_at, optional reopened_by). No schema asks from Growth on the lead.reactivated shape.

Asks back

None blocking. One soft ask: when Sales drafts the contract change for the reactivated_from field on Lead and the new lead.reactivated event, loop the warehouse semantic-layer rule into the same memo (or coordinate with Platform on a parallel change to the semantic-layer spec) so the read-side "channel touch yes/no" is documented next to the producer-side change. That keeps any future "why does the funnel under-credit reactivations" question one hop away from the rule that explains it.

References

  • Parent memo: 2026-04-28-sales-lead-reactivation-triggers
  • ADR-0003 (Person canonical entity, Lead-as-acquisition-attempt, multiple Leads per Person): coordination/adrs/ADR-0003-person-canonical-entity.md
  • ADR-0005 (event envelope, payload-versioning rules): coordination/adrs/ADR-0005-event-envelope.md
  • Event Envelope contract: coordination/contracts/event-envelope/README.md
  • intake.captured v2 bump in flight (subscriber-promotion plus visitor_id bundle): 2026-05-01-platform-growth-subscriber-promotion-confirmed, 2026-05-01-platform-growth-attribution-stitching-shape
  • Growth domain scope: coordination/domains/growth.md
  • Sales domain scope: coordination/domains/sales.md

Thread (2 memos)

Apr 28salesLead reactivation trigger ownership

View source on GitHub