Bulk CSV import

How to download the import template, fill it in, and upload it to create many member records in one go.

Overview

CSV import lets you create multiple member records from a spreadsheet — useful when migrating from another platform or adding a large roster at the start of a season. Unlike the public join page, imported members are inserted at whatever status you specify and do not go through the application-and-approval flow.

Step 1: Download the template

  1. Go to Members in the sidebar.
  2. Click Import CSV.
  3. Click Download template to get a pre-formatted CSV file with example rows.

Always start from the template. The importer checks for the correct headers and will reject a file that doesn't include them.

Step 2: Fill in the CSV

The template contains these columns:

Column Required Accepted values / format
first_name Yes Any text
last_name Yes Any text
email No Valid email address
phone No Any text
date_of_birth No ISO 8601 date: YYYY-MM-DD (e.g. 2005-06-15)
member_type No player, coach, assistant_coach, manager, parent_guardian — defaults to player
status No active, pending, approved, rejected, expired, suspended — defaults to active
expires_at No ISO 8601 date: YYYY-MM-DD — leave blank for no expiry

For most imports, set status to active so members can log in to the portal straight away. Use expires_at to give memberships a defined end date.

Step 3: Upload and import

  1. Save your filled-in CSV.
  2. On the Import CSV page, click Choose file and select your CSV.
  3. Click Import.

The import runs immediately. When it finishes, the page shows:

  • Imported: the number of rows successfully created.
  • Errors: any rows that failed, listed by line number and the reason (e.g. Email has already been taken).

Rows that fail do not block the rest of the import — all valid rows are created regardless of which rows error.

Edge cases / gotchas

  • Duplicate emails. If an email address already exists as a member of your club, that row is rejected with a validation error. Rows with no email always import (there's no uniqueness check on blank emails).
  • Date format. Use YYYY-MM-DD (ISO 8601). Other formats (e.g. 06/15/2005) are silently ignored — the field is left blank rather than erroring the row.
  • No invitations sent. CSV import does not send any email to imported members. If you want imported members to be able to log in, send them portal access from their member detail page after import.
  • No approval flow. Imported members are created at the status you specify. If you import with status: active, they are immediately active — there is no pending-and-approve step.
  • Large files. The import runs synchronously in the current request. Very large files (roughly more than 1,000 rows) may time out. Split large imports into batches if you encounter timeouts.
  • Header validation. The importer requires at minimum a first_name and last_name column. If either is missing, the entire import is rejected with a header error before any rows are processed.

Was this helpful?