Skip to main content
Browse the guide

Members & access

Bulk import

Import your member roster from a spreadsheet — ClubHelix proposes what each column means, you confirm it, and a mandatory dry run shows exactly what will happen before anything is written. Card details and direct-debit mandates never transfer.


Bulk import brings your whole member roster in from a spreadsheet instead of adding people one at a time. You'll find it under User management → Bulk import in the admin sidebar. It's the companion to Migration, which brings your old website across — your members are a separate job, because a roster lives behind a login and no amount of reading a public site will produce one.

The import runs in three stages, and you're in charge of the middle one. You upload the file, ClubHelix works out what each column means and shows you its reading for you to confirm or change, and then a dry run tells you exactly what will happen before a single row is written. Nothing touches your roster until you press commit.

One thing to know before you start, because it's the question everyone asks: card details, direct-debit mandates and passwords never come across. Not from any system, to any system. There's a section on it below.

Who can use this

Admins and moderators. That's the same access the Members page itself uses — anyone who can edit your roster by hand can import into it, and nobody else can. There's no feature to switch on and no separate permission.

Two things worth checking before you import someone else's export file: that the people in it agreed their details could be held by your club, and that you're entitled to move them. An import is a privacy decision as much as a data one.

What's on the page

  • Upload a CSV — choose your file and press Upload and match columns.
  • Check the columns — one row per column in your file, showing what we think it fills under Import as, where that reading came from, and a menu to change it. This is the screen you confirm, with Confirm columns and run the dry run at the bottom.
  • Dry-run report — nothing has been written yet — how many members would be added, how many updated, how many were repeated in the file, and how many rows we can't import.
  • Commit — the button names the numbers it is about to apply, so you can read it as a last check. It reads Continue the import if a big file stopped part-way, and Already imported once it's done.
  • Recent imports — your previous runs with their counts and whether each has been dry-run.

Step by step

Prepare your file

  1. Export your members from your current system as a .csv. Don't tidy the headings first — leave them exactly as they came out, because that's what lets us recognise the system they came from.
  2. Keep it under 10 MB and 20,000 rows. A bigger file is reported as truncated, naming which cap it hit, rather than partly imported in silence.
  3. Semicolons, tabs and pipes work as well as commas, and a file saved by Excel with a byte-order mark is fine. Quoted fields containing commas or line breaks are handled.
  4. If your roster carries addresses, dates of birth or membership numbers, set up matching custom fields on the Members page first. Those columns need somewhere of their own to live; without the custom field, the dry run reports them as having nowhere to go rather than silently dropping them.

Upload and check the mapping

  1. Under Upload a CSV, choose your file and press Upload and match columns. We read the header row and the first few data rows only.
  2. Check the columns shows each column with a proposed field under Import as, and where that proposal came from:
    • from a preset — we recognised the export format of a well-known club system and used its known layout;
    • worked out — we matched the heading and the shape of the values (an email column looks like emails);
    • suggested by Helix — nothing else placed it, so the assistant proposed a field. This is still only a proposal;
    • refused — see below;
    • not mapped — we couldn't place it, and it will be ignored.
  3. Read this screen properly. Change anything that's wrong from the menu beside it — your choice always wins over ours, and once you've set a column by hand nothing re-proposes it. Choose Do not import this column for anything you want left behind. A column bound for an address, date of birth or membership number says so, and warns you the custom field has to exist first. A refused column shows Never imported rather than a menu.
  4. An email address column is required; without one there's nothing to identify a person by. Everything else is optional.
  5. Check the date reading. Australian files write 03/04/2024 as 3 April, and that's what we assume unless the file itself proves otherwise. The report names the assumption per column so you can correct it.
  6. Press Confirm columns and run the dry run. If anything still blocks the import — no email column, say — the button stays disabled and the screen says why.

