Instagram

Live

OAUTH 2.0

SOCIAL MEDIA

Marketing

Instagram gives your agent social media management for professional accounts: publish posts and reels, read account and post insights, reply to and moderate comments, and handle Direct messages.

  • Per-user credentials: each call uses the actual user's token, never a shared bot.
  • Encrypted per-tenant vault: AES-256, resolved at request time, never in LLM context.
  • Scoped before every call: pre-call scope check, 90-day SIEM-exportable audit chain.
Instagram
agent · Acme Q3
Run
How did our last 5 reels perform on reach and saves?
S
instagram_media_insights_get
131ms
Social media agent
Your last 5 reels reached 48,200 accounts in total. The product demo reel led with 1,940 saves.
Sources: Instagram insights, 5 reels
instagram
5 reels
18:29
Message Claude...

Tools your social media agent reaches for on Instagram, scoped per user.

CALL ANY TOOL
30 tools for social media on Instagram professional accounts: publish media, read account and post insights, manage comments and mentions, search hashtags, and send Direct messages.
instagram_account_insights_get
Get account insights
Get account-level Instagram insights (impressions, reach, profile views, follower count) over a period or date range.
Parameters
Name
Type
Required
Description
ig_user_id
string
Required
The Instagram professional account ID.
metric
string
Required
Comma-separated list of metric names to retrieve.
period
string
Optional
Aggregation period for the metrics.
since
integer
Optional
Start of the date range (Unix timestamp).
until
integer
Optional
End of the date range (Unix timestamp).
instagram_business_discovery_get
Get business discovery
instagram_comment_delete
Delete comment
instagram_comment_hide_update
Update comment hide
instagram_comment_private_reply_create
Create comment private reply
instagram_comment_replies_list
List comment replies
instagram_comment_reply_create
Create comment reply
instagram_comments_list
List comments
instagram_content_publishing_limit_get
Get content publishing limit
instagram_conversation_messages_list
List conversation messages
instagram_conversations_list
List conversations
instagram_hashtag_recent_media_list
List hashtag recent media
instagram_hashtag_search
Search hashtag
instagram_hashtag_top_media_list
List hashtag top media
instagram_media_children_list
List media children
instagram_media_container_create
Create media container
instagram_media_container_status_get
Get media container status
instagram_media_get
Get media
instagram_media_insights_get
Get media insights
instagram_media_list
List media
instagram_media_publish
Publish media
instagram_mentions_list
List mentions
instagram_message_attachment_send
Send message attachment
instagram_message_send
Send message
instagram_oembed_get
Get oembed
instagram_recently_searched_hashtags_list
List recently searched hashtags
instagram_sender_action_send
Send sender action
instagram_stories_list
List stories
instagram_tagged_media_list
List tagged media
instagram_user_get_profile
User get profile
Build your Agent
Same auth pattern across LangChain, OpenAI, Anthropic, and Google ADK.
Python · LlamaIndex
import { ScalekitClient } from "@scalekit-sdk/node";
import { createReactAgent } from "@langchain/langgraph/prebuilt";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

// Instagram tools scoped to this user
const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["instagram"], toolNames: [
    "instagram_media_list",
    "instagram_media_insights_get",
    "instagram_comment_reply_create"] },
  pageSize: 100,
});

const agent = createReactAgent({ llm, tools });
await agent.invoke({ messages: [{ role: "user", content: "How did our last 5 reels perform on reach and saves?" }] });
import OpenAI from "openai";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const openai = new OpenAI();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["instagram"] }, pageSize: 100,
});

const res = await openai.chat.completions.create({
  model: "gpt-5",
  messages: [{ role: "user", content: "How did our last 5 reels perform on reach and saves?" }],
  tools,
});

// Execute the tool call with the user's vaulted Instagram token
await sk.tools.executeTool(res.choices[0].message.tool_calls[0], "user_123");
import Anthropic from "@anthropic-ai/sdk";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);
const anthropic = new Anthropic();

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["instagram"] }, pageSize: 100,
});

const msg = await anthropic.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "How did our last 5 reels perform on reach and saves?" }],
  tools,
});

// Tool call runs with the user's vaulted Instagram token
await sk.tools.executeTool(msg.content, "user_123");
import { Agent } from "@google/adk/agents";
import { ScalekitClient } from "@scalekit-sdk/node";

const sk = new ScalekitClient(env.SCALEKIT_ENV_URL, env.SCALEKIT_CLIENT_ID, env.SCALEKIT_CLIENT_SECRET);

const { tools } = await sk.tools.listScopedTools("user_123", {
  filter: { connectionNames: ["instagram"] }, pageSize: 100,
});

const agent = new Agent({
  name: "social_media_agent",
  model: "gemini-2.5-pro",
  instruction: "Instagram tools scoped to this user",
  tools,
});

