Nextcloud bulk user creation and update tool with CLI/TUI
Project description
nextcloud-bulk-users-utils (PyPI: ncbulk)
CLI: nextcloud-bulk · Python >= 3.12
Why
- Bulk create/update Nextcloud users from CSV via the OCS Provisioning API.
Bulk creation and updates of Nextcloud users via the OCS Provisioning API.
Features
- Create users from CSV.
- Group list in a single CSV field (
groupsorgroup), multiple groups separated by a configurable delimiter. - Default quota and language via CLI/TUI or per-row via
quotaandlanguagecolumns. - Welcome mode (no password) – sends a welcome email (requires user email).
- Update existing users: email, displayname, quota, and add to groups.
- Dry-run, verbose logging, timeouts and retries.
- Flexible input/output CSV paths and delimiters.
- Step-by-step terminal wizard: delimiter auto-detection and CSV preview.
Environment
Set admin credentials via environment variables (see example.env):
export NEXTCLOUD_URL="https://cloud.example.com"
export NEXTCLOUD_ADMIN_USERNAME="admin"
export NEXTCLOUD_ADMIN_PASSWORD="secret"
You may put them into a local .env file; the tool reads values from the environment. An example file is provided as example.env.
Security note: .env may contain plaintext password and is git-ignored. Keep it local and protected.
Tip: Prefer using an App Password
For better security and least-privilege access, create an App Password in Nextcloud for the admin account and use it as NEXTCLOUD_ADMIN_PASSWORD instead of the main account password. If the tool reports 401/403 during the early OCS check, verify the credentials and consider switching to an App Password.
CSV Format
CSV must include a header. Minimal columns: username;email;displayname;group
Optional columns: groups (instead of group), quota, language.
Default delimiter is ; (you can change it). Example:
username;email;displayname;groups;quota;language
alice;alice@example.org;Alice A;Students,Math;10GB;en
If present, address column is ignored.
Install
Requires Python >= 3.12.
Local install:
pip install .
Via pipx (recommended isolation):
pipx install .
From PyPI:
pip install ncbulk
Usage
Run the interactive step-by-step wizard:
# installed entry point (recommended)
nextcloud-bulk
# or run module directly (development)
python -m ncbulk.main
Run the CLI directly:
nextcloud-bulk --input list.csv --quota 10GB --language en --output users_passwds.csv
Key options:
--quota 10GB– default quota (overridden by rowquota).--language en– default language (overridden by rowlanguage).--delimiter ";"– CSV delimiter.--groups-delimiter ","– delimiter inside the groups field.--welcome– do not set password, send welcome email.--password-length 12– generated password length (when not in welcome mode).--dry-run– simulate without changes.--verbose– verbose HTTP attempts.--timeout 15– HTTP timeout in seconds.--retries 2– retry attempts.--update-existing– update existing users.--input,--output– input and report CSV paths.
Output Report
The report file (default users_passwds.csv) has the columns:
Username;Email;Displayname;Groups;Password;Status
Password is empty when --welcome is used. Status is one of Created, Updated, Skipped.
Examples
- Basic creation with default quota and language:
nextcloud-bulk --input list.csv --quota 10GB --language en
- Multiple groups and per-row quota/language from CSV:
username;email;displayname;groups;quota;language
bob;bob@example.org;Bob B;HR,Onboarding;5GB;en
nextcloud-bulk --input list.csv
- Welcome mode and update existing users:
nextcloud-bulk --input list.csv --welcome --update-existing
- Dry-run:
nextcloud-bulk --input list.csv --dry-run --verbose
API Notes
- Create:
POST /ocs/v2.php/cloud/users– params:userid, optionalpassword, repeatedgroups[], optionallanguage. - Update fields:
PUT /ocs/v2.php/cloud/users/{userid}withkey/valueforemail,displayname,quota, etc.
Docs: Nextcloud User provisioning API
Wizard
- Clear, step-by-step terminal prompts with validation at each step.
- Auto-detects CSV delimiter and shows a small preview.
- You can still run the CLI directly via
nextcloud-bulk.
License
Apache-2.0 © 2025 Jaguar Kovalev
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ncbulk-0.1.6.tar.gz.
File metadata
- Download URL: ncbulk-0.1.6.tar.gz
- Upload date:
- Size: 16.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1bd73ab4e658822aa69915b8d31e8e9a72528fa47d12c68862ac2bb890037cc
|
|
| MD5 |
cc8e471e8219d487e20c36a1dcb78337
|
|
| BLAKE2b-256 |
7ed73223133a0ac2ba4bef3ccfa3810d893b41f30bb4c2cf739d918d25f41ee6
|
File details
Details for the file ncbulk-0.1.6-py3-none-any.whl.
File metadata
- Download URL: ncbulk-0.1.6-py3-none-any.whl
- Upload date:
- Size: 16.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e2eebe647c8a449da886dbcfae26e1bc2b8a8f6608176768df8cd404d820e79
|
|
| MD5 |
7e773ecb99858ef714780b2292508896
|
|
| BLAKE2b-256 |
be2e42d2d8f8be9728880f9593beba769a89f40da9c818e8603a6be32265f0b2
|