Intermediate~20 min setupEmail & ProductivityVerified April 2026
Gmail logo
Google Sheets logo

How to Track Support Tickets from Gmail to Google Sheets with N8n

Automatically log support emails from a shared Gmail inbox to Google Sheets with status columns for manual ticket management.

Steps and UI details are based on platform versions at time of writing β€” check each platform for the latest interface.

Best for

Teams wanting a lightweight ticketing system with custom email processing and manual status updates.

Not ideal for

High-volume support teams needing real-time notifications or automatic ticket assignment.

Sync type

polling

Use case type

import

Real-World Example

πŸ’‘

A 12-person B2B startup uses this to track customer support requests sent to [email protected]. Before automation, they forwarded emails manually and lost track of response times. Now every support email automatically becomes a row with ticket ID, status column, and assignment field that team members update as they work cases.

What Will This Cost?

Drag the slider to your expected monthly volume.

/mo
505005K50K

Each platform counts differently β€” Zapier: 1 task per trigger. Make: 1 operation per module per record. n8n: 1 execution per run.

Prices shown for annual billing. Based on published pricing as of April 2026.

Estimated ROI

1000

min saved/mo

$583

labor value/mo

Free

no platform cost

Based on ~2 min manual effort per operation at $35/hr fully loaded labor cost.

Implementation

Skip the setup

Import this workflow directly into n8n

Copy the pre-built n8n blueprint and paste it straight into n8n. All modules, filters, and field mappings are already configured β€” you just need to connect your accounts.

Before You Start

Make sure you have everything ready.

Access to a shared Gmail account used for support emails
Google Sheets document with edit permissions
N8n instance running (self-hosted or cloud)
Gmail API enabled in Google Cloud Console

Field Mapping

Map these fields between your apps.

FieldAPI Name
Required
Ticket IDticket_id
Date Receiveddate
Customer Emailfrom.value[0].address
Subject Linesubject
Message BodytextPlain
Statusstatus
2 optional fieldsβ–Έ show
Assigned Toassigned_to
Prioritypriority

Step-by-Step Setup

1

Workflows > New > + > Gmail > Trigger

Create new workflow

Set up a new N8n workflow that will poll your shared Gmail inbox for support emails. This becomes your ticket ingestion system.

  1. 1Click 'New Workflow' from the N8n dashboard
  2. 2Click the '+' icon to add your first node
  3. 3Select 'Gmail' from the apps list
  4. 4Choose 'Gmail Trigger' as your starting node
βœ“ What you should see: A Gmail trigger node appears on your canvas with configuration options visible on the right panel.
2

Node Settings > Credentials > Gmail OAuth2

Connect Gmail account

Authenticate with your shared support Gmail account. N8n needs permission to read emails from your support inbox.

  1. 1Click 'Create New' under Gmail Credentials
  2. 2Select 'OAuth2 API' as the credential type
  3. 3Click 'Sign in with Google' and authenticate
  4. 4Grant permissions for Gmail read access
βœ“ What you should see: Green checkmark appears next to credentials with your Gmail address displayed.
⚠
Common mistake β€” Make sure you're signing in with the shared support email account, not your personal Gmail.
n8n settings
Connection
Choose a connection…Add
click Add
Gmail
Log in to authorize
Authorize n8n
popup window
βœ“
Connected
green checkmark
3

Gmail Node > Parameters > Query

Configure email filters

Set up filters to only capture emails sent to your support address or containing support keywords. This prevents personal emails from becoming tickets.

  1. 1Set 'Format' to 'Simple' in the Gmail trigger
  2. 2Enter your support email in the 'Query' field like 'to:[email protected]'
  3. 3Set 'Max Results' to 50
  4. 4Enable 'Mark as Read' to prevent re-processing
βœ“ What you should see: Query field shows your filter and Max Results is set to 50.
⚠
Common mistake β€” Don't leave Query blank or you'll import every email including spam and personal messages.
Gmail
GM
trigger
filter
Condition
matches criteria?
yes β€” passes through
no β€” skipped
Google Sheets
GO
notified
4

