Kyte StudiosKyteStudios
← Back to Insights
AI Automation

Building a weekly content planner agent in n8n that drafts, routes and logs on its own

NK

Nisha Khan

Automation Engineer

September 11, 20267 min read
Building a weekly content planner agent in n8n that drafts, routes and logs on its own

Most content operations look the same at agencies I work with. Someone lists topics on Monday. Someone else drafts them Tuesday and Wednesday. A third person schedules them Thursday. By Friday, half of what was planned never went out because someone was busy. Here is the workflow I built to fix that in n8n, and the decisions inside it that actually matter.

The brief was straightforward. Every Monday, produce a full week of social posts for a mid-sized marketing team. Each post should mix content from the client's own material with fresh external takes. Every post needs a title. Images go to one publishing pipeline. Reels go to another. Nothing goes out without a human seeing it first. And every posted piece has to end up in the marketing sheet with its format, URL, and timestamp, so no one has to chase what actually shipped.

The four stages

The workflow splits into four coloured sections so the operator can see the flow at a glance. Section one collects internal source material and drafts posts from it. Section two generates external content on adjacent topics. Section three combines the two streams 50/50 and generates a title for each item. Section four is the human approval gate plus the split into image and reel pipelines, ending in a log write.

I want to call out why the split is 50/50 by default. Internal-only content sounds too promotional over a week. External-only content sounds like generic industry commentary. The 50/50 mix keeps the feed useful to the audience and still promotes the client's own thinking. The ratio is a variable, so a client can shift it to 70/30 or 30/70 for a campaign week.

Section one: internal drafts

The internal draft agent reads from the client's own material. That is a mix of a knowledge base, past posts, and any transcripts they gave us. The agent produces a batch of drafts with source citations attached, so the reviewer can see which post came from which piece of source material. Citations matter because the reviewer's first question is always 'where did this claim come from'.

One useful trick: the agent writes each draft in two variants, a short version and a longer one. The reviewer picks in the approval step. This is cheaper than having the agent guess the format and get it wrong.

Section two: external drafts

The external agent takes a small list of topics adjacent to the client's positioning. It uses web search as a tool and writes drafts with a different voice from the internal ones, more commentary, less promotion. Same 'two variants' pattern. Same citation output.

Section three: combine and title

This section takes the two batches, mixes them per the ratio, and generates a title for each. Title generation is a separate step because the draft agents were tuned for body copy, not hooks. A dedicated title prompt with a few 'good title' examples produces noticeably better hooks than asking the same agent to write both.

The human approval gate

This is the section that turns the workflow from 'nice demo' into 'production'. The drafts land in a queue the reviewer walks through: approve, revise, or reject. On revise, the item goes back to the draft agent with the reviewer's note as new context. On reject, it dies. On approve, it moves to routing.

Two things I learned the hard way. First, the reviewer needs to see the source citations right there in the approval UI, not one click away. Second, revisions must include the reviewer's exact words, not a paraphrase. The agent listens to instructions better when the note is verbatim.

The approval gate is what makes clients trust an AI content pipeline. Removing it feels efficient. It is not. It just moves failure from 'nothing went out' to 'wrong thing went out to 40,000 people'.

Image vs reel routing

The approved item carries a format flag: image or reel. A simple router node splits the flow. Image posts go to the image workflow, which composes the graphic from a template and hands it to the scheduler. Reel posts go to the video workflow, which produces the clip and hands it to the same scheduler. The scheduler does not care about the format, only about the destination and time.

// Router logic after approval
if (item.format === 'image') return 'image-pipeline';
if (item.format === 'reel')  return 'video-pipeline';
throw new Error(`Unknown format: ${item.format}`);

That throw is deliberate. In an early version I defaulted unknown formats to 'image'. A reel got posted as a static thumbnail because the format field arrived as 'Reel' with a capital R. Now unknown formats fail loud, and the reviewer sees the error next Monday.

Logging back to the sheet

After posting, the workflow writes back to the marketing sheet: format, title, platform URL, and timestamp. Nothing exotic, but this row is what the client actually looks at in their Monday review. If this write fails, the whole run fails, because a post no one can find might as well not exist.

What I would change on the next build

Three things. First, the internal and external agents should share a memory of what has already been posted in the last four weeks. Right now they can accidentally repeat a topic across weeks. Second, the retry logic on the video pipeline is too eager and burns credits when a generation is slow but succeeding; I would bound it by wall-clock time rather than attempt count. Third, the approval queue is a Google Sheet right now. It works, but a proper approval UI with keyboard shortcuts would cut the reviewer's Monday from an hour to fifteen minutes.

If you run a content team and this sounds like your Monday, the workflow is on my projects page. Happy to talk through adapting it to your stack.

n8nClaude APIContent OpsHuman-in-the-loopMarketing Automation
Share:LinkedInTwitter