Clean Google Sheets contact data for phone, email, and dates on an hourly schedule
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
What this workflow does
This workflow has 13 nodes and runs on a schedule (every hour). Along the way it connects Google Sheets.
How it runs
Trigger: On a schedule (every hour).
- Read rows (Google Sheets): read (sheet)
- Read failed? (If): checks a condition and branches into true / false
- Log read failure (Code): runs custom JavaScript code
- Normalize phone/email/date (Code): runs custom JavaScript code
- Invalid email found? (If): checks a condition and branches into true / false
- Flag invalid rows (Google Sheets): append (sheet)
- Only changed rows (If): checks a condition and branches into true / false
- Write cleaned rows back (Google Sheets): update (sheet)
- Write failed? (If): checks a condition and branches into true / false
- Log write failure (Code): runs custom JavaScript code
Services it uses
Before you upgrade to n8n 3.0
Nothing in this workflow is removed in n8n 3.0, so it should import and run after the upgrade.
Nodes used (5)
- Schedule Trigger
n8n-nodes-base.scheduleTrigger - Google Sheets
n8n-nodes-base.googleSheets - If
n8n-nodes-base.if - Code
n8n-nodes-base.code - No Operation, do nothing
n8n-nodes-base.noOp
From the author
Quick overview This workflow runs hourly to read rows from Google Sheets, normalize phone numbers, email addresses, and dates, and write back only the rows that changed while adding an emailvalid flag for downstream filtering. How it works 1. Runs every hour…