Hey everyone 👋 First real post here. I've been learning from a lot of you silently, and I just finished my first production-grade automation. Wanted to share the build and get your feedback. The Problem Small businesses capture leads via forms, then **manually copy the data into their CRM**. This means wasted hours, duplicate contacts, and a CRM nobody trusts. What I Built An n8n workflow that: 1. Receives form submissions via webhook 2. Normalizes the data 3. Searches CRM for existing contact by email 4. Updates if exists / Creates if not (deduplication) 5. Creates a deal associated with the contact 6. Sends a Slack notification to the sales team 7. Logs everything in a Google Sheet (audit trail) 8. Error Trigger → Slack alert + fallback sheet if anything fails The Workflow [Webhook: POST /crm-sync] ↓ [Set: Normalize fields] ↓ [HTTP Request: GET /contacts/search by email] ↓ [IF: contact exists?] ├── YES → [HTTP Request: PATCH /contacts/{id}] └── NO → [HTTP Request: POST /contacts] ↓ [HTTP Request: POST /deals] ↓ [Slack: Notify sales team] ↓ [Google Sheets: Append audit log] [Error Trigger] → [Slack: Alert] → [Google Sheets: Fallback save] Tech Stack - n8n (self-hosted on Railway) - Tally.so (form) - HubSpot CRM (REST API v3) - Slack (incoming webhook) - Google Sheets (audit log + fallback) What I Learned 1. API docs are everything — reading HubSpot's docs took longer than building the workflow. 2. Error handling is not optional — broke the API key on purpose to test. Silent failures are unacceptable for a paying client. 3. Test with bad data — missing fields, duplicates, special characters. Each edge case found a bug. 4. Audit logs build trust — the Google Sheet isn't just for debugging. It's what makes the client feel in control. What's Next - Two-way sync (CRM → Google Sheets back) - AI lead scoring (form data → OpenAI → route by score) - WhatsApp Business API notifications If you made it this far, thanks for reading. Any feedback, criticism, or "you should've done X instead" is welcome — that's how I'll get better. 🙏