How to get there: Go to Settings in the sidebar → Integrations tab (under Other) → Stripe section.
Automatically sync customer data from Stripe to enrich user profiles with MRR, LTV, plan information, and subscription status. Once configured, you can filter, sort, and prioritize feedback by paying customers and revenue.
rk_live_ or sk_live_).In your Stripe Dashboard, click Developers > API keys > Create restricted key and grant read access to:
CustomersSubscriptionsInvoicesThe key is stored encrypted. Leave the field blank when re-saving to keep the existing key.
Saving the API key alone does not sync anything. Each ProductLift user has to be linked to their Stripe customer by setting a stripe_customer_id (e.g. cus_abc123). There are four ways to do this.
This is the easiest way to link many users at once, and it works for both new and existing users.
email and stripe_customer_id. You can include name, company, groups, and any custom segment fields too.email, or by sso_uid if provided) are updated in place. Changed fields are highlighted.Example CSV:
email,stripe_customer_id
john@example.com,cus_abc123
jane@example.com,cus_def456
As soon as the stripe_customer_id is saved, the first MRR + LTV sync runs automatically in the background.
id column to stripe_customer_id, keep email, and upload to ProductLift.If you use SSO into ProductLift, add the Stripe customer ID to your JWT payload:
{
"email": "john@example.com",
"stripe_customer_id": "cus_abc123"
}
The Stripe data syncs automatically the next time the user logs in.
When creating or updating users via the ProductLift API, include stripe_customer_id:
{
"email": "john@example.com",
"stripe_customer_id": "cus_abc123"
}
Use POST /api/users to create or PATCH /api/users/{id} to update. Sync runs automatically when the field is added or changed.
Open any user from the Users list and edit the Stripe Customer ID field directly.
Once a user is linked, the following fields are fetched from Stripe:
| Field | Description |
|---|---|
| MRR | Monthly Recurring Revenue from active subscriptions (yearly plans are normalized to monthly) |
| LTV | Lifetime Value (total amount paid across all invoices) |
| Plan | Name of the current subscription product(s) |
| Status | active, trial, or churned (mapped from Stripe statuses) |
| Signup Date | When the customer was created in Stripe |
Stripe data is automatically synced when:
To refresh a single user on demand:
In the Users list you can filter by:
You can search for users by entering their Stripe Customer ID (e.g., cus_abc123) in the search box.
Enable Stripe-related columns in the Users list:
Once MRR is synced, posts inherit the MRR of their voters and followers. You can sort and prioritize feedback by total MRR behind a post, so paying customers' requests rise to the top.
The stripe_customer_id on the user does not match a customer in the Stripe account whose API key you provided. Common causes:
stripe_customer_id column.gcus_ prefix)Stripe creates guest customers automatically for one-off Payment Links or Checkout sessions where the buyer doesn't have a saved customer record. Their IDs start with gcus_ instead of cus_, and Stripe groups them by card under one guest identity.
Guest customers show up in your Stripe Dashboard and in CSV exports, but Stripe's public API does not let you retrieve them with /v1/customers/{id}. ProductLift detects the gcus_ prefix and skips the live re-sync for these rows. The MRR/LTV you imported from the CSV is kept as-is and used for the post totals.
You do not need to do anything for guests. They will not appear as sync errors and they will not be re-queried against Stripe.