Web-to-Odoo Lead Funnel (UTM-ready) Create crm.lead records in Odoo from any webform via a secure webhook. The workflow validates required fields, resolves UTMs by name (source, medium, campaign) and writes standard lead fields in Odoo. Clean, portable, and production-ready. Key features - ✅ Secure Webhook with Header Auth (x-webhook-token) - ✅ Required fields validation (firstname, lastname, email) - ✅ UTM lookup by name (utm.source, utm.medium, `utm.campa

Web-to-Odoo Lead Funnel (UTM-ready) Create crm.lead records in Odoo from any webform via a secure webhook. The workflow validates required fields, resolves UTMs by name (source, medium, campaign) and writes standard lead fields in Odoo. Clean, portable, and production-ready. Key features - ✅ Secure Webhook with Header Auth (x-webhook-token) - ✅ Required fields validation (firstname, lastname, email) - ✅ UTM lookup by name (utm.source, utm.medium, utm.campaign) - ✅ Clean consolidation before create (name, contactname, emailfrom, phone, description, type, UTM IDs) - ✅ Clear HTTP responses: 200 success / 400 bad request Prerequisites - Odoo with Leads enabled (CRM → Settings → Leads) - Odoo API Key for your user (use it as the password) - n8n Odoo credentials: URL, DB name, Login, API Key - Public URL for the webhook (ngrok/Cloudflare/reverse proxy). Ensure WEBHOOKURL / N8NHOST / N8NPROTOCOL / N8NPORT are consistent - Header Auth secret (e.g., x-webhook-token: <your-secret>) How it works 1. Ingest – The Webhook receives a POST at /webhook(-test)/lead-webform with Header Auth. 2. Validate – An IF node checks required fields; if missing → respond with 400 Bad Request. 3. UTM lookup – Three Odoo getAll queries fetch IDs by name: - utm.source → sourceid - utm.medium → mediumid - utm.campaign → campaignid If a record is not found, the corresponding ID remains null. 4. Consolidate – Merge + Code nodes produce a single clean object: { name, contactname, emailfrom, phone, description, type: "lead", campaignid, sourceid, mediumid } 5. Create in Odoo – Odoo node (crm.lead → create) writes the lead with standard fields + UTM Many2one IDs. 6. Respond – Success node returns 200 with { status: "ok", leadid }. Payload (JSON) Required: firstname, lastname, email Optional: phone, notes, source, medium, campaign Quick test Notes - Recent Odoo versions do not use the mobile field on leads/partners: use phone instead. - Keep secrets and credentials out of the template; the user will set their own after import. - If you want to auto-create missing UTM records, add an IF after each getAll and a create on utm..
Download the workflow JSON file after purchase.
Open n8n → click the menu → Import from File.
Select the downloaded JSON and import.
Set up credentials for each node that requires them.
Click Execute Workflow to test, then activate.
Setup guide included
Purchase to unlock the full step-by-step guide
No reviews yet
Be the first to buy and share your experience.
Leave a review
Sign in to share your experience with this workflow.
Create a free account to purchase workflows.
Need help setting this up?
Book a 3-hour live setup session with an Agility consultant.