Gmail Integration in AppSheet: Now in Public Preview! (Beta)

Hi everyone,

We're pleased to announce the public preview of Gmail integration with AppSheet - something we know has been a longstanding community request. With this preview launch, your Gmail inbox can seamlessly connect to the full breadth of downstream processes AppSheet automation already offers.

How it works

This new capability allows users to seamlessly connect their apps to their authorized Gmail accounts so that incoming emails can trigger AppSheet automations.   

Creators can select specific Labels in their Gmail inboxes that they want AppSheet to monitor. When that label is added to or removed from a message (for instance, when your Gmail filters automatically apply a label to incoming messages) the Gmail integration fires and sends metadata about that specific message to AppSheet. Creators can use these metadata โ€“ such as sender name, subject, message body, and more โ€“ in downstream processes. 

Gmail trigger data works similarly to the existing โ€œreturn valueโ€ feature: AppSheet doesnโ€™t automatically store any email data unless creators specifically configure the bot to write it to a table. We built it this way to allow Creators maximum flexibility for how to use the Gmail event and have maximum control over how inbox data is used.

How it can help

Using Gmail as a trigger for AppSheet automations, you could: 

  • Automatically add new leads to an AppSheet-based CRM database as soon as the new lead email arrives
  • Create a support ticket any time a customer sends a message to your customer service inbox 
  • Notify inventory managers when a new order has been sent and tracking numbers are available

And more. 

To get started, 

  • (Optional) Create email labels in your Gmail account that will be used to trigger the event
  • In your AppSheet app, create a bot in Automation
  • Select Gmail under event source 
  • Add the desired Gmail account and complete the authentication
  • Select labels to watch, automations can be triggered by one or both of the following options,
    • Add label to an email
    • Remove label from an email, Labels added or removed, whether manually or through rules, will be treated identically
  • Complete the bot with a process, such as a data action or a task

Fig.1 Setting up Gmail as an event sourceBot_AppSheetGmail (1).gif

Your integrated Gmail account can be found in the Sources section of the My Account page.

Fig.2 Sources in the My Account pageScreenshot 2025-02-07 at 11.14.34โ€ฏAM.png Fig.3 Illustration of Gmail Integration in AppSheetfeature_demo (1).gif

 

Things to note:

  • We know thereโ€™ve been extensive requests to support Attachments in Gmail. While this initial beta release doesn't yet include support for them, itโ€™s something weโ€™re actively working to include in the full feature release coming later this year.
  • This integration allows Gmail to trigger automations. It does not introduce Gmail as a full AppSheet data source. While Gmail fields available for use in downstream automation are shown as columns in the data explorer, no AppSheet table is actually created.
  • If you want to save Gmail messages in an app table, youโ€™ll need to add a data action process that adds rows to your desired location.

This feature is currently rolling out and will be available to all AppSheet users and Workspace Core users within the next few days. For more information see the documentation.

Thanks for your patience with us as we developed this feature. We know itโ€™s been a long time coming and are eager to hear your feedback about this preview launch.

cc: @markcollins 

 

Solved Solved
26 63 7,050
1 ACCEPTED SOLUTION

The integration between AppSheet and Gmail relies on the Gmail API and unfortunately Gmail does not support Collaborative Inbox or email delegation through the API.

The best solution we have found is to have the email from the group sent to your personal email box and use a Gmail filter to label messages from the group. This allows setting up an AppSheet automation using that label to handle messages to the group email address.

View solution in original post

63 REPLIES 63

Wow.

There isn't even an App Script trigger for gmail. Crazy to have this before that.

Awesome! Can't wait to try this out.

Oh man, this is amazing! It's going to make getting email stuff into your app so much simpler now, before there was way too much involved. 

Kudos to the team and a huge thank you. Can't wait simplify my AI email processing workflows. ๐Ÿ’ช

This feature looks great for personal use by a single user, and I really appreciate the effort the AppSheet team put into it.

Do you know of any real-world business situations where it could be useful? For example, Salesforce has a feature that gathers all emails in one place, keeping the conversation together in account view. The best part is that it's designed for multiple users, so it's not just the admins who can import gmail data to it, but all the app users too. 

