Skip to content

Organization audit log

The activity log is the canonical "who changed what" feed for your organization. Every material write to a tracked entity — member, attendance, donation, group, ministry, org unit, school, or enrolment — writes one row here, automatically, via a database trigger that can't be bypassed by application code.

Open it from the sidebar under Activity log, or visit /activity-log directly.

Activity log page with entries and filters

Reading an entry

Each row tells you four things in plain English:

Sarah Patel updated membersChanged: email, phone2 hours ago

PieceWhere it comes from
Actor nameactor_id → resolved to the user's full name; falls back to email if the profile is gone
VerbThe action column (created, updated, deleted, restored, merge_members, …)
Entity linkIf the entity type has a detail route (members, groups, ministries, schools), the row links directly to it
Changed columnsFor updated actions, the list of columns that changed — not the before/after values
TimestampRelative ("2 hours ago"); hover to see the absolute date in your org's timezone

System writes — workflow actions, scheduled jobs, edge functions running without an authenticated user — show System as the actor instead of a person.

Filtering

The header has three filters that combine with AND:

  • Entity type — narrow to just members, donations, attendances, etc. Use this when you're investigating a specific table.
  • Action — created, updated, deleted, restored. Defaults to all.
  • Actor email — free-text contains-match. Type @yourchurch.org to see writes from staff only; type a partial address to find one person.

Filters are URL-driven, so you can bookmark or share a filtered view (/activity-log?entity=donations&action=deleted and so on).

TIP

The activity log is infinite-scroll — older entries load as you scroll past the bottom. Apply filters first if you're hunting for one specific event; the unfiltered firehose can be 10,000+ rows per month for a busy org.

Common investigations

"A donation amount changed and I don't know why"

  1. Open /activity-log
  2. Set entity filter to donations
  3. Set action filter to updated
  4. Optionally filter by actor email if you suspect a specific person
  5. Scan for the donation; click through to verify against the current record

The changed-columns hint will tell you whether amount, fund, or just notes were touched.

"Who deleted this member?"

  1. Filter entity to members, action to deleted
  2. Scroll to the date in question
  3. The actor column tells you exactly who did it and when

Deleted members are soft-deleted — they're still in the database with deleted_at set. The audit row preserves the actor; the member row preserves the data. You can restore from the recycle bin within 30 days.

"Did the workflow actually run last night?"

Workflow actions write entries with actor_email = system and metadata describing the workflow run. Filter actor email to system to see only automated activity.

What the data underneath looks like

The org_audit_log table:

sql
id              uuid primary key
organization_id uuid          -- scoped by current_org_id() RLS
actor_id        uuid          -- null for system writes
actor_email     text          -- denormalized for the case the profile is gone
action          text          -- 'created' | 'updated' | 'deleted' | 'restored' | …
entity_type     text          -- table name
entity_id       uuid          -- row id in that table
metadata        jsonb         -- { changed: [...], reason: '...', … }
created_at      timestamptz

The metadata.changed array lists column names. The metadata.reason field, when present, is a free-text justification supplied by the action that wrote the row — for example, the workflow run reason or a manual "marked lost" explanation.

Differences vs the Data & Logs audit tab

The same org_audit_log table powers the audit tab on Data & Logs. The differences are:

/activity-logData & Logs → Audit
Permissionusers.manageconfig.manage
Rows shownInfinite scroll, all rowsLatest 50, no pagination
FiltersEntity, action, actor emailNone
Use it forInvestigations, auditsA quick "what happened recently?" glance during a config session

Most admins use /activity-log day-to-day. The Data & Logs tab exists so a config-only role (no users.manage) can still see recent activity without granting them the bigger permission.

See also