CompteamDocumentationImport athletes

Import athletes

Upload a CSV, paste a list, or photograph your roster — the AI stages each athlete and sends them a personalised invitation link.

  1. 1

    Open the Import Athletes modal

    Go to Athletes in the sidebar.

    Click the Import athletes button in the top-right corner of the page.

    The Import Athletes modal opens. It accepts three input formats:

    FormatWhen to use
    CSV fileYou have an existing spreadsheet export
    PDF / photoYou have a printed roster or a photo of a signup sheet
    Pasted textYou are typing or pasting a list directly

    Current limits

    LimitValue
    Maximum file size8 MB
    Maximum athletes processed per import400 rows
    Without AICSV only, using the standard column headers shown later in this guide

    If your file contains more than 400 athletes, Compteam imports the first 400 and asks you to split the rest into a second batch.

    Expected runtime

    These times are typical, not guaranteed. They depend on file cleanliness, image or PDF quality, and current AI provider latency.

    Import typeTypical timeNotes
    Standard CSV (AI disabled)2-8 secondsFastest path; parsed directly on the server
    AI CSV or pasted text15-45 secondsLarger imports are read in chunks
    AI PDF or photo20-60 secondsSlowest path; scanned or multi-page files take longer
  2. 2

    Paste your data — any format works

    Just paste whatever data you have — the AI figures out the rest.

    There is no required column order, no header row, no specific format. The agent reads the raw text and maps each value to the right field automatically. All of these work:

    Jude Mitchell, Jude@mitch.de, 03.10.1980
    russel@gmail.com, Rich Russel, 02.04.2005
    1988-07-22 | Anna Kovacs | anna@kovacs.hu
    

    Accepted date formats: DD.MM.YYYY, YYYY-MM-DD, MM/DD/YYYY.

    The agent stages every row it can fully resolve and flags the rest as problems (see Step 4).

    Three fields are mandatory: name, email, and date of birth. Any row missing one of these will not be staged until it is corrected.

    Paste input — name and email only, no date of birth
    Paste input — name and email only, no date of birth
    Paste input — name, email, and date of birth added
    Paste input — name, email, and date of birth added
  3. 3

    Migrating billing data and SEPA mandates (optional)

    If you are migrating athletes from another system you can include billing data directly in your CSV — the importer will carry it through to each athlete's account the moment they register.

    Optional columns you can add to your CSV:

    ColumnDescription
    ibanFull IBAN (spaces allowed — e.g. DE89 3704 0044 0532 0130 00)
    account_holder_nameName on the bank account
    address_line1Street and number
    address_line2Apartment, floor, etc. (optional)
    cityCity
    postal_codePostal / ZIP code
    countryTwo-letter country code (e.g. DE, AT)
    membership_planPlan name exactly as it appears in your branch (e.g. Monthly Adult)
    signup_fee_paidtrue/false. Use true when a migrated member already paid the plan signup fee elsewhere
    membership_end_dateContract end date for an already-cancelled member. Recommended format: YYYY-MM-DD. Requires membership_plan
    historical_membership_start_dateOriginal membership start date for display in the athlete profile. Recommended format: YYYY-MM-DD. Display only — does not affect billing

    Example:

    first_name,last_name,email,date_of_birth,iban,account_holder_name,membership_plan,signup_fee_paid,membership_end_date,historical_membership_start_date
    Jude,Mitchell,jude@mitch.de,1980-10-03,DE89370400440532013000,Jude Mitchell,Monthly Adult,true,2026-08-31,2019-05-01
    Anna,Kovacs,anna@kovacs.hu,1990-07-22,HU42117730161111101800000000,Anna Kovacs,,false,,2021-09-15
    

    How SEPA mandate migration works

    Providing an IBAN migrates the existing direct-debit authorisation from your old system into C-TEAM:

    1. The IBAN is encrypted and stored in the vault the moment the athlete registers — no one can read the full number after import, only the last four digits are visible.
    2. A new internal mandate reference is generated automatically (with today's date as the signing date). This reference will differ from the one in your old system. Before you collect the first direct debit through C-TEAM you must notify your bank and update the mandate reference with them.
    3. The account holder name is stored alongside the IBAN and appears on SEPA pain.008 export files.

    Membership plan pre-assignment

    If you include a membership_plan column and the plan name matches one of your active branch plans, the plan is pre-assigned to the pending athlete. When they register the membership is activated automatically, backdated to the 1st of the month they were imported — so billing history starts from the correct date with no manual correction needed.

    If the plan name does not match any active plan in your branch the row is flagged as a problem and not staged. Check the plan name in Membership Plans and correct the CSV before re-importing.

    Already cancelled or ending soon?

    If a migrated member has already cancelled, add membership_end_date with the final contract date. This field requires membership_plan because the end date is stored on the imported membership. Future end dates keep the membership active until that date; past end dates create the membership as inactive so it will not be billed.

    Need the original join date for the profile header?

    Add historical_membership_start_date with the athlete's original membership start date in YYYY-MM-DD format. This value is display only: it appears on the athlete profile next to the nationality code and can be corrected in Migration mode, but it never changes billing, proration, or membership activation dates.

    Already paid a signup fee? (migrated members)

    If your plan has a one-time signup fee and you are migrating members who already paid it in your previous system, set signup_fee_paid=true in the CSV. The first invoice will then skip the signup fee and bill only the membership. This flag only takes effect when membership_plan is also imported; you can still tick or untick Signup fee paid next to the athlete's plan in the Pending registration section before activation.

    No plan column? That is fine. Athletes will be placed on a trial membership as usual when they register. You can also assign or change a plan at any time from the Pending registration section on the Athletes page before the athlete registers.

    Example — no proration on the first invoice

    Jude is imported on 10 June with the Monthly Adult – IBAN plan (49.00 EUR/month) pre-assigned via the membership_plan column. He registers a few days later and his membership is activated immediately, backdated to 1 June — the 1st of the month he was imported, not the day he registered.

    On 1 July, the branch admin runs Monthly & Yearly Invoice. Because Jude's membership started on the 1st of the month, June is not prorated:

    June membership (full month): 49.00 EUR
    

    If Jude had instead registered himself on 10 June with no pre-assigned plan — i.e. a normal self-registration — his membership would start on the day he subscribes, and June would be prorated to 21/30 days (49.00 EUR × 21/30 = 34.30 EUR). Backdating on import avoids that: an athlete who was already training before being added to C-TEAM is billed for the full month, just like they would have been in your old system.

    Pending registration — plan dropdown open showing Amateur Plan – IBAN selected for Jude Mitchell
    Pending registration — plan dropdown open showing Amateur Plan – IBAN selected for Jude Mitchell
  4. 4

    Setting profile fields after import — Migration mode

    After import, some athlete profile fields — nationality, historical membership start date, gender, date of birth, phone, Smoothcomp ID, and Instagram handle — can only be edited by the athlete themselves. This is intentional: those fields are personal data or migration metadata that should stay locked once your gym is running normally.

    However, when you are migrating from another system you likely already have this data and want to fill it in before athletes register. Migration mode exists for exactly this.

    How to enable Migration mode

    Go to Branch SettingsMigration mode and toggle it on. The toggle turns amber to indicate the mode is active.

    While Migration mode is on:

    • You can edit nationality, historical membership start date, gender, date of birth, phone, Smoothcomp ID, and Instagram handle on any athlete profile from the Athlete detail page
    • You can upload or replace an athlete's profile photo by hovering over their avatar on the Athlete detail page and clicking the upload overlay that appears

    Turn it off once you are done

    Migration mode is a temporary tool. Once you have finished populating your historical data, go back to Branch Settings and turn it off. From that point forward those fields are athlete-controlled again, which is the correct ongoing behaviour.

    Weight and training hours are always editable by admins — those are operational fields that coaches legitimately need to update at any time, independent of migration mode.

  5. 5

    Importing without AI (CSV only)

    By default, AI is used to read your file — whether it's a CSV, a PDF, a photo, or pasted text — and map the data to the right fields.

    If you'd rather not send any athlete data to an AI provider, tick "Disable AI for this import" in the Import Athletes modal. With this option:

    • CSV files are still imported, but parsed directly using a fixed set of column headers — no AI involved
    • PDF, photo, and pasted-text imports are not available — only a CSV with the exact headers below can be used

    Required CSV column headers, in order

    The first row of your CSV must contain exactly these headers (lowercase, comma-separated). First name, last name, and date of birth are always required; email is required for adult athletes. The rest may be left empty:

    #HeaderRequired?Notes
    1first_nameRequired
    2last_nameRequired
    3emailRequired (unless is_kid is true)Kids without an email get a temporary address automatically
    4date_of_birthRequiredFormat YYYY-MM-DD, must be in the past
    5genderOptionalmale, female, or other
    6beltOptionalOne of: white, grey, grey-white, grey-black, yellow, yellow-white, yellow-black, orange, orange-white, orange-black, green, green-white, green-black, blue, purple, brown, black, coral, red (defaults to white)
    7stripesOptionalBelt stripe count from 0 to 11 (defaults to 0)
    8is_kidOptionaltrue/false (or 1/yes)
    9guardian_emailOptionalFor kids, this guardian is invited or linked automatically when the kid is activated
    10address_line1Optional
    11address_line2Optional
    12cityOptional
    13postal_codeOptional
    14countryOptional
    15account_holder_nameOptionalName on the bank account
    16ibanOptional
    17membership_planOptionalMust match an existing plan name exactly
    18signup_fee_paidOptionaltrue/false (also accepts yes, paid, or waived). Requires membership_plan; skips the one-time signup fee on the first invoice
    19membership_end_dateOptionalContract end date in YYYY-MM-DD format. Requires membership_plan; past dates create inactive memberships
    20historical_membership_start_dateOptionalDisplay-only membership start date in YYYY-MM-DD format. Shows on the athlete profile and does not affect billing

    Any extra columns in your file are ignored. If one of the required headers is missing, the import is rejected with an error listing the missing column(s).

    belt and stripes are staged together. When an adult claims the pending registration, or an admin activates a kid profile, both values are written to the athlete's branch belt state.

    Download example CSV template · Download as Excel (.xlsx)

    For a full breakdown of how Compteam protects athlete data — including bank details — when AI is used, see AI & data privacy.

  6. 6

    Review the summary

    After parsing, the modal shows a four-tile summary:

    TileMeaning
    RowsTotal rows detected in the input
    StagedAthletes ready to be invited — no problems found
    SkippedRows the parser ignored (blank lines, headers)
    ProblemsRows that need attention before they can be staged

    A Staged count greater than 0 and Problems at 0 means you are ready to proceed.

  7. 7

    Fix any problems

    If Problems is greater than 0, a table below the summary lists every issue by row, field, and a plain-English description.

    Common problems and how to fix them:

    Missing mandatory field — name, date of birth, or an adult athlete email could not be found in that row.

    Jude Mitchell, Jude@mitch.de      ← no date of birth → flagged
    

    Add the missing value and paste the corrected list again:

    Jude Mitchell, Jude@mitch.de, 03.10.1980
    

    Athlete already registered in another branch — the email address is already linked to an account elsewhere. That athlete cannot be re-imported; they would need to transfer branches through their existing gym.


    The agent re-parses immediately each time you update the input. Once all rows are resolved the problems table disappears and every row moves to Staged.

    Import modal — problems table showing date_of_birth required for rows 1 and 2
    Import modal — problems table showing date_of_birth required for rows 1 and 2
  8. 8

    All rows staged — import complete

    Once Problems reaches 0, all rows move to Staged and the import is done on your end.

    Why we don't create active accounts or email passwords

    Sending a password by email is a security risk — the message can be intercepted, forwarded, or land in the wrong inbox. Instead, each athlete creates their own account using a method they control: email + password they set themselves, or a social login (Google or Facebook). This keeps credentials out of your hands entirely and keeps the platform compliant with standard security practices.

    What happens when the athlete registers or the kid is activated

    All the data you imported — name, date of birth, belt, stripes, weight, and any other records already in the system — is pre-loaded into the account the moment it is created. The athlete just needs to register; they will not be asked to fill anything in. Their profile is ready to use immediately.

    Kid records work differently: they are activated by an admin as managed profiles, without a child login. If the imported row included guardian_email, activating the kid automatically links an existing guardian account or emails that guardian an invitation to register and manage the kid.

    Athletes can register by:

    • Scanning the branch QR code from your recruitment poster
    • Visiting the registration page directly and selecting your branch

    They can sign up with an email and a password they choose, or with their existing Google or Facebook account — no password required.

    Click Done to close the modal, or Import another file to stage a second batch.

    Import modal — 2 rows, 2 staged, 0 skipped, 0 problems
    Import modal — 2 rows, 2 staged, 0 skipped, 0 problems
  9. 9

    Send registration links — email or WhatsApp

    After import, your athletes appear in the Pending Registration section on the Athletes page. Each row shows a plan dropdown, a Signup fee paid checkbox, and the invite or activate button — all in a fixed-width grid so they stay aligned regardless of plan name length.

    Activating imported kids

    Rows marked is_kid=true show Activate kid instead of a self-registration invite. Activating the kid creates the managed child profile immediately. If guardian_email was imported, Compteam automatically links that guardian if they already have an account, or sends them an invitation email to create an account and accept the kid link.

    Assign a membership plan before inviting (optional)

    Use the plan dropdown to pre-assign a membership plan before you send the invite link. When the athlete registers, the plan activates automatically — no manual step needed afterwards.

    Signup fee paid (migrated members)

    Next to the plan dropdown is a Signup fee paid checkbox. It is only active when the selected plan has a one-time signup fee configured. Tick it for members who already paid your signup fee in a previous system — their first invoice will then bill only the membership and skip the fee. The checkbox resets automatically if you clear the plan back to No plan.

    Send invite link (email)

    Click Send invite link and the platform sends an email directly to the athlete's address with a personal registration link. The link pre-fills their email address so they only need to set a password and they are in. Once sent, the button changes to Resend invite — you can resend at any time if the email was missed or ended up in spam.

    Copy link and send via WhatsApp (or any other channel)

    After clicking Send invite link, a Copy link button appears next to it. Tap it and the personal registration link is copied to your clipboard. You can then paste it directly into a WhatsApp message, SMS, or any messenger.

    The link is personal. It pre-fills the athlete's email address and, if you pre-assigned a membership plan, activates that plan automatically when they register. Do not share one athlete's link with another person.

    Pending registration section — plan dropdown, Signup fee paid checkbox, and Send invite link button per athlete
    Pending registration section — plan dropdown, Signup fee paid checkbox, and Send invite link button per athlete