await agent.run("How did our last 5 reels perform on reach and saves?");
Try these prompts
Copy any prompt into your agent. Each maps directly to a Instagram tool. Click to copy, paste into your agent, done.
Publishing
Copy the prompt
Copied
Create a media container for this image URL with the caption below.
Copy the prompt
Copied
Check whether the reel container finished processing, then publish it.
Copy the prompt
Copied
How much of today's publishing limit have we used?
Insights and discovery
Copy the prompt
Copied
Show reach and profile views for the last 30 days.
Copy the prompt
Copied
Get engagement for our last 10 posts.
Copy the prompt
Copied
Look up the public profile and recent posts of this competitor's Business account.
Comments and messages
Copy the prompt
Copied
Reply to the top comment on our latest post.
Copy the prompt
Copied
Hide this spam comment.
Copy the prompt
Copied
Send a private reply to this commenter about their order.
SEE HOW AUTH WORKS
Each user signs in to Instagram once; Scalekit stores and refreshes their tokens. Credentials stay vaulted, every call is scope checked, and every action is logged.
1
Authorize
Your user connects
Instagram
once. We tie it to their identity and the meetings they approved — no shared bot account, no org-wide access
Who:
user ‘A’
when:
Once per user
access:
Limited to user
2
Store
Their
Instagram
token lives in a vault scoped to them. User A's meetings are never reachable by an agent acting for user B, even on the same connection
vault:
encrypted
scope:
per-user
tokens:
auto-refreshed
3
Resolve
When your agent calls a
Instagram
tool, we fetch the right token server-side. It never touches your agent, never appears in the LLM context, never shows up in your logs
speed:
~40ms
check:
before every call
seen by:
nobody
4
Audit
Every
Instagram
tool call is logged — who triggered it, which meeting was fetched, what came back. 90 days of history, tied to the user who authorized it
history:
90 days
export:
SIEM-ready
logged:
every call
Test other agents
See the same per-user auth pattern across other marketing and social connectors.
GTM and RevOps Teams
Competitive intelligence briefing agent
Scans Gong calls for competitor mentions, matches each one to its Notion battlecard, and DMs every affected rep a single Slack digest per cycle. Every call runs as the PMM who owns the briefing, never a shared bot.
GTM and RevOps Teams
Outbound prospecting agent
Searches Apollo for prospects matching your ICP, scores and ranks them, drafts personalized outreach in Gmail, and logs every send to Google Sheets. Mail goes out as the rep, not from a shared inbox.
Support and Ops Teams
Support ticket automation agent
Fetches new Zendesk tickets, drafts a reply from Notion knowledge base articles, digests what it cannot answer to Slack, and archives the rest, acting as the support agent rather than a shared API key.
GTM and RevOps Teams
CRM AI agent
Reads the Granola transcript after every call, extracts next steps and updates the HubSpot record, drafts the follow-up in Gmail, and confirms in Slack, all on the rep's own delegated OAuth.
Test other agents
See the same per-user auth pattern across other marketing and social connectors.
GTM
Competitive intelligence briefing agent
Scan Gong calls for competitor mentions, match each one to its Notion battlecard, and DM every affected rep a single Slack digest.
SALES
Outbound prospecting agent
Search Apollo for ICP matches, rank them, draft personalised Gmail outreach, and log every send to Google Sheets.
SUPPORT
Support ticket automation (Google ADK)
Fetch, annotate, and archive Zendesk tickets with Notion context, digesting anything it cannot answer to Slack.
GTM
CRM AI agent
Turn each Granola call transcript into a HubSpot record update, a drafted Gmail follow-up, and a Slack recap.
Why Scalekit
Secure your agent's access. Connectors ship in minutes
01.
Shared tokens break per-user analytics
A shared Instagram token looks fine in a demo. In production every post and reply looks like one service account, and you cannot tell which user triggered it. Scalekit resolves the credential of the actual user who triggered the agent, never a shared bot.
// shared token
audit → bot_service_account

// scalekit
audit → user_abc ✓
02.
Authentication is not authorization
03.
Multi-tenancy is architectural
04.
Instagram today. Ten connectors tomorrow.
“Our agents act across Salesforce, Gong, Google Drive, and more, on behalf of every customer. Scalekit behind the scenes meant we can keep adding tools without ever rebuilding how credentials or tool calling work.”
Venu Madhav Kattagoni
Head of Engineering / Von
FAQs
Frequently Asked Questions
Does the agent access Instagram as the user or through a shared service account?
As the user. Each user signs in to Instagram once, and Scalekit stores and refreshes their tokens. Posts, replies, and messages the agent sends are attributed to that user in your audit trail, not a shared service account.
Where is the Instagram OAuth token stored?
In Scalekit's managed AES-256 token vault, namespaced per tenant. Refresh is automatic. Revocation is a single dashboard action. Credentials never appear in prompts, logs, or LLM context.
Can I limit what the agent does in Instagram?
Yes. Filter by tool name in listScopedTools to expose only what you want, for example the insights and list tools without instagram_media_publish. Scalekit also enforces scope checks before every API call.
What happens when a user revokes Instagram access?
The connection is invalidated on the next tool call. Subsequent requests for that user fail closed with a clear error. Other users in the tenant remain unaffected. The event is logged for audit.
Which Instagram accounts does this connector work with?
Instagram professional accounts, Business or Creator, connected to a Facebook Page. Personal accounts cannot authorize the connection. instagram_business_discovery_get can still look up the public profile and recent media of other Business or Creator accounts by username without connecting them.
Start in your coding agent
Up and running in one command
Install the Scalekit skill in your editor of choice. Connector, auth, tools, prompt, all wired up
Claude Code REPL
/plugin marketplace add scalekit-inc/claude-code-authstack
/plugin install agentkit@scalekit-auth-stack
Cursor Code REPL
# ~/.cursor/mcp.json
{
""mcpServers"": {
""instagram"": {
""url"": ""https://mcp.scalekit.com/instagram"",
""headers"": { ""Authorization"": ""Bearer $SCALEKIT_TOKEN"" }
}
}
}
Codex Code REPL
# ~/.codex/config.toml
[mcp_servers.instagram]
url = ""https://mcp.scalekit.com/instagram""
auth_env = ""SCALEKIT_TOKEN""
Copilot Code REPL
# .vscode/mcp.json
{
""servers"": {
""instagram"": {
""url"": ""https://mcp.scalekit.com/instagram"",
""type"": ""http""
}
}
}