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:
And more.
To get started,
Fig.1 Setting up Gmail as an event source
Your integrated Gmail account can be found in the Sources section of the My Account page.
Fig.2 Sources in the My Account page Fig.3 Illustration of Gmail Integration in AppSheet
Things to note:
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! Go to 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.
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.
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. ๐ช
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!
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];-
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.
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.
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.
โ
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.
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?
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.
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.
Even in AppSheet, the label name should be changed according to the language setting of the linked account.
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:
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.
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...
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.
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.
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:
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.
Decision
Add new IT Ticket
Add 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.
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