Revenue Attribution
Pulsora stitches together anonymous browsing data with server-side revenue events to tell the full story of your customer journey—without cookies or PII.
Data Inputs
Attribution relies on two values:
- Visitor fingerprint — Stable identifier generated server-side by Pulsora.
- Session ID — Anonymous session identifier for the current visit.
Pageviews and events automatically include fingerprint + session data. When a purchase happens, you forward those values to your backend and include them in the revenue call.
First-Touch & Last-Touch
Pulsora records referrers, UTM parameters, landing pages, and timestamps for every session. When a revenue event arrives:
- First-touch attribution is determined from the oldest known session for that fingerprint.
- Last-touch attribution uses the session provided in the revenue payload.
Both are available in dashboards, letting you analyze long funnels and recent campaigns simultaneously.
Subscription Attribution
For recurring revenue, send the same customer_id with each renewal. Pulsora aggregates:
- Net new MRR (from
subscriptionandupgradeevents) - Contraction (from
downgrade) - Churn (from
churnandrefund)
If a customer renews from a new device, simply capture the new fingerprint and session; Pulsora still ties it back via customer_id.
Mapping Metadata
Metadata fields (plan, coupon, interval, etc.) flow into attribution dashboards. Use them to slice revenue by:
- Pricing plan
- Billing interval
- Acquisition channel
- Sales rep or pipeline
Example payload for a subscription upgrade:
await revenue.track({
visitor_fingerprint: 'fp_abc',
session_id: 'sess_xyz',
customer_id: 'cus_42',
amount: 199,
currency: 'USD',
transaction_id: 'inv_456',
payment_processor: 'stripe',
event_type: 'upgrade',
customer_subscription_id: 'sub_789',
mrr_impact: 120,
is_recurring: true,
metadata: {
previous_plan: 'starter',
new_plan: 'scale',
seats: 20,
},
});
Offline & Manual Deals
For offline invoices or manual upgrades, you can still leverage attribution:
- Find the customer’s fingerprint/session from previous events in your CRM.
- Call
revenue.track()with the best-known values. - Include
metadata.manual = trueso the dashboard can differentiate automated vs manual entries.
If you can’t supply a fingerprint, Pulsora falls back to customer-level attribution and still tracks the revenue, just without journey context.
Common Pitfalls
- Missing fingerprint/session — The SDK throws clear errors; make sure frontend metadata survives the checkout flow.
- Public tokens on revenue requests — Revenue events require
sec_tokens; double check your environment configuration. - Multiple concurrent sessions — Always send the session associated with the conversion (usually the checkout session or final touch).
Ready to implement? See end-to-end samples in the revenue examples →