Creem analytics: revenue by channel
ProductLense connects to Creem and attributes every payment, refund and renewal to the channel, campaign and landing page that first brought the customer. Creem customers, subscriptions and transactions, with refunds and disputes.
Setup steps
- In Creem, open Developers → API keys and create a key.
- In ProductLense, open Settings → Billing connections → Creem and paste the key.
- In Creem → Developers → Webhooks, add a webhook endpoint with the URL ProductLense shows after you save the connection (pattern https://api.productlense.app/api/webhooks/{provider}/{connection_id}).
- Paste the webhook signing secret into ProductLense.
- ProductLense backfills 12 months of transactions.
Credentials and permissions
| Field | Secret | Where to find it |
|---|---|---|
| API key | Yes, encrypted at rest | A creem_... key from Developers → API keys. |
| Webhook secret | Yes, encrypted at rest | The signing secret shown on the webhook endpoint you point at ProductLense. |
Webhook
URL pattern, shown with your connection id after you save:
https://api.productlense.app/api/webhooks/creem/{connection_id}Events: checkout.completed, subscription.paid, subscription.active, subscription.canceled, subscription.expired, refund.created, dispute.created
Verification: creem-signature header: HMAC-SHA256 of the body.
What ProductLense reads
- Customers
- Customers with email.
- Subscriptions
- Subscriptions with status.
- Payments
- Transactions and completed checkouts.
- Refunds
- Refunded amounts, refunds and disputes.
- Fees
- Not itemised by the Creem API, so recorded as 0.
What ProductLense never touches
- Never creates, changes, refunds or cancels anything: read-only API calls and incoming webhooks only.
- Never moves money, issues payouts, or reads bank account details.
- Never sees full card numbers; providers do not expose them.
- Never sends your customer data to the AI model: Ask and the daily insight see aggregates only.
Match payments to your users
Pass metadata.pl_user_id at checkout to match by id rather than email.
await fetch('https://api.creem.io/v1/checkouts', {
method: 'POST',
headers: { 'x-api-key': process.env.CREEM_API_KEY ?? '', 'Content-Type': 'application/json' },
body: JSON.stringify({ product_id: PRODUCT_ID, metadata: { pl_user_id: user.id } }),
});Creem and ProductLense: questions
- Does ProductLense work with Creem?
- Yes. ProductLense connects to Creem with aPI key, webhook secret, backfills 12 months of history, and stays current through signed webhooks plus a nightly reconcile. One connection is included on Starter; Growth and Scale allow every provider at once on the same site.
- What data does ProductLense read from Creem?
- Customers, subscriptions, payments, refunds and fees, read-only. Payments: transactions and completed checkouts. Refunds: refunded amounts, refunds and disputes. Fees: not itemised by the Creem API, so recorded as 0.
- Can ProductLense change anything in my Creem account?
- No. ProductLense only makes read calls and receives webhooks. It never creates, changes, refunds or cancels anything, never moves money, and never sees card numbers. Credentials are encrypted at rest, and the AI features only ever see aggregated numbers, never your customers’ data.
- How does ProductLense match Creem payments to visitors?
- Pass metadata.pl_user_id at checkout to match by id rather than email. Your site calls identify with the same user id after signup, and ProductLense follows the payment to that visitor’s first touch: source, medium, campaign and landing page.
- Are Creem fees subtracted from revenue?
- Not itemised by the Creem API, so recorded as 0. Net revenue is the charge minus the fee; refunds subtract the refunded amount and its fee. Profit per channel then subtracts ad spend.
Connect Creem and see revenue by channel today.
Add the script, connect Stripe or any of 14 other billing providers, and see revenue by channel the same day.