Skip to main content

Data export

Everything Quorum stores for a workspace can be taken out as one archive, at any time and at no charge. This page describes how to get it, what is in it, and what is left out and why. It is generated from the same rules the export follows.

How to get it

  • An administrator opens Settings → Export and deletion and asks for an export. Because it takes the workspace’s data away, it needs a second check: the administrator’s authenticator code if they have one, otherwise a sign-in within the last 15 minutes.
  • The archive is built in the background. The administrator who asked is emailed a download link when it is ready.
  • Downloading needs both that link and a signed-in administrator of the same workspace. While it waits, the archive is stored encrypted, and it is deleted 7 days after the request. One export runs at a time; a new request replaces the previous archive.
  • The request is recorded in the workspace’s audit trail.

What the archive contains

A zip file in format quorum.workspace-export/1, with:

FileContents
tables/<Table>.jsonEvery row Quorum stored for the workspace, one JSON array per table, columns as stored. Times are UTC in ISO 8601. Money columns ending in Cents are hundredths of the workspace currency.
csv/people.csvThe directory: id, email, name, role, imported department, team, cost band, hourly rate and currency, administrator, active, deactivation date.
csv/meetings.csvEvery stored meeting with its times, platform, series, invitee counts, planned and recorded cost, cancelled and private flags. A blank cost is unknown, not zero.
csv/series.csvRecurring series with their occurrences, first and last dates, planned cost and how many occurrences have no price.
csv/costs.csvThe team cost ledger for the period it names: the workspace's retention window, at most 365 days.
manifest.jsonThe format, when it was generated, the workspace, each table with its row count and any columns left out, each CSV with its row count, and every table left out with the reason.
README.txtA plain-text guide to the files and to what was left out.

CSV files are comma-separated UTF-8 with a header row. A cell that starts with a character a spreadsheet would treat as a formula is prefixed with an apostrophe.

Left out of every export

  • Secrets. Credentials, tokens, password hashes and authenticator secrets never leave Quorum, not even to the workspace that stored them.
  • What the product shows to one person only. A person’s private-time blocks, My week settings and pulse answers are not in an administrator’s export. Each person can download them in their own export (below).
  • Operational state. Queued jobs, delivery receipts, caches and the export archives themselves describe how Quorum runs, not the workspace.
  • Some columns and rows, as listed in the register: for example, copies of private meetings, which would show whose calendar held them, and who took part in a conversation, which administrators see only as a count.

One person’s data

  • Anyone who can open their My week can download everything Quorum stores about them in the workspace under Your data, as a JSON file in format quorum.person-export/1. It includes what only they can see. Nobody else is told.
  • An administrator can download what Quorum holds about one person under People → the person → Data requests, to answer that person’s request. It holds what administrators can already see, and the download is recorded in the audit trail.

When you leave

After the agreement ends, administrators can still export for 30 days. Then the workspace is deleted after a 14-day cooling-off period. Switching to another provider under the EU Data Act, and the deletion that follows, are described in the Terms of service. What remains after deletion is described in the Privacy notice.

The archive is a snapshot in Quorum’s own table layout, documented below. It is not an industry-standard interchange format, and Quorum does not import it back. To move it to another system, map its tables to that system’s import. The CSV files are the quickest start.

Register of exported tables

Every table in the archive and the columns it carries, as Quorum stores them.

