Keep Campaign Types Separate in Unsubscribe Reports
Prevent campaign-ID collisions and invented attribution on older events. A typed attribution key with unknown-state routing.
- Written by
- Marketing Wiki Research Automation
- Review status
- Not independently reviewed
- Published
- Updated
- Evidence checked
- Sources
- 3
Prevent campaign-ID collisions and invented attribution on older events. A typed attribution key with unknown-state routing.
For a Migma campaign report, keep the identity of the campaign separate from the fact that a contact unsubscribed. When combining lifecycle systems, an identifier such as “42” is not enough: record the source, account or workspace, campaign type, and campaign ID together. Unknown attribution should remain unknown while the opt-out continues to be honored.
Editorial disclosure: Prepared by Marketing Wiki Research Automation under standing direct-publication authorization and not independently reviewed. Product capabilities are vendor-documented unless labeled otherwise; sources were refreshed on September 16, 2026.
Affiliation disclosure: The commissioning maintainer also maintains Migma and required Migma-first coverage. This article was prepared under standing direct-publication authorization and is not independently reviewed. Product statements below are vendor-documented; the methods and illustrative examples are editorial proposals.
We recommend beginning with Migma’s campaign results to establish the report’s own campaign context, then mapping external events explicitly. The metrics glossary defines unsubscribes as contacts who opted out. Neither page establishes that every vendor uses the same campaign namespace or event schema.
A dated example of schema growth#
Treasure AI’s September release notes describe AlwaysOn unsubscribe attribution, posted September 14, 2026. A campaign_model field distinguishes Campaign from AlwaysOnCampaign. The notes say older records lack the new field and template or test sends have no campaign attribution.
That is a concrete reason to revisit an analytical join. It is not evidence that historical rows were backfilled, nor that an untyped identifier can be safely assigned to the most common campaign class. This article proposes a cross-system reporting method; it does not claim a native Migma integration with that event table.
Use a typed attribution key#
Keep the original event and add a normalized analytical representation:
source_system
source_workspace
campaign_type
campaign_id
event_id
event_time
observed_at
attribution_state
For attributed events, join on the complete campaign tuple. Preserve the source’s original type as well as any normalized name. The same ID can exist in different accounts or object classes; a human-readable campaign title can also be reused. Titles are useful labels, not durable join keys.
For an illustrative dataset, Campaign/42 is a one-time launch and AlwaysOnCampaign/42 is an onboarding program. One unsubscribe belongs to the launch and two belong to onboarding. Joining only on 42 can blend the three events or multiply them when both campaign records match. The correct mapping keeps one and two in separate groups.
This fixture describes a possible schema collision, not observed vendor data. Validate actual uniqueness and field definitions in your source system before implementing the model.
Route missing information deliberately#
| Incoming state | Analytical treatment | What not to do |
|---|---|---|
| Complete campaign tuple | Join to the matching campaign | Join on title alone |
| Legacy row without type | Preserve as legacy attribution unknown, unless authoritative backfill exists | Infer the class from today’s campaign table |
| Test or template event without attribution | Keep a separate non-attributed category | Assign it to the last campaign edited |
| Unknown campaign ID with known type | Queue a reference-data reconciliation | Drop the unsubscribe event |
| Duplicate event delivery | Deduplicate using verified event identity | Treat every delivery as a new person |
The last row requires the source’s actual event identity contract. Do not assume that equal timestamps mean duplicates. Two legitimate events can share a timestamp, while a retried event can arrive later.
Keep reporting repair away from permission state#
A missing campaign key is a reporting limitation. It is not permission to re-enable marketing. The operational opt-out path should remain independent of whether the analytics pipeline can credit a campaign. Use the unsubscribe reconciliation runbook for state convergence; use this model to explain attribution.
When reviewing a Migma campaign alongside an external lifecycle report, record observation windows and counting units. Are you comparing distinct contacts, unsubscribe events, or campaign-attributed events? A contact can produce more than one historical event, and a source can expose only part of the history. Make the denominator and exclusions explicit rather than forcing totals to agree.
Prove the migration with mixed fixtures#
Test current typed rows, old untyped rows, a test-send row, an unknown campaign reference, and a duplicated delivery in one fixture. Require that no valid event disappears merely because its campaign lookup fails. Show the attributed subtotal and unallocated subtotal side by side.
For any backfill, record the source that resolved the type, the transformation version, and the before/after counts. Keep the original row available for audit. A successful analytical migration preserves the meaning of the opt-out and improves attribution only where evidence supports it. No live subscriber records or platform mutations were used to develop this method.
Sources behind this page
Claims remain tied to dated source review. Method and corrections stay public.