Skip to content

Documentation

How do I see Stripe and Clerk as one customer?

Connect both, and Kicklace merges them onto one record: a Clerk sign-up becomes a person, and a Stripe payment under the same address lands on the same one. Where Stripe only has a customer id with no address, Kicklace writes it down under that id and waits for the real one to catch up rather than guessing.

How Kicklace keeps them one record

The address is the key that crosses systems. A Clerk webhook turns user.created into a signup event, exactly as if your own server had posted it, and moves that person to Signed up; when the same address shows up later on a Stripe payment, it lands on the same record rather than a new one. A Stripe customer with no address on the event at all is still written down — under the customer id itself, named the way Stripe names it — and every later event under that id finds the same person, so the record catches up the moment an address does turn up.

Two rules keep this honest rather than automatic. A known address arriving on a browser Kicklace has only ever seen anonymously merges the two, and the earliest first touch always wins — what a visitor was first attributed to a year ago is what they are still attributed to. But two records that both already carry an address are never merged on their own: that is a judgement, made from a record's own Merge… control, with a preview of what will move before anything does.

A Clerk organization becomes an organization record the same way, and its members are linked to it as Clerk names the membership. If a company's card is paying rather than one person's own, saying so is one line — naming that organization's Stripe customer id moves the subscriptions the person was carrying over with it, so a company on one plan reads as one customer rather than as whoever happened to click. See Identity resolution for the whole of it.

Set it up

  1. Connect Clerk (or Kinde): Connections → Clerk → Connect, paste one address into their dashboard, subscribed to user.created, user.updated, session.created and user.deleted, bring the signing secret back.
  2. Connect Stripe the same way: one address, the events you want, the signing secret back.
  3. Read each one's history from the same wizard, so the sign-ups and payments you already have land on the records their webhooks would have written, dated the day they really happened.
  4. Open a person's record — the sign-up, the subscription and everything between them are one timeline, not two systems to cross-reference.
  5. If a payment landed on the wrong side of a company, say whose Stripe customer id it is on the organization's own record, or ask Kicklace to do it in a sentence.

What it does not do

It never guesses a person from a browser fingerprint, an IP address or a name — only an identity a system actually wrote down finds a record. And it never merges two people who both already have an address of their own without a person deciding: that is what Merge… is for, never something that happens quietly in the background.