---
title: "Social post and blog writer with web research"
kind: "Kit"
category: "Marketing & SEO"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/fb53df4a-29a0-4348-a395-361fd7668d49"
updated: "2026-11-09"
---

# Social post and blog writer with web research

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that writes a social post or a blog draft from a request sent to a webhook. It searches the web with Tavily, reads recent Instagram posts through Apify, writes with OpenAI, and logs each piece with an image link in Google Sheets.

Social post and blog writer with web research is an n8n workflow in the Marketing \& SEO category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-09. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow writes a social post or a blog draft after doing some research. You send a request to a webhook. OpenAI turns it into a search query, Tavily finds an article, and the workflow reads that article and summarizes it. Apify’s Instagram scraper then reads recent posts from accounts you choose, and a second summary covers what they talk about. A third step merges both summaries and decides whether you asked for a blog post. A blog request goes through a planner and a writer. Anything else goes to an agent that writes a post for the platform you name. Either way an image comes from a sub-workflow of your own, and a row lands in Google Sheets.

A webhook takes your request → Tavily finds an article and Apify reads Instagram → Two summaries are merged into one brief → A blog or a social post is written → The piece and its image link go into Google Sheets

### Who it suits

Social media managers, small marketing teams and solo creators who need regular posts, plus the odd blog draft, shaped by what is being said in their niche this week. Nothing is published for you. The result is a row to review.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Marketing agencies | Social media managers | Point the Instagram list at the accounts of a client’s niche and send one request per platform | A manager asks for an Instagram post about composting at home and gets a caption, an image link and a sheet row. |
| Publishers and newsletters | Editors | Ask for a blog draft built on a current article and on what a niche’s audience reacts to | An editor asks for a blog post on a trending topic and finds a written draft with a title in the sheet. |
| Small businesses | Owners who post themselves | Keep a sheet of ready posts, one row each, and copy the ones they like | An owner builds up a week of posts and picks from the sheet. |
| Creators | Solo creators | Aim the research at the accounts they compete with and ask for a post that answers them | A creator learns which topics drew comments and asks for a post on one of them. |

Skip it if you do not want to build the image sub-workflow, because the file leaves that out. It also never posts anything.

### Where to use it

Any n8n that can reach Tavily, Apify, OpenAI and Google, and that the caller can reach back.

- n8n Cloud or your own server: import the file and publish it, so the webhook has a production address
- A form, an app or a script: anything that can send a POST request with a message
- Google Sheets: the rows are a content log for you or a team to review
- A scheduler or social tool: copy rows from the sheet into whatever posts for you

### How to set it up

Get it saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. Have these ready before you import it.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key |
| Tavily | An API key |
| Apify | An account and an API token |
| Google Sheets | A sheet whose first row holds Platform, Title, Caption, Image and Date |
| An image workflow | A sub-workflow of your own that takes a description and returns an image link |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. Add an OpenAI credential and select it in every OpenAI and chat model node.
3. In `HTTP Request`, replace `<YOUR_TAVILY_API_KEY>` after `Bearer ` with your Tavily key.
4. In `HTTP Request1`, put your Apify token where the address says `<YOUR_APIFY_TOKEN>`, and the Instagram accounts you want to learn from in place of the four `YOUR_INSTAGRAM_ACCOUNT` names.
5. Add a Google Sheets credential. In `Google Sheets` and `Google Sheets1`, put your spreadsheet ID where it says `YOUR_SHEET_ID` and pick the sheet.
6. Build your image sub-workflow, then pick it in `Image gen` and `Image gen1`.
7. Save, press Publish, and send the production address of `Webhook` a first request.

The sub-workflow is not in the file. Its two tool nodes pointed at a workflow in its author’s own n8n, so they arrive empty and marked red. Yours receives one field and returns the image’s address:

```json
{
  "description": "<what the picture should show>"
}
```

### How to use it

Send a POST request with a JSON body that holds a `message`. The caller waits for the whole run, which includes a synchronous Apify run, so give it a generous timeout.

Which path a request takes