AppSheet Gmail integration trigger can cover several niche or internal use cases (especially for singleโ€‘user workflows, testing, or centralized notifications), it is not yet suitable for the multiโ€‘user, personalized, and dynamic B2B workflows typical in business settings. For broader use casesโ€”such as individual sales communications, multiโ€‘agent support, or personalized supplier interactionsโ€”a more advanced solution that supports multiple user accounts would be required.

 


@MultiTech wrote:

before there was way too much involved. 


Screenshot 2025-02-12 at 5.41.49โ€ฏPM.png

It's straightforward and faster with tools like n8n. n8n has nodes for gmail: https://n8n.io/integrations/gmail-trigger/ 

https://n8n.io/integrations/gmail/ 

 

I know Gmailโ€”via secure OAuth flowsโ€”is complex maybe that could be a reason but I see other platforms somehow do it.

๐Ÿ˜†๐Ÿคฃ it cracks me up when I see people leaving AppSheet to go to some other platform to do something that you could totally do inside AppSheet + script. 

Go ask your favorite language model: 

"I need a Google app script that I can run from my AppSheet app that will take a thread or message ID from Gmail and...." 

It's actually ridiculously easy to get this to work, no third party service needed. ๐Ÿ’ช

https://www.appsheet.com/start/a952b233-6957-45ba-aa8a-33e441c13757?refresh=1#appName=AnswerPortal-1...

I agree with you. Until last month, I was using AppScript to create complex workflows, including automations and AI integrations. While itโ€™s great for modularized or simple use cases, Iโ€™ve since switched to n8n, self-hosted open-source tool that doesnโ€™t require any coding. I simply love the fact that I donโ€™t have to write code anymore. Since appsheet is also no-code, and N8N is, itโ€™s amazing combination for managing simple to complex workflows.

Iโ€™m not against AppScript; itโ€™s still a great tool, but n8n is just a better fit for my needs. 

This is amazing!

@vchitra  @markcollins 

Thank you for bringing new powerful additional features to AppSheet. I quickly tested.

I expected that we could be able to access to the attachment files (multiple files) as we see the column name of [Related Gmail Event Attachment];-

Koichi_Tsuji_0-1739013752895.png

My test was to save all the meta data of Gmail to the Google Sheet table where the set of the column names are identical of the virtual Gmail table. I passed the value of this column to the sheet, however, nothing was saved, the column in the sheet side was left null.  Could you give us clarify in terms of how this particular column stands for?

 

 

 

As noted in the announcement, support for attachments is not implemented yet for this preview release. We are actively working on adding attachment support and this column and the associated attachments table will be populated when that work is complete.

Thanks for the feedback, it does help to know that there is interest in the community for attachment support!


@markcollins wrote:

As noted in the announcement, support for attachments is not implemented yet for this preview release. We are actively working on adding attachment support and this column and the associated attachments table will be populated when that work is complete.

Thanks for the feedback, it does help to know that there is interest in the community for attachment support!


Good to hear your teams are actively working on this possibility. Hope to see the same for testing!

Ideally, the app creators have option to save or not the attachment file to somewhere in Drive (possibly inside the app default folder?). Once the option is turned on, then attachment files are automatically archived into such folder. Then the attachment file column (Enumlist or List type) would yield array (list in terms of AppSheet terms) such as ; -

DocId=xxxxx, DocId=yyyyy, DocId=zzzzzz

rather than relative paths to reach out those file.

File reference using FILE id is make our life more easy.

 

 

 

 

 

@vchitra @markcollins 

In the meantime, I conducted a test out of curiosity as usual.ใ€€We could get the ID for the single Gmail through [Message ID] column. I assumed we could open that particular email with URL construction. My suspect was right.

With the syntax like this;

"https://mail.google.com/mail/u/0/#inbox/"&[Message ID]

I could open the original Email with browser.

It could be good idea if you mention this tips and tricks to your original documentation. Off course, the owner of the email (account who own the gmail) could access to the original sources through this special URL thouhg.

@takuya_miyai 

 

