Revenue Attribution
Pro FeatureConnect visitor behavior to actual revenue. See which pages, campaigns, and traffic sources drive sales by integrating with your payment provider.
Revenue Attribution is available on Pro, Scale, and Enterprise plans. Upgrade your plan to enable this feature.
Overview
Revenue attribution closes the loop between marketing and sales. Instead of guessing which activities drive revenue, see the actual numbers:
- Revenue by source: Which channels drive the most revenue
- Revenue by page: Which content leads to purchases
- Revenue by campaign: Which campaigns have positive ROI
- Customer journey: What path leads to conversion
Supported Integrations
Stripe
Native integration with Stripe for automatic revenue tracking.
Setup:
- Go to Settings → Integrations → Stripe
- Click Connect Stripe Account
- Authorize the connection
- Revenue data syncs automatically
Data captured:
- Transaction amounts
- Customer emails (for journey matching)
- Subscription events (new, renewal, churn)
- Payment status (succeeded, failed, refunded)
Lemon Squeezy
Native integration with Lemon Squeezy for indie and SaaS businesses.
Setup:
- Go to Settings -> Integrations -> Lemon Squeezy
- Enter your Lemon Squeezy API key
- Configure webhook signing secret
- Revenue data syncs automatically
Polar
Native integration with Polar for open-source and creator monetization.
Setup:
- Go to Settings -> Integrations -> Polar
- Enter your Polar API key
- Configure webhook signing secret
- Revenue data syncs automatically
PayPal
Native integration with PayPal Checkout for one-time payments. Sandbox + Live modes both supported.
Setup:
- Create a REST API app in PayPal Developer
- Create a webhook in PayPal pointing at
https://api.zenovay.com/webhooks/paypal/YOUR_WEBSITE_ID - Subscribe to
PAYMENT.CAPTURE.COMPLETEDandPAYMENT.CAPTURE.REFUNDED - In Zenovay, go to Settings → Revenue Attribution → PayPal and paste:
- Client ID, Client Secret (from your PayPal app)
- Webhook ID (from the webhook you just created)
- Pick Sandbox or Live to match your PayPal app
- Save — Zenovay validates the credentials by fetching an OAuth2 access token
For best attribution accuracy, set purchase_units[0].custom_id = visitor_id when creating the PayPal order on your server. See the PayPal integration guide for full instructions.
Subscription support is not yet available — only one-time captures are tracked in V1.
Paddle
Native integration with Paddle Billing (v2) for SaaS companies that use Paddle as merchant of record (handles EU VAT and global sales tax). Sandbox and Live modes both supported.
You only need ONE thing: a Paddle API key with Write permission. Zenovay creates the webhook destination on your behalf via Paddle's API, captures the signing secret automatically, and stores both encrypted. You never touch Paddle's Notifications dashboard.
Setup (2 minutes):
- In Paddle → Developer tools → Authentication → New API key → permission Write → copy the key (starts with
pdl_live_apikey_orpdl_sdbx_apikey_). - In Zenovay → Settings → Revenue Attribution → click the Paddle card → paste the key. Sandbox vs Live is auto-detected from the prefix.
- Click Connect. Done.
What happens under the hood:
- Zenovay validates the key against
/event-types. - Calls
POST /notification-settingson your behalf — URLhttps://api.zenovay.com/api/webhooks/paddle/<your-website-id>, subscribed totransaction.completed+ 3 subscription events. - Captures
endpoint_secret_keyfrom Paddle's response and stores it encrypted.
Why you never see a "signing secret" field on the happy path: Paddle deliberately hides the signing secret in its dashboard after creation (no "reveal" button, only "Rotate Secret"). Zenovay uses Paddle's API to fetch the secret directly — the only documented programmatic path. See the help center article for the full explanation.
Data captured:
- Transaction amounts (currencies including zero-decimal JPY/KRW handled correctly per ISO 4217)
- Customer emails when present on the event (for visitor → revenue matching)
- Subscription lifecycle: created, updated, canceled (maps to Zenovay's
subscription_status) - Payment status
Refund events (adjustment.*) and paused / past-due subscription branches are not yet rendered in V1 — Zenovay silently ignores them.
See the Paddle integration guide for troubleshooting and the (rarely needed) manual-setup fallback.
Custom Webhooks
For any other payment provider, use webhooks:
Webhook Endpoint:
POST https://api.zenovay.com/webhooks/revenue
Payload:
{
"api_key": "YOUR_API_KEY",
"website_id": "YOUR_WEBSITE_ID",
"event": "purchase",
"data": {
"transaction_id": "txn_123",
"amount": 99.00,
"currency": "USD",
"customer_email": "[email protected]",
"product_name": "Pro Plan",
"metadata": {
"plan": "annual",
"coupon": "LAUNCH20"
}
}
}
Revenue Dashboard
Overview Metrics
| Metric | Description |
|---|---|
| Total Revenue | Sum of all tracked transactions |
| Transactions | Number of successful purchases |
| Average Order Value | Revenue / Transactions |
| Conversion Rate | Visitors who purchased |
Revenue by Source
See which traffic sources generate the most revenue:
- Direct traffic
- Organic search
- Paid search
- Social media
- Referrals
- Email campaigns
- UTM-tagged campaigns
Revenue by Page
Identify high-converting content:
- Landing pages that lead to purchases
- Blog posts that influence buying decisions
- Pricing page performance
- Feature pages that convert
Attribution Models
Last Touch (Default)
Credits 100% of revenue to the last page/source before conversion.
Best for: Understanding final conversion triggers
First Touch
Credits 100% of revenue to the first page/source in the customer journey.
Best for: Understanding acquisition channels
Linear
Credits revenue equally across all touchpoints in the journey.
Best for: Understanding full journey contribution
Time Decay
Credits more revenue to touchpoints closer to conversion.
Best for: Balanced view with conversion focus
Customer Journey Tracking
Connect anonymous visitor sessions to paying customers:
How It Works
- Anonymous tracking: Visitor browses your site
- Identity reveal: Visitor submits email (signup, checkout, form)
- Purchase event: Payment received via webhook
- Journey connection: All prior sessions linked to customer
Journey View
For each customer, see:
- First visit date and source
- All pages viewed across sessions
- Time from first visit to purchase
- Total sessions before conversion
- Content that influenced the purchase
Setting Up Revenue Tracking
Step 1: Connect Payment Provider
See Supported Integrations above.
Step 2: Enable Identity Tracking
Ensure visitor identification is set up:
// When user provides email (form, signup, checkout)
window.zenovay('identify', 'user_123', {
email: '[email protected]'
});
Step 3: Verify Data Flow
- Make a test purchase
- Check Revenue dashboard
- Verify transaction appears with correct amount
- Confirm customer journey is linked
Revenue Alerts
Get notified about revenue events:
Daily Revenue Summary
{
"alert": "daily_revenue_summary",
"schedule": "0 9 * * *",
"channel": "email",
"recipients": ["[email protected]"]
}
Revenue Milestones
{
"alert": "revenue_milestone",
"threshold": 10000,
"period": "month",
"channel": "slack"
}
Failed Payments
{
"alert": "payment_failed",
"notify_immediately": true,
"channel": "email"
}
API Access
Access revenue data programmatically:
Revenue Summary
GET /api/websites/:websiteId/revenue/summary
?start_date=2025-01-01
&end_date=2025-12-31
Authorization: Bearer YOUR_API_KEY
Revenue by Source
GET /api/websites/:websiteId/revenue/by-source
?period=last_30_days
Authorization: Bearer YOUR_API_KEY
Customer Journeys
GET /api/websites/:websiteId/revenue/journeys
?limit=100
Authorization: Bearer YOUR_API_KEY
Privacy & Security
Data Handling
- Transaction data encrypted at rest
- Customer emails hashed for matching
- No credit card numbers stored
- PCI compliance not required (we never see card data)
Access Control
- Revenue data visible to Admin and Owner roles
- Viewer role sees aggregated data only
- API access requires appropriate scopes
Best Practices
- Connect payment provider first: Revenue data is foundational
- Implement identity tracking: Links anonymous to paying customers
- Tag campaigns consistently: Use UTM parameters for attribution
- Review attribution model: Choose model that fits your sales cycle
- Set up alerts: Know when revenue milestones are hit
Next Steps
- Custom Events - Track revenue-related actions
- Goals - Set up conversion goals
- B2B Intelligence - Connect company visits to revenue