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. ๐