Sharing a workflow I built to solve a pretty common problem: messy, inconsistently formatted data in Google Sheets.
The use case:
The source sheet had:
- Phone numbers in 5+ formats (
1711019283,+8801711019283,+880-1678-231920) - Email typos in the domain (
gmail.co,gmial.com) - Inconsistent status casing (
active,ACTIVE,pending) - Join dates in multiple formats mixed in one column
Manually fixing this every time new data came in wasn’t sustainable, so I automated it.
The workflow (3 nodes):
- Google Sheets Trigger (
anyUpdate) — fires instantly whenever a row is added or edited, no polling needed - Code node (JavaScript) — runs the actual transformation logic: normalizes phone formats, corrects common email domain typos, standardizes status casing, unifies date formats
- Google Sheets — Append or Update Row — writes the cleaned row back to the sheet, matched by ID, with a
Cleaned_Statuscolumn to track what’s already processed
Google Sheets Trigger (anyUpdate) → Code (JS transform) → Append/Update Row in Sheet
Why this approach:
- Trigger-based instead of scheduled → data is clean within seconds, not batched once a day
- Field-level normalization functions (one function per field type) kept the Code node easy to maintain and extend
- The
Cleaned_Statusflag made it easy to debug and avoid reprocessing rows
Result: zero manual cleanup, fully consistent formatting across the sheet, and a good chunk of hours saved weekly.
Happy to share the workflow JSON if anyone wants to adapt it for their own use case — just let me know what fields you’re normalizing and I can walk through tweaking the Code node logic.


