End-to-end sales automation we built for ourselves: it monitors job postings, filters for fit, drafts the outreach, and hands a short, pre-qualified queue to a human to send. Runs 24/7.
The Upwork job feed is a firehose, and most of it is noise. Reviewing it by hand doesn't scale; skimming it fast means missing the postings that are actually a fit. Step one was wiring the feed into our own system. n8n polls the Upwork API every few minutes; every posting lands in a canonical Postgres queue with its full context; the same queue threads through to Slack where the actual outreach gets read and sent. The Upwork side, our side, and the human-in-the-loop side are one pipe now.
Each new posting hits a scoring step that weighs the kind of work we take on, the signals in the language, the rate range, and the engagement shape. Above the bar, GPT-4o drafts the outreach, tailored to the posting, not a template. Below the bar, the queue moves on. The model's job is judgment scaled, not replacement. Every draft is a recommendation a human can read and act on.
The full pipeline runs hands-off: Upwork API → score → draft → review queue. The one thing we deliberately did not automate is the send. A drafted message lands in Slack; a person reads it, edits if needed, and sends. The pipeline scales the sourcing and the drafting; the human still owns the relationship. n8n does the orchestration because the work is mostly glue. Postgres is the canonical record of every posting we've seen, every score, every draft.
A pipeline like this drifts. The fit-bar that worked last quarter starts catching the wrong things this quarter; the drafted-outreach voice starts sounding samey to recipients; a model upgrade shifts the scoring distribution. We stay on it, re-tuning the scoring criteria as response data accumulates, iterating the drafting prompts, watching the send/skip ratio, occasionally adding a new signal source. It's a daily-use system; we treat it like one.
n8n does the orchestration because the pipeline is mostly glue: polling, branching, calling out to a model, writing rows. Postgres is the queue and the memory: every posting we've seen, every score, every draft. GPT-4o does the scoring and the drafting. Nothing here is exotic, that's the point. It's a workflow we can hand to a client and they can read it.
30 minutes, no pitch. Mike runs the call.