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.3.tar.gz (15.4 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.3-py3-none-any.whl (15.5 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ncbulk-0.1.3.tar.gz
  • Upload date:
  • Size: 15.4 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.3.tar.gz
Algorithm Hash digest
SHA256 eef1a67075aa7e09864f86e47b93a4929312b687506369b05cecd482d160dac4
MD5 3dfccf1c032a7121461488b40f056881
BLAKE2b-256 eb95c1f2fab34341e3cc2b69c7bc040edf07f62aa870574a3dc88f5ba8eb0322

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ncbulk-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 15.5 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 4816c8634bb9d8e5db16af3d2d7d349d3e595d06c7706b652ef6ea6920fe041f
MD5 d67089db31fddb563e3310da8231a666
BLAKE2b-256 d5d854ab519f26ab2422b6c00f93d6d256fe63fc8293d2fa36de643da075d0ef

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