Documentation Index
Fetch the complete documentation index at: https://docs.jitera.ai/llms.txt
Use this file to discover all available pages before exploring further.
Bulk Member Import lets you reconcile your entire organization’s member list, team assignments, and roles by uploading one CSV. Every existing member and team is reconciled against the file: rows you add create new invitations, rows you change update existing members, and anyone or any team missing from the file is removed.
Bulk Member Import is a replace operation, not a merge. After a successful import, the organization’s membership matches the uploaded file exactly. Any active member, team, or team assignment that is not present in the file is deactivated. Always start from the current member list export.
All values shown on this page are examples. Replace them with the actual values from your organization.
Prerequisites
- A Jitera organization on the Enterprise plan (Bulk Member Import is an Enterprise-only feature)
- Owner or Admin role in that organization
- A CSV file that follows the format below, ideally produced by downloading the current member list first
Step 1: Open the Bulk Member Import page
Go to Organization Settings > Members and click Bulk Member Import.
The page is split into three sections:
| Section | Purpose |
|---|
| Current member list | Download a CSV snapshot of your current active members, pending invites, and team assignments |
| Upload area | Drop a new CSV here to reconcile the organization against it |
| Past imports | History of previous imports with status, stats, and downloadable error reports |
Step 2: Download the current member list
Click Download CSV in the Current member list card. Use the downloaded file as your starting template and edit it.
Starting from the current list is the safest workflow. It guarantees every existing member and team appears in the file, so you only need to add, change, or remove rows for the differences you intend.
Always download a fresh CSV before each upload. After a successful import, your organization’s state may include new teams, new pending invitations, or role changes. A stale CSV from before the last import will omit those rows, and the next upload would deactivate them — typically surfacing as last_owner_team or last_owner_company errors.
Step 3: Edit the CSV
The CSV uses one row per team membership. A user who belongs to two teams has two rows with the same email.
Columns
| Column | Required | Description |
|---|
email | Yes | The user’s email address |
team | Yes | Team name. If the team does not exist yet, it is created during the import |
team_role | Yes | Role within this team. One of owner, admin, member |
organization_role | No | Role at the organization level. One of owner, admin, member. If omitted, defaults to member. Must be consistent across all rows for the same email |
Example
email,organization_role,team,team_role
alice@example.com,owner,Platform,owner
alice@example.com,owner,Mobile,member
bob@example.com,admin,Platform,admin
carol@example.com,member,Mobile,member
In this example, Alice belongs to two teams with different team roles, and her organization role is owner (consistent on both rows).
Limits and rules
| Constraint | Value |
|---|
| File format | .csv |
| Maximum file size | 10 MB |
| Maximum data rows | 30 000 |
| Maximum team name length | 50 characters |
| Email format | Standard email (name@domain.tld) |
organization_role consistency | Must be identical across all rows that share the same email |
If you do not want the import to deactivate certain protected members (for example, your own account or another organization owner), keep their rows in the file unchanged. Anyone in the current member list who is not present in the uploaded file is removed.
Step 4: Upload the file
Drop the CSV onto the upload area, or click it to open a file picker.
A confirmation dialog opens.
Review the filename and click Replace to start the import. Click Cancel to abort.
Step 5: Watch the status banner
Once the upload starts, a status banner appears at the top of the page and updates in real time.
Processing
The import is queued and being applied. Imports usually finish in a few minutes.
Completed
The import succeeded. The banner shows a per-statistic summary.
| Stat | Meaning |
|---|
| Members created | New pending invitations created for rows whose email did not exist yet |
| Members updated | Existing members whose name, organization role, or team assignments changed |
| Members deactivated | Members in the current list who were missing from the uploaded file |
| Teams created | Teams referenced in the file that did not exist before |
| Protected rows skipped | Rows that targeted protected accounts (for example, the row for your own owner account, which cannot be self-demoted) |
Failed
The import did not run, or ran partially before being rolled back. The banner shows the cause.
If the failure is per-row, the banner shows a count of row errors and a Download errors CSV button. The errors CSV is your original file with extra columns describing each problematic row — fix those rows and re-upload.
If the failure is plan-level (for example, the import would exceed your seat limit), the banner shows the specific message. No partial changes are kept on a failed import.
Step 6: Review past imports
The Past imports section lists every import attempt, newest first.
Each row shows:
- Filename and uploader
- Status badge (Processing, Completed, Failed)
- Created / updated / deactivated stats for completed imports
- Row error count for failed imports, with a Download errors CSV link to retrieve the error report after the fact
The file must start with a header row containing the required columns. Additional columns are allowed but ignored.
Required, in any order: email, team, team_role. Optional: organization_role.
Row semantics
| Action | How to express it in the file |
|---|
| Add a new member | Add a row with a new email |
| Move a member to a new team | Add a row with the existing email and the new team name |
| Remove a member from a team | Omit the (email, team) row that previously existed |
| Change a team role | Update team_role on the existing row |
| Change an organization role | Update organization_role consistently on every row for that email |
| Deactivate a member | Omit all rows for that email |
| Delete a team | Omit all rows that reference that team |
| Create a team | Reference a new team name in any row |
Troubleshooting
The page surfaces import problems in two places: the upload area rejects file-level problems before the import is queued, and the status banner surfaces row-level and plan-level problems after the file is uploaded.
File too large
Error: “The file exceeds 10 MB. Please reduce the file size and try again.”
Compress, deduplicate, or split your file. The 10 MB cap is on the raw file size.
File is not a CSV
Error: “The file is not a CSV. Save the file as .csv and try again.”
Re-save the file from your spreadsheet tool with the .csv extension. Excel and Google Sheets both have a “Save as CSV” option.
Error: “The file is empty.” or “The file has no header row.”
The file must contain a header row and at least one data row.
Required column is missing
Error: “Required column is missing: <column>.”
Add the missing column to the header row. Required columns are email, team, and team_role.
Duplicate column
Error: “Duplicate column found: <column>.”
Remove the duplicate column from the header row.
Row has the wrong number of columns
Error: “Row <n> has the wrong number of columns.”
Every data row must have the same number of fields as the header row. Check for unescaped commas inside cells — wrap such cells in double quotes.
Cell is too long
Error: “Row <n>, column <column>: cell is too long.”
The cell exceeds the maximum length for that column. Trim the value and re-upload.
Too many rows
Error: “The file has more than <max> data rows.”
Split the import into multiple smaller files of up to 30 000 rows each, or remove rows that are not actually changing.
Seat limit would be exceeded
Error: “Your plan allows <n> seats, but this import would create <m> new members. Remove new-member rows from the file or upgrade your plan.”
Either remove some new-member rows from the file, or upgrade your plan to allow more seats before re-uploading.
Last owner of the organization
Error: “This import would leave the organization with no owner. Promote another member to owner before re-uploading.”
Every organization must keep at least one Owner. Add an organization_role: owner row before re-uploading.
Last owner of a team
Error: “This import would leave team <team> with no owner. Promote another member to team owner before re-uploading.”
Every team must keep at least one Owner. Add a team_role: owner row for that team before re-uploading.
Another import is already running
Error: “Another import is being applied. Please wait for it to finish before uploading again.”
Only one import can run at a time per organization. Wait for the in-progress import to finish, then upload again.
Encoding error on download
Error: “The original file could not be decoded.”
The original file is preserved on import for later download. If it was uploaded with an encoding the system cannot decode (rare; non-UTF-8 with no BOM), download is unavailable. Re-upload the file in UTF-8 if you need to recover it.
Reference: column summary
| Column | Required | Allowed values | Example |
|---|
email | Yes | Standard email address | alice@example.com |
team | Yes | Team name, up to 50 characters | Platform |
team_role | Yes | owner, admin, member | member |
organization_role | No | owner, admin, member (default member); must be the same across rows for the same email | owner |