| Your message | What runs | What lands in the sheet |
| --- | --- | --- |
| Asks for a blog post | Planner, writer, then a step that picks a title and makes an image | Platform Blog, the title, the image link, and the whole post in Caption |
| Anything else | An agent makes the image first, then writes a caption with hashtags and a title | The platform you named, the title, the caption, the image link and the date |

### Example

A request, sent from a terminal:

```sh
curl -X POST https://YOUR-N8N-ADDRESS/webhook/a31cdf97-0036-4129-8921-3e9a971f2d13 \
  -H "Content-Type: application/json" \
  -d '{"message": "I want an Instagram post about composting at home"}'
```

The request has no blog wording, so the agent path runs. It writes a caption with hashtags and a title, gets an image link from your sub-workflow, and adds a row whose Platform says Instagram. The same address answers with the agent’s result.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. Notes on the canvas name the parts, such as `Scraping google`, `Scraping Instagram`, `manipulating data`, `Generating blog post` and `Generating posts`. Run it once from the webhook’s test address and read each node’s output in turn.

**For experts.** Most steps are OpenAI GPT-4.1 mini nodes with a short system message of their own, so each one can be tuned alone.

The part behind each step

| Step | Part | What to know |
| --- | --- | --- |
| Search query | gpt-4.1-mini | It is given the current date and told to output only the query |
| Research | Tavily, then an HTTP fetch and a Markdown node | Tavily is asked for one result, and the workflow fetches that page without a key |
| Instagram | Apify instagram-post-scraper, run synchronously | Four accounts and a results limit of 20. Captions, comment counts and first comments are kept |
| Blog check | gpt-4.1-mini | It must answer blog or not, and an If node tests for the exact word blog |
| Social post | An agent with the image tool and the Sheets tool | It makes the image, then writes, then logs |

### Good to know

Each request spends credit on several services, and its caller has to wait.