This is great news, thank you.

My first input from testing is that I can't create a task for calling a webhook from a gmail event (posting to google spaces). Still trying.

1000063825.png

โ€ƒ

There is now an "Gmail Event Table" available in my case, but after I select it and save it,it switches back to "no table"

One more suggestion.

The Gmail event is gonna work without deploying the app. Better to mention to this fact somewhere in your documentation.  

@vchitra @markcollins 

I tested if I could connect with the delegated Gmail account or group email. However, sadly both failed.  

Is there any plan to accommodate to set the Group Email inbox and/or delegated Gmail account as sources for Automation trigger?

@takuya_miyai 

 

@vchitra @markcollins 

Considering the most of the daily works under the possible use cases for this new features, the workflow is mostly always "collaborative works " with other team member , where the GROUP EMAIL (Collaborative Inbox, which is called as a terms under the GWS) is engaged. Hence, the connecting those Group Email from GMAIL automations could be possibly one of MUST function I assume. (in addition to Delegated Email account to connect)

 

 

The integration between AppSheet and Gmail relies on the Gmail API and unfortunately Gmail does not support Collaborative Inbox or email delegation through the API.

The best solution we have found is to have the email from the group sent to your personal email box and use a Gmail filter to label messages from the group. This allows setting up an AppSheet automation using that label to handle messages to the group email address.

What is is the hell preview when editoling app on the mobile browser today? In stead of showing preview option to modify bot, task and project when I clicking, AppSheet just show chat apps?

I think this is a bug.

Please fix it asap.

 

1000017974.jpg

Please contact AppSheet Support for help with this.

@vchitra @markcollins 

Thank you for the great new features that will lead to a new customer experience!๐Ÿค—

Gmail's standard labels are usually localized and deployed in various languages.

2025-02-08_20h38_32.png2025-02-08_23h05_51.png

Even in AppSheet, the label name should be changed according to the language setting of the linked account.

2025-02-08_23h07_00.png

If this is difficult in the short term, a link to the label name contrast page would be helpful.

That's amazing. Thank you so much for this addition!

Great! Tested it out and found out:

- Email [body] must be text. If the email body is html, APPSHEET cannot pull the email body but returned blank "". Would be great if [body] supports more email format.

- Email  [Related Gmail Event Attachment] field doesn't work out properly... Would be great if there is any examples on how to use this field.

 

Thanks!

When posting to google chat space,using a chat app, I think it uses HTML for body, and it doesn't look good (readable), being one use case where I'd like it to be text

Most emails with an text/html part for the body also include a text/plain part. There are two possible requests here:

  1. Extract plain text from the text/html part and return is as [Body] if the email doesn't include a text/plain part
  2. Return the content of the text/html part in a new [Body Html] column in addition to the plain text in [Body]

Either or both of these could be supported. Which are you requesting?

As noted in the announcement, attachment support is not yet implemented for this preview release but we are actively working on adding support for attachments.

I would prefer option 2 where there are 2 separate returned values.  One for the plaintext body and another for the html body(if it exists).

I would also need both: HTML and Plain Text.

  • HTML for the Detail View (LongText with HTML formatting)
  • Plain Text for the "Send a notification" Bot (HTML would not work here)

So with every new email the user would get a notification (Plain Text) and can open the email in the app's detail view (HTML).

Thank you very much for providing this wonderful feature!
Now, after trying it out in my environment, I have the following suggestions.

In the following document, there are columns that can be retrieved from Gmail and their descriptions, but it would be easier to understand if you could also include the data type.
https://support.google.com/appsheet/answer/15725655?visit_id=638747660803918048-603208318&p=gmail-au...
ใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆ่ชฌๆ˜Ž.png

I think that when this function is used in Automation, it is often necessary to โ€œadd new rowโ€ to spreadsheets, etc. In that case, it is necessary to set the appropriate data type in the table on the receiving end of the record addition.

Certainly, the Expression Assistant in Automation describes this, but I think it would be better if it is also described in the documentation.
ใƒ‡ใƒผใ‚ฟๅž‹.png

I would appreciate your consideration.

 

