Instagram Marketing Skills
A bundle of 9 focused skills for Instagram content ops in 2026. Each skill is
single-purpose, follows the draft then approval then publish pattern, and uses
the
Publora API for the media-required publish flow.
When to use this bundle
- Writing a caption (hook in the first 125 chars, body, CTA) -> use
- Planning a carousel slide by slide (hook slide to payoff slide) -> use
- Reverse-engineering the hook from a viral Reel or carousel -> use
- Sizing hashtags (the 3-5 niche/mid/broad reality, not 30) -> use
- Removing AI tells from a caption, or auditing it before posting -> use (rewrite plus , which folds in the post-audit sub-tool)
- Planning a week of Reels, carousels, and stories -> use
- Adapting cross-platform content (a LinkedIn post, blog, YouTube script, or X thread) into a native Instagram carousel or caption -> use
- Auditing and rewriting the profile (photo, NAME field, bio, link, highlights, first-9 grid, pinned posts) -> use
- Reading your niche and profile stats from real data (scan a hashtag for what is working, pull follower/post stats for you or a competitor) -> use
Core pattern
Every action-taking skill follows three steps:
- Parse the input. If the user gives an Instagram URL, the skill uses
to extract the username and shortcode.
- Draft the content. The skill applies 2026 research (Instagram hook
formulas, hashtag sizing, timing, voice rules, ranking heuristics) and shows
the draft to the user.
- Wait for approval, then publish with media. Instagram needs an image or
video on every post. The user supplies the media; on approval the skill runs
the Publora draft then upload then schedule flow.
Media is required (read this first)
Instagram rejects text-only posts. The writer skills produce the caption, hook,
hashtags, and slide or shot plan. The USER supplies the image or video file. The
publish path is always:
1. create a draft (no scheduledTime) -> postGroupId
2. upload each media file to S3 (2-10 files for a carousel, in order)
3. update the post: status=scheduled + scheduledTime
lib/publora_client.publish_media_post(...)
wraps all three steps. See
references/media-workflow.md
for the full flow and limits.
Prerequisites
Three tiers - pick one.
Tier 0 - Draft only (default, no setup)
The skills work out of the box. No API keys, no signup. Every approved caption
is returned as a copy-paste block with a reminder to attach your media in the
Instagram app. Great for trying the skills before committing to any backend.
Tier 1 - Publora auto-post (recommended, ~2 min)
On approval, point the skill at your local media files and it uploads them and
schedules the post via the
Publora API.
- Sign up free: https://app.publora.com/signup
- Connect your Instagram Business or Creator account (Channels then Add Channel)
- Copy your API key from Publora's API panel
- Drop into :
PUBLORA_API_KEY=sk_...
INSTAGRAM_PLATFORM_ID=instagram-...
- Run
pip install -r requirements.txt
Why Publora: posting media to Instagram means creating a draft, getting a
pre-signed S3 URL, uploading each file, and only then scheduling, in that exact
order. Publora does that chain in one call (
), so we did not
have to reimplement it.
Tier 2 - Build your own poster (advanced)
Prefer not to SaaS it? Ask Claude Code or Codex to build a custom poster on the
Instagram Graph API. Set
INSTAGRAM_SKILLS_CUSTOM_POSTER=<your command>
and the
skills invoke it on approval. Publora is the 2-minute path.
Account note
Instagram's publishing API needs a Business or Creator account. Personal
accounts are not supported.
Voice rules (baked into every skill)
- No em dashes (), en dashes, or double dashes. Biggest AI tell.
- Use or a line break as a soft pause when rhythm calls for it.
- Capitalize all personal, company, and product names.
- Sentence starts can be lowercase (native caption voice); names stay capitalized.
- Avoid AI vocabulary: , , , ,
, , , .
- Specific numbers beat adjectives. "47 minutes" beats "fast".
- One idea per caption. The first 125 chars carry the hook (the "more" fold).
- Hashtags are sizing, not volume: 3-5 sized tags, not 30.
(Canonical reference:
references/voice-rules.md
. See also
references/hook-formulas.md
,
references/algorithm-heuristics.md
,
references/hashtag-strategy.md
, and
references/media-workflow.md
.)
How Instagram URLs map
| URL shape | Parsed to |
|---|
https://www.instagram.com/p/SHORTCODE/
| shortcode, type |
https://www.instagram.com/reel/SHORTCODE/
| shortcode, type |
https://www.instagram.com/USERNAME/
| username, type |
https://www.instagram.com/stories/USER/ID/
| username + id, type |
lib.url_parser.parse_instagram_url(url)
returns
{username, shortcode, url_type, canonical_url}
. A carousel shares the
path with a single image;
the carousel is detected from the media, not the URL.
Known gotchas
- Media is mandatory. No image or video means no post. The skill returns the
caption and reminds you to attach media.
- No mixed media in a carousel. All images or all video, never both.
- First 125 chars only. Everything after that is behind the "more" fold.
- Carousel is 2-10 items via the API (the native app allows 20).
- WebP auto-converts to JPEG at publish time.
- Business or Creator account required. Personal accounts cannot use the API.
Resources
- Publora API docs - endpoint reference for the publishing layer
- - Python client with the full media flow
- - Instagram URL to username/shortcode parser
Acknowledgments
Publishing powered by the
Publora REST API.