Back to Templates

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

Created by

Created by: Robert Breen || rbreen

Robert Breen

Last update

Last update a day ago

Share


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