@vchitra @markcollins @lizlynch 

And yet few citizen developers know that they need to use Enumlist to insert a List.

It might be a good idea to supplement this point in the Help as well.


Exactly!

@vchitra @markcollins @lizlynch 

As Takuya_miyai has already followed up on this, when adding records to another table using โ€œAdd new rowsโ€, the following columns in the table to be added should have the EnumList type.

ใƒปLabels
ใƒปToAddresses
ใƒปCcAddresses
ใƒปRelated Gmail Event Attachments

When setting these to EnumList type, what is the appropriate โ€œbase typeโ€ to set?
It would be appreciated if you could also include this information in the documentation.

It would be super cool if values of the email could be directly used by the AI feature instead of having to have an intermediate step of saving the email data to a table and then triggering an AI process.

@vchitra @markcollins 

I don't have this working as yet: I get the error that the Event has an invalid condition, but the Condition box isn't visible like on other bots:

Screenshot 2025-02-10 13.34.38.png

Has anyone else encountered this issue?  I can see from the post by Koichi_Tsuji he had the Condition box, but it appears to be missing for me.

Thanks for the feedback! This is an error we will fix.

You can get into this state if you create a bot with an App event source and add a condition before changing the event source to Gmail. You should be able to fix this by changing the event source back to  App and removing the condition text before changing the event source to Gmail.

The Gmail event source doesn't currently support including a condition. In general, we expect Gmail filters to be used to label messages on the Gmail side and that is preferred to using a condition in the AppSheet automation event configuration.

We'd like to hear if you have a scenario where using a condition on the Gmail event is required or preferred to using conditions in Gmail.

Conditions in the App are simpler to maintain as all other app related filtering / condition setting is done in the App. So having the option to further restrict what will fire the automation would be good.

Hi,

I just saw this functionality so I have set it up in the last hour and think I have a use case for you.

I have an IT help desk section in my app, if a user emails me directly and I have a quick reponse, I then have a situation where I label the thread as "IT Help" it's adding two IT Help Tickets, one for each email in the thread.

I want the second email in the thread to be attached to the IT Help Ticket comments in a different table.

By capturing the Thread ID and Message ID on my IT Ticket I can then use the bot to determine if the subsequent emails in the thread get attached to the first emails created IT Ticket.

 

DecisionDecisionAdd new IT TicketAdd new IT TicketAdd a comment to an IT TicketAdd a comment to an IT Ticket

 

Ideally the IT Ticket and Comments are all done in AppSheet, but user uptake is tricky at the moment. So it would be good to flag an email thread and move on. But without a 'behaviour' option on the event to filter out conditions, or a conditional step, it is not obvious what you want to do with threaded conversations.

I don't want IT Tickets getting created for every email in the thread, but that is what it seems to do in the converstation layout gmail defaults to.

What I guess I might have to call an action, with both options, or have an incoming email table instead, add these to it, then use a bot on the messages added to that email table and then condition in that bot to add to an IT Ticket or an IT Ticket converstation.

The non-conditioning setup is okay for when people send to a placeholder account help @for example but it's the instance of labelling them manually that I don't think are fully fleshed out.

 

Cheers

If you use a slice to show the last message of a thread ID, then you add a virtual column ref to the messages with the same thread ID, you donโ€™t need 2 table and you can see the conversation

Thanks for your comment. I am not quite sure what problem you are looking to solve and which two tables are you referring to? 

I want an IT Tickets table, IT User Updates and IT Only Updates tables. This way I can be certain that User Comments are completly isolated from IT only cmments (no accidental dev backend changes) and all staff can interact with the IT Ticket system and history (not just email threads). I have images, links, files, likes and pin to tops features of comments that I don't want cluttering up my IT Ticket table.Ticket-IT.png

I already have a ref back to the IT Ticket, in which I can get the Thread ID if I want and tickets can be created in the app.

 

Everything is fine, but I think it was a good use case for why a decision is necessary in a GMail bot, becuase it chucks all the thread in at once and I can't see how that would always be useful.

Ok, understand, sure a conditionnal should be great for the gmail event