Platform-owner tool, the advanced path. For a new customer with just an admin, use New customer on the console instead. This page creates a whole new tenant at once: the brokerage record, the admin, one record per rostered agent, and the billing record. The admin is created active and is sent their secure setup email automatically. Rostered agents are created as pending with no account yet and are not emailed; the brokerage's admin invites them from their roster.
Step one, after a brokerage signs. Creates the record the public intake form looks itself up against, then hands you a link to send. The broker fills in their own details and roster; you provision from what they submit.
The tenant id is derived from the display name, not typed. It is permanent and has no rename path, so it is checked against existing brokerages before the invite is written.
What brokers have sent back. Provisioning uses the submitted payload directly rather than the form below, so what you see here is what gets created.
The brokerage record's adminUids starts empty at provisioning, because the admin has no Firebase uid until they claim their account. The syncBrokerageAdminUids trigger adds it automatically when that claim lands, so there is no manual step here. Until the admin claims, nobody but the platform owner can edit this brokerage record; every other admin capability arrives with the same claim.
Columns: name, email, state, license, split, monthly fee, and an optional role (Agent, TC or Bookkeeper; blank means Agent). A TC or bookkeeper may leave the split blank, and then none is stored. Header names are matched by alias. The split is the agent's share (80 means the agent keeps 80%, stored as a company baseSplit of 0.20). A row missing a name or email, or with a split outside 0 to 100, or a negative fee, is reported and skipped.
Note: agent records are keyed by full name, the existing system-wide contract (onboarding, deal-to-agent resolution, and the agent store all key on the name). Provisioning refuses to write if a name is already taken, so it fails safe. Because the Agents collection is flat, two agents with the same name at different brokerages would collide on that key; that is a real future problem, not one this tool solves, so pick distinct names if you hit it.