Gmail Node > + > Google Sheets > Append

Add Google Sheets node

Connect the spreadsheet where tickets will be logged. This sheet becomes your ticket dashboard with columns for status tracking.

  1. 1Click '+' after the Gmail node
  2. 2Select 'Google Sheets' from the apps list
  3. 3Choose 'Append' as the operation
  4. 4Connect your Google account credentials
βœ“ What you should see: Google Sheets node appears connected to Gmail with 'Append' operation selected.
5

Google Sheets Node > Parameters > Document

Select target spreadsheet

Choose the specific Google Sheet where tickets will be logged. Create one first if it doesn't exist.

  1. 1Click 'By URL' under Document
  2. 2Paste your Google Sheets URL
  3. 3Select the worksheet tab name (usually 'Sheet1')
  4. 4Set 'Value Input Option' to 'Raw'
βœ“ What you should see: Sheet URL appears in the Document field with correct worksheet selected.
⚠
Common mistake β€” The spreadsheet must be shared with edit permissions for your connected Google account.
6

Google Sheets Node > Parameters > Columns

Map email fields to columns

Configure which email data goes into which spreadsheet columns. This creates structured ticket records from raw email data.

  1. 1Click 'Add Column' to create field mappings
  2. 2Map 'Date' to '{{ $json.date }}'
  3. 3Map 'From' to '{{ $json.from.value[0].address }}'
  4. 4Map 'Subject' to '{{ $json.subject }}'
  5. 5Map 'Body' to '{{ $json.textPlain }}'
  6. 6Add 'Status' column with default value 'New'
  7. 7Add 'Assigned To' column with empty default
βœ“ What you should see: Seven column mappings appear with proper Gmail field expressions and default values.
⚠
Common mistake β€” Use 'textPlain' not 'textHtml' for the body or you'll get messy HTML tags in your sheet.
Gmail fields
from
subject
snippet
body
date
available as variables:
1.props.from
1.props.subject
1.props.snippet
1.props.body
1.props.date
7

Gmail Node > + > Set > ticket_id

Add ticket ID generation

Create unique ticket IDs for each support email. This helps reference specific tickets when updating status.

  1. 1Click '+' between Gmail and Sheets nodes
  2. 2Add 'Set' node from the Data section
  3. 3Add new field called 'ticket_id'
  4. 4Set value to 'TK-{{ new Date().getTime() }}'
  5. 5Update Sheets mapping to include ticket_id column
βœ“ What you should see: Set node appears between Gmail and Sheets with ticket_id field configured using timestamp.
8

Gmail Trigger > Settings > Poll Times

Configure polling schedule

Set how often N8n checks for new support emails. Balance responsiveness with API limits.

  1. 1Click on the Gmail trigger node
  2. 2Set 'Poll Times' to 'Every 5 minutes'
  3. 3Enable 'Always Output Data' to false
  4. 4Set 'Trigger On' to 'Specific Times'
βœ“ What you should see: Gmail node shows 5-minute polling interval in the trigger settings.
⚠
Common mistake β€” Don't poll faster than every 2 minutes or you'll hit Gmail's rate limits with high email volume.
9

Workflow Canvas > Execute Workflow

Test the workflow

Run a test execution to verify emails are properly formatted as ticket rows in your spreadsheet.

  1. 1Click 'Execute Workflow' button
  2. 2Send a test email to your support address
  3. 3Wait 5-10 minutes for polling cycle
  4. 4Check execution history for successful runs
  5. 5Verify test ticket appears in Google Sheets
βœ“ What you should see: Execution panel shows green success status and your test email appears as a new row in Sheets.
⚠
Common mistake β€” If no data appears, check that your Gmail query filter isn't too restrictive and emails exist in the inbox.
n8n
β–Ά Run once
executed
βœ“
Gmail
βœ“
Google Sheets
Google Sheets
πŸ”” notification
received
10

Workflow Canvas > Active Toggle

Activate workflow

