> For the complete documentation index, see [llms.txt](https://btwb.gitbook.io/btwb/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://btwb.gitbook.io/btwb/admin/clients/importing-clients.md).

# Importing Clients

This article covers bulk-adding clients with the Import Clients page — the CSV format, the data preview, and exactly what happens to each row.

### Overview

When you're moving to BTWB from another system, **Import Clients** (**Actions → Import Clients** on the Clients page) creates your whole roster from one CSV file — optionally carrying over Stripe customers, saved payment methods, and each client's original "member since" date.

![Importing two clients from a CSV](https://283006627-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZrefv5JliAQavbeRiIvd%2Fuploads%2Fgit-blob-8447989868c32707fdcf09635c7b19dbcca8687d%2Fimport-clients.gif?alt=media)

***

### Step-by-Step

#### 1. **Prepare your CSV**

The page lists the expected columns. **Required:** `client_email`, `client_first_name`, `client_last_name`, and `client_birthdate` (ISO format, e.g. `1992-04-18`). **Optional:** gender, phone, address fields, emergency contact, `client_stripe_customer_id`, `client_stripe_payment_method_id`, `client_member_since`, and `client_class_attendance_offset`.

* `client_member_since` accepts a date (`YYYY-MM-DD`, read in your organization's timezone) or a full ISO 8601 datetime — use it to preserve tenure from your old system.
* `client_class_attendance_offset` carries over a client's historical class-attendance count.
* `client_gender` accepts `male` or `female`; a blank or any other value imports as **Male**.
* `client_stripe_payment_method_id` only works together with the matching `client_stripe_customer_id` on the same row — the payment method must already belong to that Stripe customer.

#### 2. **Upload and review the Data Preview**

Drag the file onto the upload area (CSV only) and click **Upload File**. A validation pass rejects the whole file if any row is missing a required value or has an invalid `client_member_since` date. On success, the **Data Preview** lists every row — expand an entry to double-check personal details, address, Stripe IDs, and member-since before anything is created.

* If your file has columns BTWB doesn't recognize, they're listed with a warning and you must tick **"I understand that these columns will not be imported"** before continuing.

#### 3. **Decide about welcome emails**

The **"Send Claim Account email to new btwb accounts"** checkbox is **off by default** — imported clients get no email unless you check it. Check it when you want brand-new members to receive the claim-account email (with a link to set their password) right away.

#### 4. **Run the import**

Click **Import N Entries**. If the same email appears on more than one row, the whole import stops here with an error listing the duplicates — fix the file and upload it again. Otherwise rows are processed one at a time with a live log, and the **Import Summary** shows **Successfully Imported / Skipped (Already Exists) / Failed** counts. Large files can take a few minutes — leave the page open.

***

### What Happens to Each Row

* **Brand-new person** — a btwb account and client record are created, connected to your gym immediately (no invitation step).
* **Existing btwb account, not yet your client** — they're added to your roster directly, and any details in your CSV update their profile.
* **Already your client** — the row is **skipped** and counted under "Already Exists".
* A `client_stripe_payment_method_id` becomes the client's default payment method, ready for selling memberships.

***

### Notes for Admins and Coaches

* Importing is limited to **owners and full admins** — staff with the Clients permission can manage clients but not import them.
* Imported clients skip the invitation handshake entirely — they appear as connected clients right away, unlike clients added via a link request.
* Because existing clients are skipped, it's safe to re-run a corrected file after a partial failure: already-imported rows just count as "Already Exists".


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://btwb.gitbook.io/btwb/admin/clients/importing-clients.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
