Slack + Postgres: cleaner SDR outreach reporting
Your SDR reporting gets messy fast. Outreach happens across email (and maybe LinkedIn or WhatsApp), replies come in at odd hours, and your “source of truth” turns into a patchwork of tabs, screenshots, and gut feel.
Sales ops usually ends up cleaning it up. A growth lead feels it when experiments can’t be measured. And an agency owner juggling multiple clients sees the same chaos. This Slack Postgres reporting automation gives you consistent logging plus a daily Slack summary you can actually trust.
You’ll learn what the workflow does, what you need to run it, and how to think about customizing it for your lead sources and compliance rules.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Slack + Postgres: cleaner SDR outreach reporting
flowchart LR
subgraph sg0["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", pos: "b", h: 48 }
n1["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Load Test Leads"]
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Enrich Lead via HTTP"]
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Enrichment Success", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Merge Enrichment Data", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set Enrichment Failed Flag", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse Enrichment Response"]
n7@{ icon: "mdi:robot", form: "rounded", label: "AI - Generate Outreach Email", pos: "b", h: 48 }
n8@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model - Email Gen", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "Structured Output - Email", pos: "b", h: 48 }
n10["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Extract Email Fields"]
n11@{ icon: "mdi:message-outline", form: "rounded", label: "Send Email", pos: "b", h: 48 }
n12@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Email Event Log", pos: "b", h: 48 }
n13["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Email Sent to DB"]
n14["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Simulate Reply Text"]
n15@{ icon: "mdi:robot", form: "rounded", label: "AI - Classify Reply Intent", pos: "b", h: 48 }
n16@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model - Reply Cl..", pos: "b", h: 48 }
n17@{ icon: "mdi:robot", form: "rounded", label: "Structured Output - Classifi..", pos: "b", h: 48 }
n18@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route by Intent", pos: "b", h: 48 }
n19@{ icon: "mdi:swap-vertical", form: "rounded", label: "Mark as Qualified", pos: "b", h: 48 }
n20["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Qualified Event"]
n21["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Calculate Follow-up Date"]
n22@{ icon: "mdi:swap-vertical", form: "rounded", label: "Prepare Follow-up Event", pos: "b", h: 48 }
n23["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Follow-up Event"]
n24@{ icon: "mdi:swap-vertical", form: "rounded", label: "Mark as Not Interested", pos: "b", h: 48 }
n25["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Closed Lost Event"]
n26@{ icon: "mdi:swap-vertical", form: "rounded", label: "Mark as Needs Review", pos: "b", h: 48 }
n27["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Manual Review Event"]
n28@{ icon: "mdi:cog", form: "rounded", label: "Aggregate All Results", pos: "b", h: 48 }
n29["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Calculate Final Stats"]
n30["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Extra Enrichment API 2"]
n31["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Normalize Enrichment Data"]
n32@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Extra Enrichment Success", pos: "b", h: 48 }
n33@{ icon: "mdi:swap-vertical", form: "rounded", label: "Log Enrichment Success", pos: "b", h: 48 }
n34["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Enrichment Success Ev.."]
n35@{ icon: "mdi:swap-vertical", form: "rounded", label: "Log Enrichment Failure", pos: "b", h: 48 }
n36["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Enrichment Failed Event"]
n37["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Compute Lead Score"]
n38@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Branch by Lead Score", pos: "b", h: 48 }
n39@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set HIGH Score Attributes", pos: "b", h: 48 }
n40["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log HIGH Score Event"]
n41@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set MEDIUM Score Attributes", pos: "b", h: 48 }
n42["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log MEDIUM Score Event"]
n43@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set LOW Score Attributes", pos: "b", h: 48 }
n44["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log LOW Score Event"]
n45["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Generate LinkedIn Message"]
n46["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Generate WhatsApp Message"]
n47@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if Multichannel Eligible", pos: "b", h: 48 }
n48["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Simulate LinkedIn Send"]
n49@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check LinkedIn Send Success", pos: "b", h: 48 }
n50["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log LinkedIn Success"]
n51["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log LinkedIn Failure"]
n52["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Simulate WhatsApp Send"]
n53@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check WhatsApp Send Success", pos: "b", h: 48 }
n54["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log WhatsApp Success"]
n55["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log WhatsApp Failure"]
n56["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Create Subject Variants A/B"]
n57["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Subject Variant"]
n58@{ icon: "mdi:robot", form: "rounded", label: "AI - Draft Meeting Follow-up", pos: "b", h: 48 }
n59@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model - Meeting", pos: "b", h: 48 }
n60@{ icon: "mdi:robot", form: "rounded", label: "Structured Output - Meeting", pos: "b", h: 48 }
n61["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Create Meeting Object"]
n62["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Meeting Record"]
n63["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Calculate Extended Follow-up.."]
n64["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Extended Follow-up Ev.."]
n65["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Send Slack Notification"]
n66["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Manual Review Notification"]
n67["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Aggregate by Lead Score"]
n68["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Aggregate by Channel"]
n69["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Prepare Analytics Daily Row"]
n70["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Analytics Daily Row"]
n71["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Enrich Final Stats"]
n72["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Validate Email Format"]
n73["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Check Suppression List"]
n74@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if Invalid or Suppressed", pos: "b", h: 48 }
n75["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Invalid Lead Event"]
n76["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Load Config"]
n77["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Check Email Rate Limit"]
n78@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Email Rate OK?", pos: "b", h: 48 }
n79["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Email Rate Limited"]
n80["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Check LinkedIn Rate Limit"]
n81@{ icon: "mdi:swap-horizontal", form: "rounded", label: "LinkedIn Rate OK?", pos: "b", h: 48 }
n82["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log LinkedIn Rate Limited"]
n83["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Check WhatsApp Rate Limit"]
n84@{ icon: "mdi:swap-horizontal", form: "rounded", label: "WhatsApp Rate OK?", pos: "b", h: 48 }
n85["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log WhatsApp Rate Limited"]
n86["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Set Geo Compliance Flags"]
n87@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Do Not Contact", pos: "b", h: 48 }
n88["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Geo Blocked"]
n89@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check GDPR Sensitive", pos: "b", h: 48 }
n90["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log GDPR Sensitive"]
n91@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check if Needs Human Review", pos: "b", h: 48 }
n92["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Send Human Review Alert"]
n93["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Escalated to Human"]
n94["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Calculate Best Send Time"]
n95["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Log Send Time Planned"]
n96["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Estimate Lead Cost"]
n97["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Build Execution Metadata"]
n98["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/postgres.svg' width='40' height='40' /></div><br/>Insert Execution Run Record"]
n99@{ icon: "mdi:robot", form: "rounded", label: "AI - Generate Human Summary", pos: "b", h: 48 }
n100@{ icon: "mdi:brain", form: "rounded", label: "OpenAI Chat Model - Summary", pos: "b", h: 48 }
n101@{ icon: "mdi:robot", form: "rounded", label: "Structured Output - Summary", pos: "b", h: 48 }
n102["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Merge Summary with Stats"]
n103["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Prepare Final Output"]
n104["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/slack.svg' width='40' height='40' /></div><br/>Notify Team – Run Summary"]
n11 --> n12
n76 --> n86
n78 --> n79
n78 --> n45
n0 --> n1
n1 --> n72
n88 --> n28
n18 --> n19
n18 --> n91
n18 --> n21
n18 --> n24
n18 --> n26
n81 --> n82
n81 --> n49
n19 --> n58
n84 --> n85
n84 --> n53
n37 --> n38
n71 --> n29
n96 --> n71
n90 --> n94
n23 --> n28
n44 --> n7
n20 --> n28
n57 --> n77
n14 --> n15
n68 --> n69
n38 --> n39
n38 --> n41
n38 --> n43
n87 --> n88
n87 --> n89
n89 --> n90
n89 --> n94
n2 --> n3
n10 --> n56
n13 --> n14
n40 --> n7
n51 --> n52
n50 --> n52
n55 --> n11
n54 --> n11
n26 --> n65
n103 --> n104
n28 --> n67
n29 --> n97
n61 --> n62
n62 --> n20
n25 --> n28
n95 --> n37
n4 --> n30
n72 --> n73
n77 --> n78
n73 --> n74
n30 --> n32
n79 --> n45
n35 --> n36
n33 --> n34
n93 --> n19
n75 --> n28
n42 --> n7
n24 --> n25
n48 --> n80
n52 --> n53
n52 --> n83
n67 --> n68
n27 --> n28
n12 --> n13
n22 --> n23
n92 --> n93
n65 --> n66
n97 --> n98
n94 --> n95
n21 --> n63
n3 --> n6
n3 --> n5
n102 --> n103
n86 --> n87
n43 --> n44
n80 --> n81
n83 --> n84
n45 --> n46
n46 --> n47
n82 --> n49
n85 --> n53
n31 --> n33
n6 --> n4
n39 --> n40
n9 -.-> n7
n15 --> n18
n70 --> n71
n70 --> n96
n5 --> n30
n99 --> n102
n49 --> n50
n49 --> n51
n53 --> n54
n53 --> n55
n91 --> n92
n91 --> n19
n56 --> n57
n98 --> n99
n59 -.-> n58
n100 -.-> n99
n69 --> n70
n41 --> n42
n60 -.-> n58
n101 -.-> n99
n58 --> n61
n7 --> n10
n8 -.-> n7
n32 --> n31
n32 --> n35
n74 --> n75
n74 --> n2
n47 --> n48
n47 --> n11
n36 --> n76
n66 --> n27
n34 --> n76
n64 --> n22
n63 --> n64
n17 -.-> n15
n16 -.-> n15
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n7,n9,n15,n17,n58,n60,n99,n101 ai
class n8,n16,n59,n100 aiModel
class n3,n18,n32,n38,n47,n49,n53,n74,n78,n81,n84,n87,n89,n91 decision
class n13,n20,n23,n25,n27,n34,n36,n40,n42,n44,n50,n51,n54,n55,n57,n62,n64,n66,n70,n75,n79,n82,n85,n88,n90,n93,n95,n98 database
class n2,n30,n48,n52,n65,n92 api
class n1,n6,n10,n14,n21,n29,n31,n37,n45,n46,n56,n61,n63,n67,n68,n69,n71,n72,n73,n76,n77,n80,n83,n86,n94,n96,n97,n102,n103 code
classDef customIcon fill:none,stroke:none
class n1,n2,n6,n10,n13,n14,n20,n21,n23,n25,n27,n29,n30,n31,n34,n36,n37,n40,n42,n44,n45,n46,n48,n50,n51,n52,n54,n55,n56,n57,n61,n62,n63,n64,n65,n66,n67,n68,n69,n70,n71,n72,n73,n75,n76,n77,n79,n80,n82,n83,n85,n86,n88,n90,n92,n93,n94,n95,n96,n97,n98,n102,n103,n104 customIcon
Why This Matters: Outreach Data You Can’t Trust
Outbound teams move quickly, which is great until you try to answer basic questions. How many leads were contacted today? Which segment is responding? Did we accidentally email a suppressed domain or a restricted country? When the process is manual, the “report” is usually built after the fact. Someone exports a list, someone else checks replies, and the team debates results in Slack with different numbers in different screenshots. It’s not just annoying. It slows down experiments, creates compliance risk, and makes it hard to prove what’s working.
The friction compounds. Here’s where it breaks down in real teams.
- Outreach events happen in several tools, so you can’t reconstruct a clean funnel without manual stitching.
- Compliance checks (suppression lists, geo/GDPR logic) get skipped when people are rushing.
- Reply handling is inconsistent, which means follow-ups depend on who noticed what first.
- Daily reporting becomes a chore, and the team stops trusting the numbers anyway.
What You’ll Build: Auditable Outreach Logging + Daily Slack Summaries
This workflow turns your SDR pipeline into something you can measure end-to-end. Leads come in from a source you control (a webhook, Google Sheets, test data, or a CRM export). Each lead gets validated and filtered against suppression rules and geo/GDPR requirements, so you’re not spraying emails where you shouldn’t. Then the workflow enriches the record using external APIs, scores and tiers the lead (HIGH/MEDIUM/LOW), and generates personalized outreach copy using an OpenAI chat model. Messages are sent with rate limiting and quiet hours, replies are classified for intent, and every meaningful event is logged to Postgres. At the end of the run, the workflow aggregates analytics and posts a human-readable summary to Slack.
The workflow starts with lead ingestion and compliance checks. From there it enriches, scores, and generates outreach across email (plus optional LinkedIn/WhatsApp paths). Finally, it logs everything in Postgres and sends a daily Slack recap that highlights outcomes and exceptions.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you run 100 leads per day (the workflow’s own example volume). Manually, it’s easy to burn about 2 minutes per lead on validation and suppression checks, another 3 minutes on enrichment/research, and at least 2 minutes logging outcomes, which is roughly 12 hours of busywork. With this workflow, you kick off the run once (or trigger it automatically), wait for enrichment and messaging to process, and you get a Slack summary plus Postgres records at the end. The work shifts from “data wrangling” to only handling the handful of leads that need manual review.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Postgres for event logs and daily analytics rows.
- Slack to receive daily summaries and alerts.
- OpenAI API key (get it from the OpenAI dashboard API keys page).
Skill level: Intermediate. You won’t write code, but you should be comfortable mapping fields and testing runs end-to-end.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
Leads enter from your chosen source. You can load test leads, pull rows from Google Sheets, or accept new leads via a webhook (handy if your forms or CRM can send real-time events).
Validation and compliance logic runs first. The workflow checks email formatting, suppression lists (blocked domains and addresses), and geo/GDPR rules that block or flag restricted locations. This is where you prevent the “we shouldn’t have contacted them” scenario.
Enrichment, scoring, and outreach content are generated. HTTP requests pull company/lead details from enrichment providers. Then lead scoring assigns a tier (HIGH/MEDIUM/LOW). An AI agent with an OpenAI chat model produces personalized email copy, plus A/B subject variants, and can create LinkedIn/WhatsApp message versions if you want multichannel consistency.
Outreach goes out and everything gets logged. Emails are sent through your SMTP provider with rate limiting and quiet hours, and the workflow can simulate other channels until you connect real integrations. Each event is written into Postgres tables (lead events, daily analytics, meetings, run metadata). A Slack message summarizes what happened, including exceptions like manual-review replies.
You can easily modify the lead source and scoring rules to match your ICP. See the full implementation guide below for customization options.
Troubleshooting Tips
- Slack credentials can expire or need specific permissions. If things break, check your Slack app scopes and the n8n Slack credential connection test first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Quick Answers
Plan for about an hour if your credentials and Postgres tables are ready.
No. You’ll mostly connect accounts, map fields, and test with a small batch of leads.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage plus any enrichment API fees you add.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and you probably should. You can replace Google Sheets or test data with a CRM or webhook trigger, then adjust the “Compute Lead Score” logic to match your ICP. Many teams also swap the enrichment HTTP requests to whatever provider they already pay for. If you don’t need multichannel, you can disable the LinkedIn/WhatsApp branches and keep email only, which makes reporting cleaner.
Usually it’s expired credentials or missing Slack app scopes. Reconnect the Slack credential in n8n and make sure the app is allowed to post in the target channel. If you’re posting to private channels, confirm the app was invited. Also check if your workspace has admin restrictions that block new apps.
It’s built for batch processing (think 100 leads per run), and you can scale up as long as you respect rate limits and your SMTP provider’s sending policies.
Often, yes, because this workflow needs branching logic, batching, and detailed database logging. n8n handles complex paths without turning your automation into a pile of separate zaps, and self-hosting can be a big deal if you run high volume. Zapier and Make can still work if you only want simple routing and a basic Slack message. The moment you care about audit trails, compliance checks, and daily analytics, the build tends to get awkward there. If you’re unsure, Talk to an automation expert and describe your volume and channels.
Once this is running, your outreach stops being a guessing game. Postgres keeps the receipts, Slack keeps everyone aligned, and you get your time back for the work that actually moves revenue.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.