Turn on automatic execution so new support emails continuously create tickets in your sheet.

  1. 1Click the 'Inactive' toggle in the top right
  2. 2Confirm activation in the dialog box
  3. 3Verify status shows 'Active' with green indicator
  4. 4Save the workflow with a descriptive name
βœ“ What you should see: Workflow shows 'Active' status and begins polling Gmail every 5 minutes automatically.

Drop this into an n8n Code node.

JavaScript β€” Code Node// Add this JavaScript in a Function node to extract phone numbers from email body
β–Έ Show code
// Add this JavaScript in a Function node to extract phone numbers from email body
const text = $input.first().json.textPlain;
const phoneRegex = /(?:\+1[-.\s]?)?\(?([0-9]{3})\)?[-.\s]?([0-9]{3})[-.\s]?([0-9]{4})/;

... expand to see full code

// Add this JavaScript in a Function node to extract phone numbers from email body
const text = $input.first().json.textPlain;
const phoneRegex = /(?:\+1[-.\s]?)?\(?([0-9]{3})\)?[-.\s]?([0-9]{3})[-.\s]?([0-9]{4})/;
const phone = text.match(phoneRegex);
return { phone: phone ? phone[0] : null };

Scaling Beyond 500+ emails/day+ Records

If your volume exceeds 500+ emails/day records, apply these adjustments.

1

Add batch processing

Insert a split-in-batches node to process emails in groups of 50. This prevents memory issues and reduces the chance of timeouts when your support inbox gets flooded.

2

Implement duplicate detection

Add a function node that checks if the email Message-ID already exists in your sheet. This prevents re-processing emails when polling intervals overlap during high traffic periods.

3

Increase polling intervals

Move from 5-minute to 10-minute polling to stay within Gmail's quota limits. At 500+ emails daily, frequent polling hits rate limits and causes execution failures.

Going live

Production Checklist

Before you turn this on for real, confirm each item.

Troubleshooting

Common errors and how to fix them.

Frequently Asked Questions

Common questions about this workflow.

Analysis

VerdictWhy n8n for this workflow

Use N8n for this if you want full control over your ticket data and need custom field processing. You can add JavaScript nodes to parse email signatures, extract phone numbers, or categorize tickets by keywords. The code flexibility beats Zapier's rigid field mappings. Skip N8n if you need real-time notifications under 30 seconds β€” its polling trigger adds 2-5 minute delays that Make's instant webhooks avoid.

Cost

This workflow uses 2 operations per email: one Gmail read and one Sheets append. At 200 support emails monthly, that's 400 operations total. N8n's Starter plan ($20/month) includes 5,000 operations, so you're well covered. Zapier would cost $30/month for the same volume on their Professional plan. Make offers 10,000 operations for $16/month, making it the cheapest option for basic email-to-sheet logging.

Tradeoffs

Zapier has better Gmail parsing with pre-built fields for sender names and email threads β€” you get clean data without writing expressions. Make offers instant Gmail webhooks instead of polling, so tickets appear in sheets within 10 seconds of arrival. But N8n wins on customization: you can add JavaScript nodes to clean email formatting, extract customer data from signatures, or route urgent tickets to different sheets based on keywords.

Gmail's API paginates at 100 emails, so if your support inbox gets flooded, you'll need to add a loop node to process batches. The textPlain field sometimes returns empty for HTML-only emails β€” add a fallback to textHtml with HTML stripping. Sheets appends can fail silently if your column count doesn't match the data array, leaving gaps in your ticket log that you won't notice until later.

Ideas for what to build next

  • β†’
    Add Slack notifications for urgent tickets β€” Create a branch that sends high-priority tickets to a #support Slack channel when keywords like 'urgent' or 'down' appear in the subject line.
  • β†’
    Build customer response automation β€” Add an auto-reply Gmail node that sends confirmation emails with ticket IDs so customers know their request was received and logged.
  • β†’
    Create ticket analytics dashboard β€” Set up a secondary workflow that summarizes daily ticket counts, response times, and team workload from your Google Sheets data into a reporting dashboard.

Related guides

Was this guide helpful?
← Gmail + Google Sheets overviewn8n profile β†’