TableColumnsNotes
Companyid, name, domain, transcriptsEnabled, timeZone, locale, currency, language, costDisplay, meetingRulesVersion, createdAtLeft out: referralCode.
AccessReviewid, companyId, reviewedById, note, summary, reviewedAt—
AssistantQueryid, companyId, channel, outcome, topics, model, inputTokens, outputTokens, createdAtLeft out: employeeId. Who asked is left out: Settings shows usage as a count.
AuditLogid, companyId, actorId, actorType, action, subject, detail, ip, userAgent, seq, prevHash, contentHash, hash, redactedAt, createdAt—
AuditReportid, companyId, weekStart, memo, memoParams, source, findings, createdAt—
CalendarAuditcompanyId, startedAt, endsAt, shareVersion, shareExpiresAt, convertedAt, convertedById—
CalendarEventid, companyId, employeeId, provider, providerEventId, iCalUid, meetingInstanceId, syncedAt, isCancelled, declinedCopies of private meetings are left out: they would show whose calendar held a private meeting.
CostBandid, companyId, name, hourlyCostCents—
Discussionid, companyId, source, externalId, title, url, commentCount, reviewCommentCount, messageCount, participantCount, firstMessageAt, lastMessageAt, waitingSince, firstResponseAt, resolved, scope, authorKind, teamId, proposeMeeting, asyncCostCents, meetingCostCents, reason, reasonCode, reasonParams, proposedAt, decidedAt, decidedById, dismissed, createdAt, updatedAtLeft out: participantIds. Participants are a count only: who took part in which thread is not shown to administrators.
Employeeid, companyId, email, displayName, role, department, teamId, isActive, isAdmin, costBandId, slackUserId, githubLogin, emailVerifiedAt, sessionsValidFrom, costDisplay, deactivatedAtLeft out: passwordHash.
ExternalAccountid, companyId, source, accountId, employeeId, createdAt—
HrisConnectionid, companyId, provider, upstreamSyncedAt, originId, integrationId, tool, status, syncEnabled, autoApply, connectExpiresAt, lastFetchedAt, lastAppliedAt, lastError, coverage, createdAt, updatedAtLeft out: encryptedAccountToken, encryptedConnectLink.
McpTokenid, companyId, name, prefix, teamId, createdById, expiresAt, revokedAt, revokedById, lastUsedAt, createdAtLeft out: tokenHash.
MeetingBudgetid, companyId, teamId, hoursPerPersonPerMonth, moneyCentsPerMonth, digestEnabled, lastDigestMonth, updatedById, createdAt, updatedAt—
MeetingInstanceid, companyId, canonicalKey, seriesId, title, startsAt, endsAt, originalStartsAt, calendarUpdatedAt, calendarCreatedAt, organizerCalendarSeen, organizerEmployeeId, organizerEmail, calendarProvider, meetingPlatform, joinUrl, description, feedbackAgenda, feedbackRequestedAt, isSensitive, cancelledAt, plannedCostCents, actualCostCents, createdAt, flagLowAttendance, flagPoorlyRated, flagOversized, flagNoAgenda, flagOverran, sessionStartsAt, sessionEndsAt—
MeetingResetid, companyId, name, status, teamIds, departments, minInvitees, justifyBy, coolingOffDays, measurementDays, createdById, launchedAt, launchedById, closedAt, createdAt, updatedAt—
MeetingSeriesid, companyId, seriesKey, title, hasEndDate—
Policyid, companyId, largeMeetingThreshold, maxDefaultInvitees, maxDurationMinutes, agendaRequiredOver, protectedDays, protectedStartHour, protectedEndHour, workdayStartHour, workdayEndHour, rulesSetAt, externalSharingAllowed, retentionDays, transcriptRetentionDays, deactivatedRetentionDays, pricePerUserCents, assistantEnabled, emphasis, shortNoticeHours, noMeetingDays, weeklyMeetingHoursCap, selfViewMembers, selfViewMoney, scimGroupsAsTeams, checkInTool, checkInUrl, requireMfaForAdmins, ssoOnly, ssoBreakGlassEmployeeId, privacyContactEmail—
ProviderConnectionid, companyId, provider, externalAccountId, calendarEmployeeIds, status, lastSyncedAt, lastErrorAt, lastError, createdAtLeft out: encryptedCredentials.
ResponseAgreementid, companyId, scope, scopeKey, scopeLabel, teamId, targetWorkingHours, targetShare, ownerTeamId, remindersEnabled, digestEnabled, createdById, createdAt, updatedAt—
ScimGroupid, companyId, displayName, externalId, teamId, createdAt, updatedAt—
ScimTokenid, companyId, hint, createdById, createdAt, expiresAt, lastUsedAt, revokedAt, revokedByIdLeft out: tokenHash.
ScimUseremployeeId, companyId, externalId, managerId, deletedAt, createdAt, updatedAt—
SlackChannelid, companyId, channelId, name, error, checkedAt, createdAt, updatedAt—
SlackGroupPlacementemployeeId, companyId, groupId, teamId, createdAt—
SlackUserGroupid, companyId, slackGroupId, name, handle, disabled, broad, memberSlackIds, outsideCount, teamId, importedAt, seenAt, createdAt, updatedAt—
SlackUserGroupReadcompanyId, readAt, error—
SubprocessorNoticeid, companyId, version, recipients, sentAt—
SubprocessorObjectionid, companyId, version, subprocessor, reason, createdById, createdAt, operatorNotifiedAt—
Teamid, companyId, name, parentId, managerId, createdAt, updatedAt—
TeamLoadWeekid, companyId, teamId, weekStart, score, band, hoursPerPersonPerWeek, focusDayRatio, method, recordedAt—
TeamsChannelid, companyId, channelId, teamId, name, teamName, checkedAt, createdAt, updatedAt—
WorkspaceDeletioncompanyId, requestedById, requestedByRole, reference, requestedAt, scheduledFor, startedAt—
AiRecommendationid, meetingInstanceId, email, phase, classification, rawClassification, confidence, rationale, requiredSection, model, createdAt, analysisRunId—
AsyncBriefid, meetingInstanceId, recipientEmail, content, createdAt—
AttendanceRecordid, meetingInstanceId, email, employeeId, providerIdentity, providerDisplayName, joinedAt, leftAt, durationSeconds, sourceGoogle Meet rows keep their times and durations without the person.
HrisGroupid, connectionId, sourceId, name, type, parentSourceId, deleted, present, teamId—
HrisPersonid, connectionId, sourceId, employeeId, workEmail, displayName, jobTitle, jobTitleAmbiguous, employmentStatus, managerSourceId, groupSourceIds, startDate, terminationDate, deleted, present, lastSeenAt, lastApplied, issue—
InvitedParticipantid, meetingInstanceId, email, displayName, providerIdentity, role, employeeId, isOrganizer, isExternal, rsvp—
MeetingAnalysisRunid, meetingInstanceId, phase, inputHash, model, input, batchCount, meetingPurpose, agendaReview, completedAt, requestedAt, createdAt—
MeetingAttendanceMatchid, meetingInstanceId, providerIdentity, employeeId, confirmedById, confirmedAt—
MeetingResetDeliveryid, resetId, ownerId, kind, channel, status, detail, sentAt, createdAt, updatedAt—
MeetingResetEntryid, resetId, seriesId, ownerId, status, justification, changeAction, insightId, respondedAt, respondedById, retiredConfirmedAt, retiredConfirmedBy, revision, createdAt, updatedAt—
MeetingTranscriptid, meetingInstanceId, source, language, segments, createdAt—
ResponseReminderid, agreementId, discussionId, sentAt, createdAt—
ScimGroupMembergroupId, employeeId—
SeriesInsightid, seriesId, action, whyNow, expectedMonthlySavingsCents, riskOfChange, firstStep, reasonCode, reasonParams, confidence, abstained, model, acceptedAt, acceptedById, dismissedAt, dismissedById, dismissReason, revision, ownerId, targetDate, ownerProgress, ownerProgressAt, assignmentVersion, ownerNotifiedAt, implementedAt, implementedById, implementationNote, createdAt—
ChangeGuideDeliveryid, insightId, assignmentVersion, channel, status, detail, sentAt, createdAt, updatedAt—
OrganizerDecisionid, recommendationId, decision, decidedById, note, overrideClassification, updatedAt, createdAt—

