Automation & Ops

n8n Workflow Systems

Self-Hosted Workflow Automation, from Call Intelligence to Back-Office Ops

Self-hosted n8n running production operations across sales, marketing and back-office work. The flagship pipeline turns call recordings into graded summaries with objections and action points, delivered to Slack and the CRM; the same platform runs the scheduled, integration-heavy work that quietly eats a team's week.

Industry
Sales & Marketing Operations
The problem

Sales managers were listening back to calls to coach from them, and marketing was hand-copying data between forms, sheets and the CRM. Both are the kind of repetitive work that gets skipped under pressure, so coaching became inconsistent and CRM data went stale.

  • Call review does not scale past a certain call volume
  • Coaching feedback arrived only for calls someone had time to hear
  • Manual copying between forms, sheets and the CRM introduced errors
  • Malformed AI output written into a CRM is worse than no output
  • No version history for workflows running live operations
  • Integration work spread across systems never designed to talk to each other
What we built

Self-hosted n8n pipelines that convert call recordings into graded, structured summaries and deliver them to Slack and the CRM, with schema validation before every delivery step and dated exports as rollback points.

  • Recording or transcript in, then transcription, objection detection and categorisation, and scoring against a rubric
  • A validator gate before every delivery step, re-prompting on invalid output rather than posting it
  • Conditional branching and fallback prompting for short, noisy or non-sales calls
  • Scheduled pipelines for publishing, contact sync and reminder dispatch
  • Self-hosted on Docker Compose, keeping credentials and recordings on client-controlled infrastructure
  • Dated workflow exports taken before any change to a live automation
  • Reusable sub-workflows for the parts every build needs: retries, alerting, credential handling

How it was built

Coaching from recordings stops happening at volume

Reviewing sales calls to coach from them requires someone to listen to them. At any real call volume that quietly stops, so coaching becomes sporadic and the calls that most needed review are the ones nobody got to.

The pipeline takes the recording or transcript and returns a graded summary: transcription, objection detection and categorisation, and a score against a defined rubric, delivered where the team already works.

A validator gate before every delivery step

Model output is untrusted input. Every response is checked against a schema before anything downstream fires, and an invalid response is re-prompted rather than posted. That single gate is the difference between an automation and an incident, because a malformed summary written into a CRM is worse than no summary.

Conditional branching handles the cases the happy path ignores: a call too short to analyse, a recording too noisy, or something that is not a sales call at all.

The unglamorous half

Underneath the call intelligence sit the pipelines nobody demos: daily publishing schedules, contact sync, reminder dispatch. These are where manual work actually accumulates, and where a silent failure is most expensive because nobody is watching.

Where n8n earns its place, and where it does not

n8n is worth reaching for when a process crosses several systems that were never designed to talk to each other, runs often enough that doing it by hand is a real cost, and is stable enough that the wiring will not need rebuilding every quarter. Most back-office work in a growing company fits that description exactly.

It is the wrong tool when the logic gets genuinely complex. A visual workflow with forty nodes and nested branches is harder to read, test and change than fifty lines of code, and it cannot be reviewed in a pull request. When a build starts heading that way we move the logic into a small service and let n8n do what it is good at - triggering it, and moving the result somewhere useful.

We will also say plainly when a process should be fixed rather than automated. Automating a broken workflow makes it faster to be wrong, and that conversation is cheaper before the build than after it.

The patterns that get reused on every build

Individual automations differ; the failure modes do not. A handful of patterns carry across every workflow we ship, and they are what separates something that runs for a year from something that breaks quietly in week three.

Idempotency first, because workflows retry and a retry that duplicates its effect sends the same invoice twice. Explicit failure paths, so a broken run alerts a human instead of vanishing - a silent failure is worse than a loud one, because the work simply stops with nobody noticing. Dead-letter handling so a bad record parks for review rather than halting the queue behind it. And credentials held in n8n’s own store rather than pasted into nodes, so rotating a key is one change instead of a search.

Exports as rollback points

Every workflow is exported and dated before a change to a live automation. n8n has no branch history, so the export archive is the version control, and it means any workflow can be returned to a known-good state.

Self-hosted on Docker Compose, so credentials and call recordings stay on infrastructure the client controls.

Before
  • Calls reviewed manually, and only some of them
  • Coaching feedback inconsistent across the team
  • Data copied by hand between forms, sheets and CRM
  • No way to roll back a workflow change
After
  • Every call returns a graded summary with objections and action points
  • Summaries delivered into Slack and the CRM automatically
  • Malformed model output re-prompted instead of written downstream
  • Any workflow restorable from a dated export
Stack
Automation
n8n (self-hosted)JavaScript code nodesValidated webhooks
AI & Speech
Whisper-class transcriptionOpenAI modelsStructured output with retry
Integrations
SlackGoHighLevelGoogle Workspace APIs
Infrastructure
Docker ComposeDated workflow exports