Google Sheets integration allows supported Novus workflows to send structured information into a spreadsheet.
Instead of manually copying information from Discord into a tracker, you can configure mappings between:
Novus Data
and:
Google Sheets Columns
For example:
Ticket ID
→ Ticket ID
Ticket Owner
→ Discord Member
Ticket Category
→ Category
Resolution
→ Resolution
This is especially useful for workflows where information needs to be filtered, reviewed, tracked, or reported outside Discord.
What Google Sheets Is Best ForGoogle Sheets works best with structured records.
Common examples include:
- Support ticket tracking
- Bug reports
- Guild applications
- Streamer applications
- Partnership applications
- Event registrations
- Support statistics
- Resolution tracking
- Staff escalation tracking
- Operational records
It is generally not the best destination for full ticket conversations.
For full transcripts or file archives, Google Drive is usually a better fit.
How the Integration WorksA typical workflow looks like:
Discord
Member creates a ticket
↓
Novus
collects ticket and form information
↓
Mapping
determines which values should be exported
↓
Google Sheets
receives the structured information
Depending on the enabled workflow, the external record may also be updated as the ticket progresses.
Before Connecting Google SheetsPrepare the spreadsheet you want Novus to use.
For example:
Spreadsheet Name
Novus Support Tracker
Create a worksheet such as:
Tickets
Then create your headers:
| Ticket ID | Member | Category | Status | Created At | Resolution | Closed At |
|---|
Preparing the destination first makes mapping easier.
Use Clear Column HeadersGood column names:
- Ticket ID
- Member
- Category
- Issue Type
- Status
- Escalated
- Handler
- Created At
- Resolution
- Closed At
Avoid unclear names such as:
- Data1
- Value
- Info
- Column A
- Other
Someone reviewing the spreadsheet later should immediately understand what each column represents.
Connecting Your Google AccountWhen Google Sheets integration is available and enabled for your Novus installation, connect the Google account that owns or has appropriate access to the intended spreadsheet.
Use an account appropriate for your support operation.
For example:
Organization Google Account
rather than a personal Google account containing unrelated private files.
The exact Google resources Novus can use depend on the permissions granted to the connected account.
Grant Only Necessary AccessThe connected account should have enough access for the workflow to work.
For example, if Novus needs to create or update spreadsheet rows, the account must be able to edit the target spreadsheet.
Avoid granting unnecessary access to unrelated organizational resources.
Selecting a SpreadsheetAfter connecting the appropriate Google account, select the spreadsheet intended for the workflow.
Example:
Connection
Support Google Account
Spreadsheet
Novus Support Tracker
Do not select a spreadsheet simply because it is the first one available.
Confirm that it is the correct production destination.
Selecting a WorksheetA spreadsheet can contain multiple worksheets.
For example:
Novus Support Tracker
may contain:
- General
- Technical
- Payment
- Applications
Your integration needs to know which worksheet should receive the data.
Single Worksheet SetupA smaller server may use:
Spreadsheet
Novus Support Tracker
Worksheet
Tickets
All supported tickets are stored in the same table.
The Category column identifies the ticket type.
Example:
| Ticket ID | Category | Status |
|---|---|---|
| NOVUS-1001 | General | Resolved |
| NOVUS-1002 | Technical | Open |
| NOVUS-1003 | Payment | Escalated |
This is usually the easiest configuration to maintain.
Multiple Worksheet SetupLarger communities may separate workflows.
For example:
Spreadsheet
Novus Support Tracker
with:
General
Technical
Payment
Applications
Then configure category-to-worksheet mappings.
For example:
| Novus Category | Worksheet |
|---|---|
| General Support | General |
| Technical Support | Technical |
| Payment Support | Payment |
| Applications | Applications |
Field mapping tells Novus where each value belongs.
For example:
| Novus Source | Google Sheets Column |
|---|---|
| Ticket ID | Ticket ID |
| Ticket Owner | Member |
| Ticket Category | Category |
| Ticket Status | Status |
| Created Date | Created At |
| Resolution | Resolution |
| Closed Date | Closed At |
The names do not need to be identical.
For example:
Novus
Ticket Owner
can map to:
Google Sheets
Discord User
What matters is that the mapping points to the correct destination.
Ticket Fields vs Form FieldsA ticket may contain two major types of structured information.
System Fields
Generated or maintained by the ticket workflow.
Examples:
- Ticket ID
- Ticket Owner
- Ticket Category
- Created At
- Status
- Closed At
- Resolution
- Escalation Status
Form Fields
Provided by the member during ticket creation.
Examples:
- Issue Type
- Bug Title
- Guild Name
- Streamer Platform
- Payment Reference
Both can be useful in Google Sheets.
Example Technical Support MappingSuppose the form contains:
Issue Type
Problem Description
Error Message
Your spreadsheet could contain:
| Ticket ID | Member | Issue Type | Problem | Error | Status |
|---|
Mapping:
| Novus Source | Sheet Column |
|---|---|
| Ticket ID | Ticket ID |
| Ticket Owner | Member |
| Form: Issue Type | Issue Type |
| Form: Problem Description | Problem |
| Form: Error Message | Error |
| Ticket Status | Status |
Create a spreadsheet:
Novus Development Tracker
Worksheet:
Bug Reports
Headers:
| Report ID | Reporter | Title | Description | Steps | Area | Frequency | Status | Resolution |
|---|
Then configure:
| Novus Source | Google Sheets |
|---|---|
| Ticket ID | Report ID |
| Ticket Owner | Reporter |
| Form: Bug Title | Title |
| Form: Description | Description |
| Form: Steps to Reproduce | Steps |
| Form: Affected Area | Area |
| Form: Frequency | Frequency |
| Ticket Status | Status |
| Resolution | Resolution |
Member selects:
Report Bug
↓
Form asks:
Bug Title
Launcher closes after login
Description
The launcher disappears after I press Start.
Affected Area
Launcher
Frequency
Always
↓
Novus creates the ticket.
↓
Google Sheets receives a structured Bug Report record when the configured integration trigger runs.
Instead of staff manually copying the report, the information is already organized.
Example Streamer ApplicationCreate:
Spreadsheet
Community Applications
Worksheet
Streamers
Columns:
| Application ID | Discord User | Streamer Name | Platform | Channel | Schedule | Status |
|---|
Mapping:
| Novus Source | Sheet Column |
|---|---|
| Ticket ID | Application ID |
| Ticket Owner | Discord User |
| Form: Streamer Name | Streamer Name |
| Form: Platform | Platform |
| Form: Channel URL | Channel |
| Form: Schedule | Schedule |
| Ticket Status | Status |
This turns the Ticket Form into a structured application record.
Example Guild ApplicationA Guild Application could use:
| Novus Source | Sheet Column |
|---|---|
| Ticket ID | Application ID |
| Ticket Owner | Discord Contact |
| Form: Guild Name | Guild |
| Form: Guild Leader | Guild Leader |
| Form: Active Members | Member Count |
| Form: Active Schedule | Schedule |
| Ticket Status | Status |
Staff can then filter applications without manually reviewing every Discord ticket just to find basic information.
Use Ticket ID as the Primary IdentifierWhenever possible, use:
Ticket ID
as the unique record identifier.
For example:
NOVUS-1084
This makes it easier to locate the same ticket later.
Why Not Use Discord Display Name?A member's display name can change.
For example:
Today:
PlayerOne
Next month:
PlayerOneRF
If your spreadsheet relies only on the display name, identifying historical records becomes harder.
Ticket IDs are better for identifying individual support records.
Create vs UpdateOne of the most important integration concepts is deciding whether an event should:
Create a new row
or:
Update an existing row
These are not the same operation.
Create ExampleWhen:
Ticket Created
Novus may create:
| Ticket ID | Category | Status |
|---|---|---|
| NOVUS-1084 | Technical | Open |
This establishes the external record.
Update ExampleLater:
Ticket Escalated
The same row can conceptually become:
| Ticket ID | Category | Status |
|---|---|---|
| NOVUS-1084 | Technical | Escalated |
Then after resolution:
| Ticket ID | Category | Status |
|---|---|---|
| NOVUS-1084 | Technical | Resolved |
The workflow should update the existing ticket record rather than creating unnecessary duplicates when update behavior is supported.
Why a Unique Key MattersTo update a record, the integration needs a way to identify it.
For example:
Find row where:
Ticket ID = NOVUS-1084
Then update:
Status = Resolved
Without a reliable key, the system may not know which row belongs to the ticket.
Avoid Duplicate RowsA poorly designed workflow might create:
| Ticket ID | Status |
|---|---|
| NOVUS-1084 | Open |
| NOVUS-1084 | Escalated |
| NOVUS-1084 | Resolved |
| NOVUS-1084 | Closed |
This may be useful for an intentional event log, but it is usually undesirable for a ticket tracker.
A normal tracker would usually maintain one primary row per ticket.
Tracker vs Event LogThese are two different spreadsheet designs.
Ticket Tracker
One row per ticket.
Example:
| Ticket ID | Status | Resolution |
|---|---|---|
| NOVUS-1084 | Resolved | Launcher configuration fixed |
Event Log
Multiple rows per ticket.
Example:
| Ticket ID | Event |
|---|---|
| NOVUS-1084 | Created |
| NOVUS-1084 | Escalated |
| NOVUS-1084 | Resolved |
| NOVUS-1084 | Closed |
Choose the design that matches your reporting needs.
Recommended DefaultFor most communities:
Ticket Tracker
is easier to manage.
Use:
One ticket = one row
and update that row as the workflow progresses when your enabled integration supports updates.
Status MappingKeep status values consistent.
For example:
- Open
- AI Handling
- Staff Handling
- Escalated
- Resolved
- Unresolved
- Inactive
- Closed
Avoid inconsistent variations such as:
Done
completed
Finished
RESOLVE
if they all mean the same thing.
Consistent statuses make filtering and reporting easier.
Boolean MappingSome values may be simpler as:
Yes / No
For example:
Escalated
| Ticket ID | Escalated |
|---|---|
| NOVUS-1001 | No |
| NOVUS-1002 | Yes |
This is easier to filter than storing long explanations in the same column.
Multi-Choice Form MappingSuppose a form asks:
Affected Platforms
and allows:
- Windows
- Android
- Website
A member selects:
Windows + Website
The mapped value may be represented as a combined value such as:
Windows, Website
depending on the integration's supported output format.
Design the destination column with multi-value responses in mind.
Optional Field MappingSome form fields may be optional.
For example:
Error Code
A member may leave it blank.
Your integration should expect valid empty values rather than requiring fake placeholders.
Avoid forcing members to enter:
N/A
unless your workflow genuinely requires it.
Do Not Map Every FieldA Technical Support ticket may contain dozens of pieces of information throughout the conversation.
Your Sheet probably only needs:
- Ticket ID
- Member
- Issue Type
- Status
- Escalation
- Resolution
- Dates
Keep the spreadsheet focused on its purpose.
Full Conversations Do Not Belong in Normal Tracker RowsAvoid mapping an entire ticket transcript into:
Conversation
inside one Google Sheets cell.
This becomes difficult to:
- Read
- Filter
- Search
- Maintain
- Secure
Use Google Drive or your configured transcript destination for full archives.
Linking Sheets and DriveWhen both integrations are available, you can use:
Google Sheets
as the index
and:
Google Drive
as the archive.
For example:
| Ticket ID | Status | Transcript |
|---|---|---|
| NOVUS-1084 | Resolved | Archive Reference |
The corresponding transcript can live in the configured Drive destination.
Different Categories Can Use Different SheetsYou do not need to force every workflow into one spreadsheet.
For example:
Technical Support
→ Support Operations
Bug Report
→ Development Tracker
Streamer Application
→ Community Applications
Payment Support
→ Restricted Transaction Tracker
This can improve privacy and staff access control.
Payment Data Requires Extra CareDo not automatically map entire Payment Support conversations.
Store only information required for your operation.
For example:
| Field | Destination |
|---|---|
| Ticket ID | Ticket ID |
| Member | Discord Member |
| Payment Reference | Reference |
| Status | Status |
| Verified By | Staff |
| Closed At | Closed At |
Avoid storing unnecessary payment information.
Spreadsheet Permissions MatterGoogle Sheets has its own access controls.
A private Discord ticket exported to a spreadsheet that everyone can access is no longer private.
Always review:
- Spreadsheet owner
- Editors
- Viewers
- Shared links
- Organization access
Discord permissions do not automatically protect exported Google data.
Separate Sensitive Worksheets When NecessaryInstead of placing everything in:
Novus Support Tracker
consider:
General Support Tracker
and a separate restricted:
Transaction Tracker
This makes access control easier.
Test With a Temporary SpreadsheetBefore using your production spreadsheet, create:
Novus Integration Test
Add simple columns:
| Ticket ID | Member | Category | Status |
|---|
Then map only those fields.
Create one test ticket and verify the result.
Once the basic workflow works, add more fields.
Test One Mapping at a TimeIf you configure 20 mappings immediately and something fails, identifying the problem becomes difficult.
A better process is:
- Map Ticket ID.
- Test.
- Add Member.
- Test.
- Add Category.
- Test.
- Add form fields.
- Test.
- Add status updates.
- Test.
This isolates configuration problems.
Test Realistic DataDo not test everything using:
test
Use realistic examples such as:
Bug Title
Launcher crashes after selecting server
Affected Area
Launcher
Description
Launcher closes after server selection without displaying an error.
This helps reveal:
- Text-length issues
- Mapping mistakes
- Formatting problems
- Multi-choice behavior
- Empty-field handling
Symptom:
Ticket data appears, but in the wrong place.
Check:
Category
↓
Spreadsheet
↓
Worksheet
Make sure the correct destination is selected for the workflow.
Common Mapping Problem — Missing ColumnSuppose the mapping expects:
Resolution
but the worksheet header was changed to:
Final Result
Depending on the implemented mapping method, the destination may no longer match the configured field.
When changing spreadsheet structure, review the Novus mapping afterward.
Common Mapping Problem — Renamed WorksheetIf:
Technical
becomes:
Tech Support
an existing configuration referencing the old worksheet may require updating.
Avoid casually renaming production resources without reviewing connected workflows.
Common Mapping Problem — Duplicate RecordsIf the same Ticket ID appears several times unexpectedly, review whether the workflow is configured to:
Create
when it should:
Update
Also verify that the configured unique key remains available.
Common Mapping Problem — Blank ValuesIf one column remains empty, check:
- Is the Novus source correct?
- Is the form field optional?
- Was the member actually asked that field?
- Does the source belong to the selected Ticket Category?
- Is the destination column correct?
A blank value does not always mean the integration failed.
Common Mapping Problem — Permission ErrorIf Novus can see a spreadsheet but cannot update it, review the connected account's access.
It may have:
Viewer
permission instead of:
Editor
permission.
Common Mapping Problem — Old Form MappingSuppose you originally had:
Form Field
Game Issue
and later replaced it with:
Issue Type
Existing mappings may still point to the old field.
Whenever you significantly modify a Ticket Form, review connected mappings.
Form Changes Can Affect IntegrationsThis is an important maintenance rule.
Changing:
Ticket Form
can affect:
Google Sheets Mapping
For example:
Guild Members
is renamed to:
Active Member Count
Review whether your existing mapping still points to the intended source.
Spreadsheet Changes Can Affect NovusThe reverse is also true.
Changing:
Google Sheets
can affect:
Novus Integration
For example:
- Worksheet deleted
- Column removed
- Spreadsheet moved or access changed
- Connected account loses permission
Treat integration configuration and destination structure as connected components.
Recommended Support TrackerFor general support operations:
Spreadsheet
Novus Support Operations
Worksheet
Tickets
Recommended columns:
| Column |
|---|
| Ticket ID |
| Member |
| Category |
| Issue Type |
| Status |
| Escalated |
| Handler |
| Created At |
| Resolution |
| Closed At |
This is a strong starting point without collecting unnecessary conversation data.
Recommended Bug TrackerSpreadsheet
Novus Development
Worksheet
Bug Reports
Columns:
| Column |
|---|
| Report ID |
| Reporter |
| Title |
| Description |
| Steps |
| Component |
| Frequency |
| Status |
| Resolution |
| Reported At |
| Closed At |
Spreadsheet
Novus Applications
Worksheets:
- Streamers
- Guilds
- Partners
Example Streamer columns:
| Column |
|---|
| Application ID |
| Discord User |
| Streamer Name |
| Platform |
| Channel |
| Schedule |
| Status |
| Submitted At |
| Reviewed At |
For most ticket tracking use cases:
Ticket Created
↓
Create Sheet record
↓
Ticket Activity
↓
Update selected operational fields when needed
↓
Staff Escalation
↓
Update escalation information
↓
Resolution
↓
Update status and resolution
↓
Ticket Closed
↓
Finalize closing information
This gives staff one structured record for the complete ticket lifecycle.
Google Sheets Is Not a Backup of DiscordA spreadsheet integration should have a specific operational purpose.
Do not assume that exporting selected ticket fields creates a complete backup.
A proper ticket archive may require:
- Transcript
- Attachments
- Metadata
- Closing information
Those belong in the appropriate transcript/archive workflow.
Google Sheets Is Not the Knowledge BaseDo not automatically treat every spreadsheet row as verified AI Knowledge.
For example:
NOVUS-1084 | Launcher | Resolved
does not contain enough verified information to teach Novus how to solve the problem.
The Knowledge Base should contain the actual reusable verified solution.
Recommended SeparationUse:
Google Sheets
for:
What tickets exist and what happened to them?
Use:
Google Drive
for:
Where is the archived file or transcript?
Use:
Knowledge Base
for:
How should this problem be solved next time?
This distinction keeps Novus organized.
Production ChecklistBefore using a Google Sheets workflow with real members, verify:
- Correct Google account is connected.
- Correct spreadsheet is selected.
- Correct worksheet is selected.
- Connected account has required access.
- Column headers are clear.
- Ticket ID is mapped.
- Unique record strategy is defined.
- Create vs update behavior is understood.
- System fields map correctly.
- Form fields map correctly.
- Optional fields are handled.
- Multi-choice values are handled.
- Status values are consistent.
- Duplicate records are not created unintentionally.
- Sensitive fields are excluded.
- Spreadsheet permissions are appropriate.
- Ticket Form changes are reflected in mappings.
- Spreadsheet changes are reflected in Novus.
- Test tickets successfully reach the expected destination.
- Integration failures can be identified.
- Production data is not being sent to a temporary test spreadsheet.
If you are setting this up for the first time, keep it simple:
Spreadsheet
Novus Support Tracker
Worksheet
Tickets
Mapping
Ticket ID → Ticket ID
Ticket Owner → Member
Ticket Category → Category
Ticket Status → Status
Created At → Created At
Resolution → Resolution
Closed At → Closed At
Once that works reliably, add category-specific form fields and more advanced mappings.
Next Step
Continue to Connecting Google Drive to Novus.