Connect Stripe

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.

Setup

  1. Go to Settings > Integrations and open the Stripe section.
  2. Tick Enable Stripe integration.
  3. Paste your Stripe restricted API key (starts with rk_live_ or sk_live_).
  4. Click Save.

In your Stripe Dashboard, click Developers > API keys > Create restricted key and grant read access to:

  • Customers
  • Subscriptions
  • Invoices

The key is stored encrypted. Leave the field blank when re-saving to keep the existing key.

Linking Users to Stripe

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.

  1. Go to Settings > Import & Export > Invite/Import Users.
  2. Upload a CSV with at least email and stripe_customer_id. You can include name, company, groups, and any custom segment fields too.
  3. Review the preview screen. Existing users (matched by email, or by sso_uid if provided) are updated in place. Changed fields are highlighted.
  4. Confirm the import.

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.

How to export customers from Stripe

  1. Open your Stripe Customers list.
  2. (Optional) filter by status, plan, or date.
  3. Click Export in the top right.
  4. Choose Custom columns and include at minimum ID and Email.
  5. Click Export and download the CSV.
  6. Rename the id column to stripe_customer_id, keep email, and upload to ProductLift.

Option 2: Single Sign-On (SSO)

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.

Option 3: API

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.

Option 4: Manual edit

Open any user from the Users list and edit the Stripe Customer ID field directly.

What Data Is Synced

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

Automatic Syncing

Stripe data is automatically synced when:

  • A user's Stripe Customer ID is added or changed (immediate).
  • The weekly MRR sync runs (every Sunday).
  • The monthly LTV sync runs (1st of each month).

Manual Sync

To refresh a single user on demand:

  1. Go to Users and click on a user.
  2. Click the Sync from Stripe button.
  3. The latest data is fetched from Stripe.

Using Stripe Data

Filtering Users

In the Users list you can filter by:

  • MRR range (min/max)
  • LTV range (min/max)
  • Plan type
  • Customer status

Searching by Stripe ID

You can search for users by entering their Stripe Customer ID (e.g., cus_abc123) in the search box.

Displaying Columns

Enable Stripe-related columns in the Users list:

  1. Click the Columns dropdown.
  2. Enable: MRR, LTV, Plan, Customer Status, Stripe Customer ID.

Revenue-weighted prioritization

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.

Troubleshooting

Data Not Syncing

  • Verify your Stripe API key is correct in Settings > Integrations.
  • Check that the Stripe Customer ID exists in your Stripe account (open the customer in Stripe).
  • The user detail page shows the last sync time and any sync error returned by Stripe.

MRR Shows $0

  • The customer may not have an active subscription.
  • The subscription may be on a free plan ($0/month).
  • One-off payments (no subscription) only contribute to LTV, not MRR.
  • Check the customer's subscriptions in your Stripe Dashboard.

"Customer not found in Stripe"

The stripe_customer_id on the user does not match a customer in the Stripe account whose API key you provided. Common causes:

  • Wrong Stripe account (test key vs. live key, or a different connected account).
  • The customer was deleted in Stripe.
  • Typo in the imported stripe_customer_id column.

Guest customers (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.