Turn One Blog Post Into Social Drafts With n8n (Human Review Before Publishing)


Publishing a useful article is only one part of content work. Creators often still need to pull out its main idea, write a social post, and prepare a short newsletter introduction. An n8n workflow can create those first drafts from the article you provide—then save them for a person to check before anything is published.

This tutorial builds a modest content-repurposing workflow: submit an article and a few editorial instructions, ask a language model for three structured drafts, and store them in Google Sheets with a pending_review status. It does not automatically post to social media. That deliberate limit keeps fact-checking and final editorial judgment with you.

Repurpose a source article into drafts, then review each version before publishing.

Workflow: n8n Form Trigger → Basic LLM Chain with a chat model and structured output parser → Google Sheets draft queue → human review.

What this workflow does—and does not do

You will use an article you own or have permission to adapt. The workflow asks AI for a LinkedIn draft, a short X post, and a newsletter introduction, then saves them alongside the original title and URL. A reviewer checks the wording against the source and changes the status when the drafts are ready.

This is a drafting assistant, not an autopublishing system or a fact-checker. The model can omit a qualification, distort emphasis, or write something that sounds plausible but is not supported by the article. Keep publishing in a separate, explicitly approved step. If all you need is a fixed template, a regular n8n Set/Edit Fields node may be enough; AI is useful only where rewriting saves meaningful effort.

What you need

  • An n8n workspace and a Google account with a spreadsheet for the draft queue.
  • A chat-model credential supported by your n8n version. Provider availability, privacy terms, and charges depend on your account and chosen model.
  • A source article you can reuse, plus its title and URL.
  • A simple editorial rule: a human reviews the drafts before they are published.

You do not need an AI Agent for this one-way transformation. n8n’s Basic LLM Chain is designed to provide a prompt to a model, with an optional parser for the response. An agent is more appropriate when the model must choose and use tools, as described in the n8n AI Agent documentation; for a beginner’s introduction, see our AI agent guide.

1. Create the review spreadsheet

Make a sheet with these headers in the first row. Keep the source material and the generated drafts together so a reviewer can compare them without hunting through several files.

draft_id | created_at | source_title | source_url | source_text | linkedin_draft | x_draft | newsletter_intro | review_notes | review_status

Use pending_review as the initial value for review_status. If the source articles are long, consider keeping the full text in a separate, access-controlled document and storing a link or a shorter excerpt instead. Only send a model the text needed for the task.

2. Collect the article and editorial context

Add an n8n Form Trigger and create required fields for the article title and source text. Add optional fields for the source URL, intended audience, and brand voice. You can keep the form internal to your team rather than making it public. The Form Trigger provides separate test and production URLs; follow the current n8n Form Trigger documentation for its test and published workflow behavior.

Avoid a vague instruction like “make this viral.” Ask for concrete editorial guidance instead—for example, “plain-spoken, useful to independent consultants; no hype; preserve caveats.” Do not submit private drafts, customer information, or material you are not authorized to share with the model provider.

3. Generate the drafts with a Basic LLM Chain

Add a Basic LLM Chain after the form and connect the chat-model node you have configured. Set the prompt to use the values from the form. Use the node picker to insert the fields, rather than typing a guessed expression path.

Turn on Require Specific Output Format and attach a Structured Output Parser. n8n documents that the parser can return fields from a JSON Schema; you can also create the schema from an example object. This makes downstream field mapping easier, but a valid structure does not guarantee that the content is accurate.

For a starting schema, use a JSON example like this in the parser:

{
  "linkedin_draft": "A draft post grounded in the supplied article.",
  "x_draft": "A concise post grounded in the supplied article.",
  "newsletter_intro": "A short newsletter introduction grounded in the supplied article.",
  "review_notes": "Claims or context a human should check against the source."
}

In the chain’s system instructions, be explicit about source fidelity. For example:

