Generate Instagram Captions from Hashtag Analysis using Apify + GPT-4o-mini

Last edited 58 days ago

This n8n workflow scrapes recent Instagram posts by hashtag and generates new, relevant caption ideas using OpenAI. It avoids making up suggestions by analyzing real-world content and surfacing common patterns.


✅ Use Case

Marketing teams, content creators, or social media managers can:

  • Discover what’s trending for a specific topic
  • Automatically generate Instagram captions based on real posts
  • Understand common caption styles for a niche
  • Save time brainstorming ideas while staying on-brand

🧠 How It Works

1️⃣ Manual Trigger

🧩 Node: When clicking ‘Execute workflow’

  • Manually starts the workflow for testing or single-run execution.

2️⃣ Define the Hashtag

🧩 Node: Create Search Term

  • Sets the value of the hashtag you'd like to scan.
  • Default is n8n, but you can modify it to anything.
{
  "Search_Term": "yourCustomHashtag"
}

3️⃣ Scrape Instagram Posts

🧩 Node: Find Recent Posts

JSON Body:

{
  "hashtags": ["{{ $json.Search_Term }}"],
  "resultsLimit": 20,
  "resultsType": "posts"
}

4️⃣ Extract Captions

🧩 Node: Set bio and follower count

  • Extracts just the caption from each post and stores it in a clean variable for the AI agent to use.

5️⃣ Aggregate Captions

🧩 Node: Aggregate

  • Gathers all captions into one list before processing.
  • Useful for passing a large text block into the AI.

6️⃣ Convert to Single Text Block

🧩 Node: Convert table names and columns into single text for agent

  • Uses a Code node to combine all captions into a single string for OpenAI to read:
return [
  {
    json: {
      text: items
        .map(item => `- ${JSON.stringify(item.json)}`)
        .join('\n\n'),
    },
  },
];

7️⃣ Generate Caption Ideas with AI

🧩 Node: AI Agent

  • Takes the combined post text and sends it to GPT-4o-mini.
  • Includes this system message:
I'm looking for ideas for posts about {{ $('Create Search Term').item.json.Search_Term }}.
Here’s the last 5 posts on Instagram about the topic. Use those to help me generate a list of relevant captions.

Do not make up ideas that are not like the others in the list.

Output like this:
{
  "Post Idea": ["Idea1", "Idea2"],
  "Most Common Post": ["common post 1", "common post 2"]
}

8️⃣ Choose Language Model

🧩 Node: OpenAI Chat Model

  • Model: gpt-4o-mini
  • Credential: Use your OpenAI API key.

9️⃣ Parse the AI Output

🧩 Node: Structured Output Parser

  • Parses the GPT response into structured JSON:
{
  "Post Idea": ["Idea1", "Idea2"],
  "Most Common Post": ["common post 1", "common post 2"]
}

🔟 Split the Outputs

🧩 Nodes: Split Out, Split Out1

  • Separates the Post Idea list and Most Common Post list into individual items.

🔁 Merge for Final Output

🧩 Node: Merge

  • Combines the two split lists into one output stream.

👤 Need More Help?

Robert Breen
Automation Consultant | AI Workflow Designer | n8n Expert
📧 [email protected]
🔗 LinkedIn

New to n8n?

Need help building new n8n workflows? Process automation for you or your company will save you time and money, and it's completely free!