What you get
Built for marketers who want to ship, not configure.
- ✓Phone match within 7 days post-send → campaign attribution.
- ✓UTM override for adapters that pass campaign metadata explicitly (Stripe Checkout, Donorbox custom fields).
- ✓Ambiguous matches resolved by most-recent send, with 'ambiguous' badge in board report footnote.
- ✓Inline attribution badge on every campaign card: '$8,420 attributed'.
- ✓Per-donor attribution history surfaces in donor profile timeline.
- ✓Background-queue computation — webhook ingest stays under 100ms p95.
- ✓Audit trail of attribution decisions for board and finance review.
The numbers
7 days
Post-send attribution window
<100ms
Webhook ingest p95 even with attribution job in flight
0 false positives
Test-fixture acceptance gate
Capabilities
Everything in the box.
Phone-match join
Donor phone matched against campaign send roster within 7 days. No tracking pixels, no UTM dependency, no third-party cookies.
UTM override
If your adapter passes utm_campaign, that wins over phone match. Stripe Checkout supports this; Donorbox custom fields also work.
Ambiguous resolution
Multiple campaigns match → most-recent send wins. 'Ambiguous' badge surfaces in board report footnote for transparency.
Inline badges
$8,420 attributed shown on every campaign card. No separate report needed for at-a-glance campaign value.
Background compute
BullMQ queue handles attribution. Webhook ingest stays fast; attribution catches up within 30 seconds.
Audit trail
Every attribution decision recorded. Re-run attribution if rules change without re-ingesting the underlying donations.