Skip to main content

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 (groups or group), multiple groups separated by a configurable delimiter.
  • Default quota and language via CLI/TUI or per-row via quota and language columns.
  • 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.

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 row quota).
  • --language en – default language (overridden by row language).
  • --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

  1. Basic creation with default quota and language:
nextcloud-bulk --input list.csv --quota 10GB --language en
  1. 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
  1. Welcome mode and update existing users:
nextcloud-bulk --input list.csv --welcome --update-existing
  1. Dry-run:
nextcloud-bulk --input list.csv --dry-run --verbose

API Notes

  • Create: POST /ocs/v2.php/cloud/users – params: userid, optional password, repeated groups[], optional language.
  • Update fields: PUT /ocs/v2.php/cloud/users/{userid} with key/value for email, 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

ncbulk-0.1.2.tar.gz (15.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ncbulk-0.1.2-py3-none-any.whl (15.3 kB view details)

Uploaded Python 3

File details

Details for the file ncbulk-0.1.2.tar.gz.

File metadata

  • Download URL: ncbulk-0.1.2.tar.gz
  • Upload date:
  • Size: 15.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ncbulk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 2a792f1392489cbdb5784b091e9e2fb25c8d3668f3be568551029a214cf5e202
MD5 1930a4f81ce798a7e2f9abcaefa52ce1
BLAKE2b-256 8352567b0e144330d318acc3ace77c340c96a9c2df5f39a5442478d146901c1b

See more details on using hashes here.

File details

Details for the file ncbulk-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: ncbulk-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 15.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ncbulk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 30c720e33a6537c0d80ace24d6ff1d1ec28be9c76c5aac78688ac30597546da2
MD5 7ee9e05d15be576f18ca501abeef7182
BLAKE2b-256 cb4cb2e5f43097c826fc4330cea0fbc5f9b970444156cbd7248e2d529cfb3daa

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page