Phone-only invites that actually match

Phone numbers are normalised to a canonical form on both sides so an invitee who signs up with a phone is recognised as the person invited.

What it is

A shared normaliser strips non-digits and prepends the country code to a bare 10-digit North American number, so a number typed as (555) 123-4567 matches the same number reported in E.164 form by the identity provider.

Also called: invited by phone number · phone invite stuck pending

See it
Phone-only invites that actually match
Area
Platform & Admin
Group
Team & access
System
Team & Access
Solves
1 named problem
01normalizePhone() strips non-digits, prepends 1 to a bare 10-digit number, and returns unusual lengths untouched rather than mangling them.
02Both the stored invitation and the account's verified phone are normalised before comparison.
Not visual — illustrate with a before/after of (555) 123-4567 vs +15551234567 resolving to the same person. Sample data — no customer information appears here.
How it works
  1. 1normalizePhone() strips non-digits, prepends 1 to a bare 10-digit number, and returns unusual lengths untouched rather than mangling them.
  2. 2Both the stored invitation and the account's verified phone are normalised before comparison.
Why we built it

The function's own comment describes the bug: 'a raw strip-and-compare never matches and a phone-only invitee gets stuck in pending forever.' For a builder whose crew has phones and no email, that was the default outcome.

The problem
  • Phone-invited users were never matched to their invitation because of formatting differences.
Sound familiar?
What you get
Phone-only onboarding completes the same way email onboarding does.

See it on your own jobs

Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.

or keep browsing features →