Skip to content

Bulk assign & bulk attendance ​

These are the two bulk actions you'll reach for most often. Bulk assign moves a selection of members into an org unit, ministry, or group in a single dialog. Bulk attendance marks them all present at a specific meeting on a specific date. Both go through the same safety net: a dry-run preview, an effective count, and a per-row failure list when things go sideways.

Bulk assign ​

Open the members module, filter or select the people you want to move, and hit Bulk actions β†’ Assign.

Bulk assign dialog

Pick the target type:

TargetWhat happensReplace vs add
Org unitSets member_unit_assignments.unit_idReplaces β€” each member can be assigned to one unit at a time
MinistryInserts into ministry_membersAdds β€” a member can be in many ministries
GroupInserts into group_membersAdds β€” a member can be in many groups

Pick the specific unit/ministry/group from the searchable dropdown, then click Preview. The dialog shows a breakdown:

  • Already there β€” members who are already in the target. They'll be skipped, not duplicated.
  • Moving β€” members being moved from another unit (only for org-unit assigns).
  • New β€” members joining for the first time.

Click Apply to commit. The action queues, and you watch progress on the monitoring page.

Org-unit assigns replace; ministry and group adds layer

Re-running the same org-unit bulk-assign on the same list is a no-op (everyone is already in the unit). Re-running a ministry add is also a no-op β€” the unique index on (member_id, ministry_id) quietly skips duplicates. You can re-run safely.

Bulk attendance ​

Same pattern, different action. With a selection of members loaded, click Bulk actions β†’ Mark attendance.

Bulk attendance dialog

The dialog asks for three things:

  1. Meeting β€” the recurring meeting these members attended (Sunday Service, Wednesday Prayer, Youth Group). See Calendar β€” meetings if you haven't set yours up yet.
  2. Date β€” defaults to today in your org's timezone. You can backfill earlier dates if you're entering attendance after the fact.
  3. Attendance type β€” present, excused, absent. Most bulk runs are present.

Click Preview. The dialog shows:

  • Will mark β€” members who don't have an attendance row for that meeting+date yet.
  • Already marked β€” members with an existing row. Those rows aren't overwritten unless you tick Update existing.

Click Apply and the action queues.

Dates are validated in your org timezone

The dialog uses your org's configured timezone (set in Settings β†’ Organization). If you're traveling and your laptop clock is in a different zone, the picker still shows the org's "today" β€” so you don't accidentally backfill into tomorrow's row.

The safety net ​

Both actions share the same guardrails:

  • Effective count β€” what you'll actually write, after filtering out duplicates and already-applied rows. This is almost always smaller than the selection count.
  • Selection snapshot β€” the action runs on the IDs at the moment you clicked Apply. If someone else edits a member while the action is in flight, that doesn't change what gets written.
  • Per-row failures β€” if a single row errors (permission denied on a specific record, a soft-deleted row), the rest still apply. The failing rows are surfaced on the monitoring page.
  • Cancel mid-flight β€” open the run on the monitoring page and click Cancel. Already-applied rows stay; pending rows skip.

Permissions ​

Bulk assign requires members.edit and the relevant target permission (org_units.edit, ministries.edit, or groups.edit). Bulk attendance requires attendance.write. If you're a shepherd with scoped permissions, you can only assign to and mark attendance for members in your scope.

Next steps ​

  1. Creating a bulk action β€” the broader flow for any bulk action type.
  2. Monitoring runs β€” watch progress, retry failures.
  3. Delete & restore β€” soft-delete and bulk-restore.
  4. Audit log β€” the long-term record of what changed and when.