In Zapier - all Polling and Hybrid Triggers use a process called Deduplication to ensure we only trigger for new records added or updated after the Zap is turned on.
For Google Sheets New or Updated Row Triggers - this means we will only trigger the first time we see a value in the Trigger Column.
Let’s assume in my Sheet below - that the Email Column C is my Trigger Column.
In my Zap it would look like this - where Email is configured as my Trigger Column.
So what will happen when we turn this Zap ON?
First - if we add a new row where Email is Blank - the Zap will trigger - since it triggers for all New Rows.
The Zap will trigger for Row 3 below - even though the email column is blank.
We can always add a Filter at step 2 if we only want the Zap to continue only for specific values or when the Email value exists.
Once the row is on the Sheet - if we change the value to cell C3 to “jaredzapier+2@gmail.com” - the Zap will trigger - since it’s the first time we’ve seen the value of “jaredzapier+2@gmail.com” in Cell C3.
If I change it to “jaredzapier+3@gmail.com” the Zap would also trigger - since we have not seen the value of “jaredzapier+3@gmail.com” in cell C3 before either.
But if I then change it back to “jaredzapier+2@gmail.com” the Zap would not trigger again - since we have already seen the value of “jaredzapier+2@gmail.com” in cell C3.
Every time we turn a Zap OFF/ON it resets the deduplication table that we use to look for these types of changes.
The Problem
If we want the Zap to trigger for every change to the Email Column (including values we’ve seen before) - this won’t work given the way that Deduplication works in this Trigger.
So we need another solution.
Sometimes - we’d work around this by adding a Zapier Manager trigger to turn the Zap OFF/ON on a schedule to reset the deduplication table.
But that will only work if we know the schedule to expect changes to the Emaill Column.
If the Email column can be updated at any point - then turning the Zap OFF/ON to reset the deduplication table is not a reliable solution.
The Solution
In order to get the Zap to trigger for every update - we need to put unique data into a trigger column each time our target column is updated.
The easiest way to do this is with a Last Modified Timestamp - since the date and time will always be unique - and will always be data that we have not seen before in the Trigger Column.
So every update to the Email column will update our Last Modified column - and trigger the Zap.
Unfortunately - Google Sheets doesn’t have a built-in way to add a Last Modified Timestamp Column.
But with a few easy steps - we can add this functionality to the Sheet - and generate a timestamp every time the Row (or a specific column in the row) is updated.
Step 1 - Add a Google Script to our Sheet
To make this work - we’re going to add a Script to our Sheet by going to Extensions and App Scripts.
This script will ultimately add the Timestamp in a column on our Sheet.
I would highly encourage you to watch this fantastic YouTube video which is where I learned how to add + configure this script. :)
I’ve also shared my Sheet above - which will already have the code for my example below configured.
You can click here to open the Shared Sheet in a view only format.
And then make a copy to add an editable version to your Sheets account.
When you click Extensions > Apps Script - it should open this Timestamp code.
I want to point out the variables - since we can edit these variables (and then click save) to adjust exactly which changes on the worksheet are adding a timestamp.
The first variable “ws” controls which Worksheet the script will run on.
The second variable “startRow” controls which row we will start looking for changes. In this case I have it set to 2 so we don’t add a timestamp when the header row is updated.
The third variable “targetColumn” controls which column we are monitoring for changes.
In this case - I want to watch for changes to my Email Column - which is in Column D (or the 4th column).
The fourth variable “dateColumn” is the column where we want the timestamp recorded.
You can edit any of these variables to match the data on your Sheet - just make sure to click the Save Disk icon after making any changes.
Step 2 - Testing our Timestamp
Now that our script is configured - we want to update some data on our Worksheet to make sure the timestamp is added when we change column 4 (Email).
What we should notice is that every time we make a change to the Email Column - the timestamp should update automatically.
We now have a timestamp being added in Column A every time the Email column on the Sheet is updated. :)
Configuring our Zap
Back in our Zap - we want to adjust our Trigger configuration to watch the “Last Modified” column as our Trigger Column rather than the “Email” column directly.
Now any time the Last Modified date/time changes (which is every time the email address column is changed) - our Zap will trigger.
I’ve also added a filter to my Zap so it only continues when the Email Address on the Sheet exists (I don’t want to be notified of blanks).
And then I’m sending myself a Gmail message to alert me to this change (since I’m not the one that updates the Sheet).
Live Testing our Zap
Now we’re ready to turn the Zap ON and live test it.
When I turned the Zap ON - these were the 2 email addresses in Column D.
I changed the email address in cell D3 to “jaredzapier+3@gmail.com”.
And the Zap triggered as expected.
So far so good.
What happens when we change the email address in cell D3 back to “jaredzapier+2@gmail.com”?
Our timestamp in A3 changes.
And the Zap triggers again!
We have succeeded in creating a Zap that will trigger for ALL changes to a specific column on a Google Sheet.
Summary
Since Polling and Hybrid triggers in Zapier use deduplication to identify new records - we will only trigger Google Sheets New or Updated Row Zaps the first time we see a value in the trigger column on the Sheet.
By adding an Apps Script to the Sheet - we are able to create a timestamp each time a specific column is updated.
We can then adjust our trigger in Zapier to use this timestamp column as our trigger column.
Since the timestamp will update automatically each time the target column changes - we will have a unique value in our trigger column which enables the Zap to trigger more than once for the same value in the target column.
If you do give this a try - I’d love to hear your experience in the comments below!