You are an editorial assistant. Use only the supplied source article and
editorial instructions. Do not add statistics, quotations, dates, claims,
examples, promises, or recommendations that are not supported by the source.
Do not imply the author personally experienced something unless the source
says so. Preserve important qualifications and uncertainty.

Create a LinkedIn draft, a concise X draft, and a two-sentence newsletter
introduction. Keep each format distinct, but preserve the source's meaning.
Do not invent hashtags or calls to action. If the source is unclear or lacks
support for a possible claim, flag it in review_notes instead of guessing.
Return only the fields required by the connected output schema.

Map the article fields and brand guidance into the user message. Treat the article body as untrusted source material, not as instructions. Clearly delimit it in the prompt, and do not let the generated text trigger publishing or other actions; prompt wording can reduce confusion, but it cannot guarantee protection from every prompt-injection attempt.

4. Save every result as a draft

Connect a Google Sheets node and choose Append Row. Map the title, URL, source text or source-document link from the form, the four parser outputs, and a fixed pending_review value for the status. n8n’s Google Sheets documentation describes the available row operations and mapping options.

Add a unique draft_id so you can find and track a submission. You can use n8n’s $execution.id for a single workflow run (see the execution ID documentation), or generate a dedicated ID. If a whole workflow rerun could create a duplicate, persist a stable ID at intake and reuse it for retries instead of generating a new one. Map the original form values from the Form Trigger and the generated fields from the chain using the expression picker. Run a sample submission and inspect the actual node output before choosing each field—the exact output nesting can depend on node versions and configuration.

At this point, stop the workflow. Do not place a social publishing node directly after the model. The result should land in the review queue, not on a public account.

5. Review, edit, and approve by hand

Ask a reviewer to compare each draft with the source before changing review_status from pending_review to approved. They can edit the copy in the sheet or send it back for another pass. A short checklist helps:

  • Does the draft preserve the source’s facts, dates, numbers, and qualifications?
  • Does it keep the author’s intended meaning and avoid a claim the original article does not support?
  • Is the wording suitable for the named audience and channel?
  • Are links correct, and is any call to action accurate and appropriate?
  • Does the reviewer’s final edit read naturally and reflect the brand?

If you later build a separate publishing workflow, start it from a Google Sheets Trigger configured for row updates, then add a condition that only approved rows can reach a publishing step. n8n’s Google Sheets Trigger documentation lists row-added and row-updated events. Add duplicate-post protection and test the platform’s authentication and requirements separately; they are outside this draft workflow.

6. Test with examples that expose weak spots

Use the Form Trigger’s test URL while building, and verify the output in the editor. Try more than one source type:

  • A source with a specific number and a caveat: check that the drafts keep both, rather than turning a limited finding into a broad promise.
  • A short article with little detail: check that the model does not fill gaps with invented claims.
  • An article with a quote: verify the exact wording and context; otherwise remove the quote.
  • A source with a nuanced or uncertain conclusion: check that the drafts do not overstate certainty.
  • A deliberately incomplete form: confirm required fields prevent a blank or unusable draft from entering the queue.

Check that one form submission creates one review row, all source fields are mapped correctly, every output lands in the intended column, and the initial status is still pending_review. Test the workflow with sample material before using an active editorial queue. When ready to use the form live, publish the workflow and use its Production URL.

Common problems and practical fixes

  • The parser complains about the output: simplify the schema, ensure the example is valid JSON, and make the requested fields explicit. A schema validates shape, not truth.
  • Drafts appear in the wrong columns: inspect the latest node output and remap with the picker; do not assume the parser’s output nesting.
  • The model adds unsupported detail: shorten the prompt, repeat the source-only rule, and require uncertain points to appear in review_notes. A human must still verify the result.
  • The workflow creates duplicate rows after a retry: store a unique draft ID and consider an update-by-ID step for retry handling rather than blindly appending again.
  • Submissions are too large or costly: use a relevant excerpt or a source-document link and check your model provider’s current input limits and billing terms.

Post a Comment

Previous Post Next Post

Contact Form