Read the dry run

  1. The dry run reads your whole file against your confirmed mapping and writes nothing.
  2. Check the four counts: new (people who'd be created), updates (people already on your roster whose details would change), duplicates (the same email twice in your file — imported once, from its first appearance), and rows we can't use.
  3. For the unusable rows you get the line number as your spreadsheet shows it and a plain reason — a missing email, an address that isn't one, a status we don't recognise.
  4. Assumptions lists readings worth a second look, such as that date order.
  5. If it's wrong, fix your spreadsheet and start again, or change a column and press Re-run the dry run. Re-running costs nothing.

Commit

  1. Press the commit button. It names the numbers first — Commit — add 214 and update 38 — so you get one last look before anything is written. It then runs in the background; you can close the tab.
  2. A large file is done in slices. If a run stops with rows left, the button becomes Continue the import; it picks up where it left off and never re-imports anyone it has already done. It also continues by itself every few minutes.
  3. When it finishes, open Members and confirm the roster is what you expected.
  4. Run the same file again any time. People already on the roster are updated in place, never duplicated — which is what makes it safe to fix a column and go round again.

What never comes across

The importer refuses these columns by name and tells you why, rather than quietly ignoring them:

  • Card numbers, expiry dates and security codes. A stored card cannot lawfully or safely move between systems.
  • Bank account and BSB numbers.
  • Direct-debit mandates and authority references. A mandate is an authority your member gave your old provider's merchant account. It can't be reassigned to us. This isn't a gap we're planning to close — it's how the payments system works.
  • Passwords, hashes and PINs. A password is a secret we've no business holding.

The report tells you how many rows carried a refused column with something in it, so you know how many members will need to set up payment again. Use the re-authorisation section on the Members page: it finds those members, drafts the email and gives them a link to set their payment up here. See Member payments for how that works at your end.

Field reference

ItemNotes
Email addressRequired. The identity we match on — one email is one person.
NameA single full-name column, or first name and last name separately.
PhoneStored against the person, not the membership. A phone number written without a country code is read in your organisation's country (from Business details) and saved in international form, for example +64 21 123 4567, and the dry run says so. With no country set, it is kept as written. The column notes and the dry-run report show in your language.
Membership typeMatched by name against your membership types. Create the type first, spelled the same way, or the column has no home.
Join date, Paid untilDates, read using the order named in the report.
StatusOne of pending, active, suspended, rejected or withdrawn.
Emergency contactName, phone and relationship.
NotesFree text, admin-only.
Address, date of birth, membership numberLand in custom fields. Create them on the Members page first.
File type and size.csv, up to 10 MB and 20,000 rows.
DuplicatesThe same email twice in one file: imported once, counted as a duplicate. Already on your roster: updated, not duplicated.

Tips & FAQ

  • Do card details or direct debits transfer? No — from any system to any system. Members who pay you automatically will set that up again here. Anyone who tells you otherwise is describing something that isn't allowed to happen.
  • Does importing someone email them? No. The import sends nothing. It does create a ClubHelix account for each email address, because a member record needs one, but with no password and no message. Your member sets their own password the first time they sign in, using "forgot password" or a sign-in link — and that click is what confirms their address, so nothing is ever marked verified on their behalf.
  • The dry run is mandatory. You can't commit a file you haven't dry-run against a mapping you've confirmed. There's no way to import something unchecked.
  • Why is a row marked unusable? Nearly always a missing or malformed email address. The report gives the line number as your spreadsheet shows it.
  • Can I run the same file twice? Yes, and you should if you've had to correct something. Existing members are updated in place, so the roster doesn't double.
  • A column says "no home". It mapped to something that needs setting up first — usually a custom field for an address or date of birth, or a membership type spelled differently here than in your file. Create it, then run the import again.
  • My whole file was refused for one column. It won't have been. A refused column is skipped; the rest of the row still imports. Check the mapping screen — the refusal names the column and the reason.
  • What if I'm at my member limit? Importing active members counts against the member band you pay for, exactly as approving applications does. If the file would take you past your ceiling, the import stops at the ceiling and tells you rather than moving you up a band on your behalf. Move up on the Subscription page and run it again for the rest.
  • The mapping suggestion looks odd. Change it. A suggestion is only ever a proposal, and the screen exists precisely so a wrong guess costs you a click rather than a wrong roster.
  • What about people who applied to join themselves? Those come through Applications, not here.
  • What about our old website? That's Migration — a different job, and it never produces a member list.