Audit Log
The audit log provides a complete record of significant actions taken within your organization. It is essential for security, compliance (21 CFR Part 11, GDPR Article 30), and troubleshooting.
Accessing the Audit Log
Navigate to Settings > Audit Log. Only organization Owners and Admins can access the audit log. Full audit log access requires the Enterprise plan (feature gate level 3).
How It Works
Activities are logged by mutation handlers throughout the application using the logActivity helper function. The activity log serves two purposes:
- Entity-level audit trail -- "What happened to this item/board/project?"
- Org-level activity feed -- "What has been happening across the organization?"
Each log entry is scoped to the organization via organizationId for multi-tenant isolation.
What Is Logged
The audit log captures the following categories of events:
Authentication Events
- User login (successful and failed).
- User logout.
- Password changes and resets.
- Two-factor authentication enabled, disabled, or backup codes regenerated.
- SSO login events and configuration changes.
Organization Events
- Organization settings changes (name, slug, branding).
- Member invited, added, role changed, or removed.
- Integration connected, toggled, or disconnected.
- API key created, revoked, rotated, or deleted.
- Billing and plan changes.
Workspace Events
- Workspace created, updated, archived, or deleted.
- Workspace member added or removed.
- Workspace role changes.
Board Events
- Board created, updated, or deleted.
- Items created, updated, or deleted.
- Field definitions added, modified, or removed.
- Comments added, edited, or deleted.
- KPI values recorded or modified.
- Form submissions.
Event Details
Each log entry contains:
| Field | Type | Description |
|---|---|---|
| ID | String | Unique identifier for the log entry (cuid2) |
| Timestamp | DateTime | When the event occurred (UTC) |
| Actor | Object | The user who performed the action (name, email, image) |
| Action | String | What was done (e.g., item.updated, member.invited) |
| Entity Type | String | Type of object affected (e.g., item, board, member) |
| Entity ID | String | The unique ID of the affected object |
| Metadata | JSONB | Additional context (e.g., field changed from X to Y) |
| Organization ID | String | The organization this event belongs to |
Querying the Audit Log
By Entity
Retrieve all activity for a specific entity (item, board, project):
- Specify the entity type (e.g.,
item,board,project,comment). - Specify the entity ID (the primary key of the entity).
- Results are ordered by most recent first, with a default limit of 50 entries (max 200).
By Organization
Retrieve a feed of recent activity across the entire organization for the dashboard. Results include actor details (name, email, avatar) for rendering the activity feed.
Filtering and Searching
Use the filter bar at the top of the audit log to narrow results:
- Date range -- View events within a specific time period.
- Actor -- Filter by the user who performed the action.
- Action type -- Filter by event category (auth, org, workspace, board).
- Target -- Search for events related to a specific item, board, or member.
Exporting the Audit Log
Click Export to download the audit log as a CSV file. You can export the full log or apply filters first to export a subset.
Retention
| Plan | Retention Period |
|---|---|
| Free | 7 days |
| Pro | 90 days |
| Enterprise | Unlimited (configurable) |
Enterprise customers can configure custom retention periods and forward audit log events to an external SIEM system via the API.
Implementation Details
The audit log is powered by the activity_log database table. Key implementation details:
- Write path -- Mutations log events via the
logActivityhelper function, which inserts a record with the actor ID, action, entity reference, and JSONB metadata. - Read path -- The activity router provides two query endpoints:
listByEntity(for entity-specific history) andlistByOrg(for the organization-wide feed). - Actor enrichment -- Log entries are joined with the
userstable to include actor name, email, and avatar for rendering the activity feed. - Pagination -- The default query limit is 50 entries (max 200) to prevent excessive data transfer. The frontend can implement "load more" pagination.
- Tenant scoping -- All queries include a
WHERE organizationId = ?clause to ensure strict multi-tenant isolation.
Related Features
- Security Settings -- MFA and session events appear in the audit log.
- GDPR Compliance -- Audit log supports data access and erasure tracking.
- API Keys -- API key lifecycle events are logged.
- Integrations -- Integration configuration changes are logged.