Import and export data

How to get there: Go to Settings in the sidebar → Import & Export

Import Posts

You can import posts from a CSV file. This is useful when migrating from another feedback tool or loading historical data.

  1. Go to Import & Export in settings
  2. Click Import Posts
  3. Upload a CSV file with your posts
  4. Map the columns to the correct fields
  5. Review and confirm the import

Import Users

How to get there: Go to Users & companies in the sidebar → Import & Update Users (or use the global search for "Import Users").

Bulk invite or import users to your portal from a CSV or Excel file. The same flow handles both new users and updates to existing users.

  1. Upload a CSV or Excel file
  2. Review the column mapping screen, where AI suggests how each of your columns maps to a ProductLift field. Adjust as needed.
  3. Review the preview screen, which highlights which rows will be created, updated, unchanged, or skipped
  4. Confirm the import

How matching works

Each row is matched to an existing user by sso_uid first (if provided), then by email. If no match is found, a new user is created. If a match is found, the existing user is updated and the changed fields are highlighted in the preview.

AI column mapping

You don't need to rename columns before uploading. After upload, AI suggests a mapping from each of your CSV columns to a ProductLift field. You can override any suggestion in the mapping screen, and you can mark any column as (ignore) to drop it.

Standard fields you can map to: Email, SSO UID, Name, Company, MRR, LTV, Plan, Signup date, Customer Status, Stripe Customer ID, Groups. Either Email or SSO UID is required so we can identify the user.

The dropdown also lists any custom fields already on your users (same names you see in the User Data section of the user profile), so you can extend an existing one. Pick + Add custom field… to create a new one on the fly. Custom fields are stored as segment properties you can filter by. Columns left on (ignore) are dropped.

Billing names are handled carefully

When the value in the name column ends in a company suffix (SRL, Inc, LLC, GmbH, Ltd, Corp, ...) we treat it as the company, not as a person's name:

  • The value is moved to the company field (unless the row already has an explicit company column with a value, which takes priority).
  • For existing users we never overwrite their public-facing display name from a billing-name column. This protects the name shown on posts and votes.

This applies to any import, not only Stripe.

Duplicate emails

When the same email appears on multiple rows and an ltv or mrr column is mapped, we keep only the row with the highest value and merge the duplicates. The preview shows how many rows were merged.

Linking to Stripe

Include a stripe_customer_id column (e.g. cus_abc123) to link users to their Stripe customer. As soon as the ID is saved, MRR, LTV, plan, and status sync automatically. See the Stripe integration guide for how to export the IDs from your Stripe dashboard.

Importing a Stripe customer export

You can drop a Stripe customer export CSV (Stripe Dashboard → Customers → Export) straight in. ProductLift detects the Stripe format and pre-fills the mapping for these columns:

Stripe column ProductLift field
id stripe_customer_id
Email email
Name name
Total Spend ltv
Created (UTC) signup_date

European-format amounts (e.g. 177,87) are handled. After import, connect Stripe in Settings → Integrations so MRR, plan, and status stay fresh automatically.

Export Posts

Download all your posts as a CSV file, including titles, descriptions, votes, statuses, and categories.

Export Users

Download all your users as a CSV file, including names, emails, roles, and registration dates.

Advanced Import (API)

For more complex import scenarios (comments, individual votes, custom fields), use the ProductLift API.

Import or update companies

How to get there: Users & companies in the sidebar → the ··· menu top-right → Import companies (CSV).

One row per company. Standard fields you can map: Name, Domain(s), External ID, HubSpot ID, Stripe customer ID, Salesforce ID, Intercom ID, Pipedrive ID, Zendesk ID, MRR or ARR (pick which one your file uses on the upload step), LTV, Plan, Status, Customer since, Country. Any other column becomes a custom field on the company, which you can filter and sort on in the Companies view.

How rows are matched to existing companies, in this order: the ProductLift key (from an export), a third-party ID (HubSpot, Salesforce, ...), External ID, then domain, then name (case-insensitive). No match creates a new company. A row whose third-party ID already belongs to a different company is skipped with a reason in the preview, so two companies can never end up with the same ID.

  • Only the columns you map are written. An empty cell leaves the current value alone, so a sheet from finance with only MRR updates just MRR.
  • A cell with - or null clears a value.
  • Domains can be comma-separated. New users with an email on one of those domains are linked to the company automatically.
  • You preview every change before it is saved. Rows that cannot be identified (no name, domain or external ID) are skipped.

Export companies: the Export button on the Companies view downloads the companies that match your current filters, with a column per third-party ID in use and a column per custom field. Revenue is in the unit your portal displays (MRR or ARR), named in the column header.