- Open webhook: anyone who learns the address can start runs on your keys, so add authentication to the webhook node or keep the address private
- Exact match: a blog request is routed by the word blog in lowercase, so any other answer from the check sends it down the social path
- Thin research: one article and the Instagram posts of the accounts you list are all the research there is
- Request wiring: \`Is a blog post?\`, \`Planning agent\` and \`AI Agent\` read \`$json.body.message\`, yet each runs right after an OpenAI node, whose output has no \`body\`. If a first run shows your request missing there, point them at \`$('Webhook').item.json.body.message\`
- Scraping: Apify reads Instagram on your behalf, so check Apify’s and Instagram’s terms for the accounts you pick
- Billing: OpenAI, Tavily, Apify and your image service each bill their own part
- Rows pile up: each run appends a row and nothing checks for repeats
- Your data: your request and the research reach OpenAI, Tavily and Apify, and the results reach Google Sheets

## README

````markdown
# Social post and blog writer with web research

An n8n workflow. Send a request to its webhook and it researches the topic, then writes either a social post or a blog draft
and logs it in a Google Sheet with an image link.

## What is inside

- `workflow.json`: the workflow as n8n exports it, 28 nodes, five of them sticky notes that label the sections. It holds no credential.
- `README.md`: these notes.

## Before you start

- An n8n instance, on n8n Cloud or your own server.
- An OpenAI API key.
- A Tavily API key.
- An Apify account and API token.
- A Google account, and a spreadsheet whose first row holds five headings: Platform, Title, Caption, Image and Date.
- An image workflow of your own, described below. The file does not include it.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. Add an OpenAI credential and select it in every OpenAI node and every chat model node.
3. Open `HTTP Request`. In its `Authorization` header, replace `<YOUR_TAVILY_API_KEY>` after `Bearer ` with your Tavily key.
4. Open `HTTP Request1`. In its address, put your Apify token where it says `<YOUR_APIFY_TOKEN>`. In its body, swap the four
   `YOUR_INSTAGRAM_ACCOUNT` names for the accounts you want to learn from.
5. Add a Google Sheets credential. In `Google Sheets` and `Google Sheets1`, put your spreadsheet ID where it says
   `YOUR_SHEET_ID` and pick the sheet.
6. Build your image workflow and pick it in `Image gen` and `Image gen1`.
7. Save, run it once from the webhook's test address, then press Publish at the top of the canvas (or Shift+P).

## The image workflow

`Image gen` and `Image gen1` are tool nodes that call a sub-workflow. The original pointed at one in its author's own n8n, so
here they arrive empty. Your sub-workflow receives one field and returns the address of the picture it made:

```json
{
  "description": "<what the picture should show>"
}
```

Any image service works. Make the sub-workflow end with a node that outputs the link, so the agent can write it into the sheet.

## The request

Send a POST request to the webhook with a JSON body that holds a `message`:

```json
{
  "message": "I want an Instagram post about composting at home"
}
```

The caller waits for the whole run, which includes a synchronous Apify run, so give it a generous timeout.

## How a run goes

1. `query gen` asks gpt-4.1-mini for one search query, given your message and the current date.
2. `HTTP Request` sends that query to Tavily and asks for one result. `HTTP Request3` fetches that page, `Markdown` turns it
   into text and `OpenAI` summarizes it.
3. `HTTP Request1` runs Apify's Instagram post scraper for your accounts, with a limit of 20 results. `Aggregate` keeps each
   caption, comment count and first comment, and `OpenAI1` summarizes them.
4. `Summarise` merges the two summaries into one brief.
5. `Is a blog post?` answers `blog` or `not`, and `If` tests for the word `blog`.
6. A blog goes to `Planning agent`, then `Writing agent`, then `OpenAI4`, which picks a title and an image prompt and can call
   the image tool and the sheet. A social post goes to `AI Agent`, which makes the image first, writes a caption with hashtags
   and a title, and adds a row to the sheet.
7. `Respond to Webhook` or `Respond to Webhook1` returns the result to the caller.

## The sheet

Each run appends one row. For a social post, Platform is the platform you named. For a blog, Platform is Blog and Caption
holds the whole post.

| Column | Holds |
|---|---|
| Platform | The platform you named, or Blog |
| Title | The title the agent wrote |
| Caption | The caption with hashtags, or the whole blog post |
| Image | The link your image workflow returned |
| Date | The time of the run |

## Change it

- Voice and format: edit the system messages in `AI Agent`, `Planning agent` and `Writing agent`.
- Research: change the accounts in `HTTP Request1`, or ask Tavily for more results in `HTTP Request`.
- Models: every model node names gpt-4.1-mini, and any chat model can take its place.
- Output: add a node after a `Respond to Webhook` node to send the piece to a scheduler or a draft folder.

## Good to know

- Each run costs money on OpenAI, Tavily, Apify and your image service.
- Anyone who learns the webhook address can start a run on your keys. Add authentication to the webhook node or keep the address private.
- The research is one article and the posts of the accounts you list.
- `Is a blog post?`, `Planning agent` and `AI Agent` read `$json.body.message`, yet each runs right after an OpenAI node, whose output has no `body`. If a
  first run shows your request missing there, point them at `$('Webhook').item.json.body.message`.
- `If` tests for the exact word `blog` in lowercase, so any other answer from the check sends the request down the social path.
- Apify reads Instagram on your behalf, so check Apify's and Instagram's terms for the accounts you pick.
- Nothing checks for repeats, so every run adds a row.
- Your request and the research go to OpenAI, Tavily and Apify, and the results go to Google Sheets.
- The original held its keys inside the nodes. They are placeholders here, and the Tavily key and the Apify token still sit in
  node parameters, so do not share the workflow after you fill them in.
````

## What is in it

2 files, 33 KB, downloaded as a zip.

```text
README.md  5 KB
workflow.json  28 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 18 steps, starting when its webhook is called
- AI: 9 steps call an AI model: query gen, OpenAI, OpenAI1, Summarise, Is a blog post? and 4 more
- Sign-ins: Signs in to: Google Sheets, OpenAI and Tavily
- API keys: No API key is left in the file; 1 blank in it for your own key
- Step types: Mindket’s checker reads all 8 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/fb53df4a-29a0-4348-a395-361fd7668d49)
- [Its page on Mindket](https://mindket.com/p/fb53df4a-29a0-4348-a395-361fd7668d49)
