Google Calendar ↔ EspoCRM sync
Calendar meetings show up in the CRM by themselves, without duplicates and without the paid extension — a reusable pattern for capturing leads from any source.
What it solves
Keeping the CRM in sync with the calendar is one of those invisible jobs nobody does: every sales meeting that goes unrecorded is a follow-up that never happens. This workflow removes that friction entirely.
How it’s built
The flow reads future events from a Google Calendar, discards cancelled ones and normalizes the data — dates, title, description. The key is using the Google event ID as a unique key: if the meeting already exists in EspoCRM it updates it; if not, it creates it. A loop that processes events one by one, with a pause, avoids hammering the API.
Why it’s interesting
Instead of paying for the official EspoCRM extension, this replicates that function with n8n — free and self-hosted — and on top of that it stays fully customizable. But the most valuable part is the pattern: trigger → normalize → check for duplicate → create/update. That same architecture works to capture leads from a web form, WhatsApp (via Evolution API) or email, creating them as records in EspoCRM automatically. One workflow that solves a concrete problem and, along the way, leaves the template assembled for all the others.
The workflow, in the open
The full workflow is published on GitHub: you can download it, import it into your own n8n and see exactly how it’s built, node by node → sync-calendar-espocrm-sanitizado.json