Tables left out

TableWhy it is left out
AccessReviewReminderOperational state Quorum uses to run (queues, delivery receipts, caches) — not information about the workspace.
AnalysisSnapshotA cache of figures Quorum computes from the exported tables.
ChatAddressOperational state Quorum uses to run (queues, delivery receipts, caches) — not information about the workspace.
ConversationAuthorDigestA keyed one-way digest held only until someone answers; never shown anywhere.
LandingAnalyticsAccessQuorum operator-console permissions, not workspace data.
PrivateBusyBlockA private meeting's time per person is shown to that person alone; the person's own export carries it.
SelfViewPreferenceMy week settings are read by no administrator screen or export; the person's own export carries them.
WorkerJobOperational state Quorum uses to run (queues, delivery receipts, caches) — not information about the workspace.
WorkspaceExportThe export archives themselves.
MfaCredentialSecret material — never leaves Quorum, not even to the workspace that stored it.
MfaRecoveryCodeSecret material — never leaves Quorum, not even to the workspace that stored it.
PulseResponsePulse answers are shown only as shares across several answers, never one by one; the person's own export carries theirs.
SlackWebhookReceiptOperational state Quorum uses to run (queues, delivery receipts, caches) — not information about the workspace.
WorkspaceExportChunkThe export archives themselves.
MeetingAnalysisBatchPer-batch model answers kept a week to finish a run; the stored recommendations are exported.

These documents describe how Quorum actually behaves — the data it reads, where it sends it, and how long it keeps it — and are updated whenever that behavior changes.