# Customer support lookup console for Clerk and Stripe

> Give your support reps one screen to find any customer, see their plan and payments, and fix account problems without asking an engineer.

- Workflow type: app
- Services: Clerk, Stripe, Slack Bot
- Categories: Customer Support, Operations
- Published: 2026-08-16

## What it does

- Search by email address or name and pull up a customer's full account in seconds, instead of opening two dashboards side by side.
- See the whole picture on one page: profile details, recent sign-ins and devices, which teams they belong to, their current plan, and their last few payments.
- Fix the common problems right there. Sign out a suspicious device, ban or restore an account, and leave a support note that stays on the account for the next rep who looks.
- Every change is announced in your support channel with who did it, what changed, and the reason they gave, so you always have a record.

## What you'll need

- A Clerk account for your product's sign-ins, with permission to view and manage users
- A Stripe account, if you want plan and payment history to show on the same page
- A Slack workspace and a channel where your team wants the record of account changes posted

## Prompt

I want an internal customer support lookup console that my support reps keep open all day, so they stop bouncing between the Clerk dashboard and the Stripe dashboard every time a ticket comes in. It should be one app with two surfaces: a search screen, and an account detail page that answers almost every question a rep has about a customer.

The main screen is a single search box. A rep types an email address or a name and gets back the matching accounts. The handler behind it calls Clerk "List all users" filtered by email address. Show each match as a row with the person's name, primary email address, when they joined, and when they last signed in, and make the whole row click through to the detail page. Two things to know about that Clerk call: it returns a bare list with no wrapper object around it, and it sorts newest first by default. When nothing matches, say so plainly and suggest checking for a typo or a different email address rather than showing an empty table.

The account detail page loads the full profile with Clerk "Retrieve a user". At the top, show an account header with a plain language status strip instead of raw fields. The rep should see phrases like "Active", "Banned", "No sign-in for 45 days", or "Payment failing", worked out from the underlying data. Keep the exact underlying values available further down the page for the times someone needs them, but lead with the plain language read.

Below the header, show that person's sessions from Clerk "List all sessions", most recent first. For each session show the device and browser, whether it is currently active, and how long ago it was last active. This is the panel a rep works from when a customer says someone else got into their account.

Alongside that, show which organizations the person belongs to and what role they hold in each, using Clerk "Retrieve all memberships for a user". Show the organization name and the role in plain words, since reps often need to know whether the person is an admin of their team's workspace or just a member.

The same page pulls the money side, fetched in parallel with the Clerk calls so the page does not feel slow. Match the customer with Stripe "Search Customers" on the user's email address. From that customer, show the current plan and status with Stripe "List Subscriptions", and the last handful of payments with Stripe "List Invoices", each clearly marked paid or failed. The goal is that a rep instantly sees "paying customer on Pro" versus "free trial" without having to read billing jargon. When no Stripe customer matches the email address, show a clear "no billing record found" state rather than an error, because plenty of users never pay.

From the detail page the rep can act without asking an engineer. They can revoke a single suspicious session with Clerk "Revoke a session", ban an account with Clerk "Ban a user", lift a ban with Clerk "Unban a user", and leave a support note on the account with Clerk "Merge and update a user's metadata", writing the note into public metadata so it survives and shows up on every future lookup. Show the existing notes on the detail page, newest first, each with who wrote it and when.

Destructive actions need a confirm step. Banning an account and revoking a session both open a confirmation dialog with a required reason field, and the action does not go through until the rep types a reason. That reason gets written into the support note on the account and repeated in the audit line, so nobody has to guess months later why an account was banned.

Every action posts an audit line to our support channel using Slack Bot "Send a Message". The line should name the rep who acted, the account they acted on, exactly what changed, and the reason they gave. Let me set the destination channel once inside the app rather than hard coding it.

One formatting detail that matters throughout: Clerk timestamps come back as Unix epoch milliseconds, so convert them and show friendly relative text like "last seen 3 hours ago" or "joined 8 months ago", with the exact date available on hover. Stripe amounts arrive in the smallest currency unit, so format them as ordinary currency before showing them.

Do not build any kind of log in as the customer or impersonation feature. This console is for looking up accounts and taking the specific actions described above.

## How to customize

- Choose which Slack channel receives the record of changes, and how much detail each line includes
- Change what counts as a warning in the status strip, such as how many quiet days make an account count as inactive
- Decide how many past payments to show, and which actions require a written reason before they go through

## FAQ

### Do our support reps need their own logins to Clerk and Stripe?

No, and that is the point. The console reads from both accounts on your team's behalf, so reps get the customer information they need without you handing out dashboard access to systems that can change billing or delete accounts.

### Can a rep sign in as the customer to see what they see?

No. This console shows you the customer's account and lets you take specific actions like signing out a device, pausing an account, or leaving a note. It does not log in as your customers.

### What happens if the customer has never paid us?

The page still works and simply says there is no billing record for that email address. Free and trial users are normal, so the console treats a missing payment history as information rather than an error.

### What if someone pays with a different email address than the one they sign in with?

The console matches the two sides on email address, so when the billing email is different it will tell you plainly that no payment record was found. Reps usually confirm the billing address with the customer and record it in a support note so the next lookup has the answer.

### Is there a record of what support changed on an account?

Yes, in two places. Every action posts a line to your support channel naming the rep, the account, and what changed, and the reason the rep typed is saved onto the account itself so it shows up on every future lookup.

Use this prompt in General Input: https://www.generalinput.com/prompts/customer-support-lookup-console-for-clerk-and-stripe