Social Media Prompt Templates
A prompt that works has four parts: a voice block, the job, the constraints, and an output contract that says exactly what to return. Templates without an output contract are why you keep getting five paragraphs when you wanted one line.
You have bookmarked three lists of 200 prompts and shipped nothing from any of them. What those lists are short of is structure, and a line like “Write an engaging Instagram caption that converts” tells a model nothing it can be held to.
Fewer, built properly. The social media prompt templates below each carry four parts, and the fourth is the one that makes the other three checkable. If you are still working out what should run them, what an AI agent actually is covers the machinery. This page is the library you point it at.
The anatomy of a prompt that works
Four parts. You probably already write three of them.
- The voice block. Who is speaking and the rules they write under. Constant, so it belongs in the system prompt, not in the brief you retype.
- The job. One sentence naming the deliverable and the source material. Not the topic: the deliverable.
- The constraints. What the thing must and must not contain: length, banned strings, hashtag policy, link placement.
- The output contract. The shape of the response: how many, in what format, and what must not surround it.
The same request twice. First the version everybody sends:
Request A. Write me some Instagram captions for our new pricing page. Make them engaging and keep them on brand.
And the response, abridged:
Here are some engaging caption options for your new pricing page! 1. Big news! We have refreshed our pricing to serve you better. Check the link in bio to find the plan that fits you best! 2. Pricing should not be a mystery. Ours is clearer than ever... #pricing #saas #transparency #newplans Want a few more in a different tone?
Nothing in Request A can be failed, so nothing there is wrong. Now with a contract bolted on:
Request B.
VOICE: {VOICE_SPEC}
JOB: Captions for a pricing-page launch. Audience: {AUDIENCE}.
The one thing a reader should do: {ACTION}.
CONSTRAINTS:
- No price in the caption. The page carries the price.
- Banned: excited, thrilled, simply, humbled, "we're live".
- No question marks. No emoji.
OUTPUT CONTRACT:
- Return exactly 5 options.
- Numbered list. Nothing before it, nothing after it.
- Each option: one line, no line breaks, under 140 characters.
- No hashtags. Hashtags are a separate job.
- If a constraint cannot be met, return BLOCKED and name the constraint.
And the response to B. I wrote both responses to show the shape, not from a logged run:
1. The new pricing page has three plans and one screen of copy. 2. The thing most people paid extra for is now in the base plan. 3. Two plans became three, and the middle one is what most teams pick. 4. Pricing is live and it fits on one screen. 5. Fewer plans, one page, no sales call.
Every line in that contract fails visibly. Count the options, search for a hash symbol and a question mark, check that nothing follows the fifth option. You are not judging whether the writing is good, you are checking compliance, which takes seconds and can be done by somebody who did not write the brief.
That is the test for every template you keep: can you tell at a glance whether the output complies? If you have to read carefully to decide, you wrote a preference, not a contract.
The BLOCKED line earns its place differently. With no way to fail, you cannot tell a refusal from a compromise, and the compromise is the one that reads fine. A prompt library is the cheapest part of the social media automation guide: it costs nothing and, unlike a tool, it is yours.
Social media prompt templates, by job
Seven. The braces are variables you fill, and {VOICE} is one line pointing at your spec, or the spec itself if your tool stores nothing.
1. Hooks, on their own
Write first lines separately. A hook written to fit a finished post is constrained by it; eight written alone compete with each other instead.
VOICE: {VOICE}
JOB: First lines only, for a post about {SUBJECT} aimed at {AUDIENCE}.
CONSTRAINTS:
- Each hook states a number, a cost, or a named outcome.
- No rhetorical question. No "imagine if". No three-word staccato.
- Under 12 words.
CONTRACT: 8 hooks, numbered, nothing else.
Tag each with its pattern: NUMBER / CONTRARIAN / RECEIPT / OMISSION.
2. Caption from a long-form source
VOICE: {VOICE}
SOURCE: {PASTE 300 TO 1200 WORDS}
JOB: List the claims in the source that stand up without the article,
then write one caption for the strongest.
CONSTRAINTS:
- Every number in the caption appears in the source. No rounding.
- No claim the source does not make. No link in the body.
CONTRACT: Two blocks, in this order, with nothing between or after them.
CLAIMS: one per line, each followed by the source sentence it came from.
CAPTION: one caption, under {LIMIT} characters.
The claims block does the real work: it makes the extraction visible, so you can reject a claim before a caption rests on it. At scale across a whole article that becomes the extraction workflow rather than one prompt.
3. Thread from an outline
Write the thread outline yourself. Ask for the outline and the thread in one pass and you are approving an outline you never chose.
VOICE: {VOICE}
OUTLINE: {3 TO 6 BULLETS, YOURS, IN ORDER}
JOB: One post per bullet, in the order given. Add nothing.
CONSTRAINTS:
- Post 1 is a hook and carries no setup.
- No post depends on reading the next one.
- The last post is one instruction, not a summary.
CONTRACT: {N} posts, numbered, separated by a blank line, each under
{LIMIT} characters. No title. No hashtags. No "1/7" counters unless
{COUNTERS} is yes.
4. Carousel script
VOICE: {VOICE}
JOB: A {N}-slide carousel script on {SUBJECT}.
CONSTRAINTS:
- Slide 1 is the hook. Slide {N} is one instruction.
- One idea per slide. No slide carries two sentences.
- Headings under 7 words. Body under 25.
CONTRACT: A table with columns Slide | Heading | Body | Frame.
Frame names what is literally in the image, never a mood.
Then one caption under {LIMIT} characters, below the table.
No design advice, no closing commentary.
5. Comment reply draft
VOICE: {VOICE}
COMMENT: {PASTE THE COMMENT}
CONTEXT: {WHAT THE POST SAID}
JOB: Draft a reply, or refuse. Resolve nothing you were not told.
CONSTRAINTS:
- Never apologise for something we have not confirmed.
- Never promise a date, a fix, a refund or a discount.
CONTRACT: Return exactly one of these two lines and nothing else.
REPLY: {text under 40 words}
ESCALATE: {one line naming what a human has to decide}
The refusal branch matters more than the output here. The ESCALATE line is what makes replies safe to draft automatically and unsafe to send automatically, which is the argument of human-in-the-loop approval workflows.
6. Repurposing pass
VOICE: {VOICE}
SOURCE: {ONE ASSET: POST, TRANSCRIPT, CALL NOTE}
JOB: Produce {FORMATS} from this source. Reuse no sentence twice.
CONSTRAINTS:
- Each output stands alone for someone who saw none of the others.
- Flag what the source does not support instead of filling it in.
CONTRACT: One block per format, each headed with the format name in caps.
End with a GAPS block: every claim you had to leave out, one per line.
7. The weekly batch
Batch generation is where a contract pays for itself: twenty drafts in an unpredictable shape are worse than none.
VOICE: {VOICE}
INPUTS: {TOPIC LIST, ONE PER LINE}
JOB: Draft {N} posts per topic for next week. Schedule nothing.
CONSTRAINTS:
- No two posts open with the same first three words.
- No structure used twice in a row.
- Leave {SLOT} empty for whatever actually happens this week.
CONTRACT: A table with columns Day | Platform | Post | Structure | Source.
Source names the input line it came from, or OWN if you wrote it.
Then a REJECTS block: 3 drafts you discarded, one word each for why.
The Source column is the one you will use: it tells you which topic lines carried the week and which produced nothing, so next week’s list is shorter. The REJECTS block’s job comes after the batch, in the next section.
The same templates, by platform
You do not need a prompt per network. You need one prompt and a modifier that changes the constraints and the contract, nothing else. A modifier that reaches into the voice block is a second brand, not a platform variant.
| Platform | What the platform documents | Contract line to add |
|---|---|---|
| “Organic carousel is currently not supported”: the Carousel format is sponsored only. Document posts are organic. | Return 6 slide headings for a PDF document post, then one body under 200 words. No carousel. | |
| Captions document a 30-hashtag ceiling. Carousels take up to 20 items. | One caption, then up to {N} hashtags on their own line, never above 30. | |
| X | The posts endpoint takes text plus up to 4 photos, or 1 GIF, or 1 video, and threads by reply id. | Return each post as its own block. Reference no more than 4 images. No counters. |
| TikTok | Caption title capped at 2,200 UTF-16 runes. No sound-selection field documented. | One caption under 150 characters, then hashtags. No sound suggestions, no scene directions. |
| Image or video pins only. No multi-image pin. | One title under 40 characters and one description per image. Never one script across images. | |
| YouTube Shorts | Title 100 characters. Description 5,000 bytes, not characters. Tags 500 characters. 60 hashtags, 3 display slots. | Title under 100 characters. First line of the description stands alone. Max 3 hashtags. |
The middle column is what each platform documents, from the developer reference for the fields an API posts into. The two YouTube hashtag numbers come from its help centre, where the three is a display slot, not a cap. Three rows change what you may ask for rather than how long it runs, which is why modifiers work: the job never changes, the contract does.
- LinkedIn. Its Posts API reference says, beside the Carousel sample request, “Organic carousel is currently not supported”. Every tool selling LinkedIn carousel scheduling publishes a document post carrying a PDF.
- YouTube. The API exposes no field marking a video as a Short, so no line in a prompt declares one.
Two more hard numbers worth writing into a contract: Threads documents a 500-character maximum for text posts, and a Bluesky post record is capped at 300 graphemes. Where a template leaves {LIMIT} as a slot, fill it from your own composer: I am not printing a length I have not checked. Hashtag counts per network are convention, not a documented figure, so pick yours from your own results and write it in, so it stops being a per-post decision.
If a model is publishing these rather than handing them back, the account side comes first: wiring an assistant to your accounts is the step before this one.
Making them yours
Drop the voice spec in once, at the top level. The templates reference it as {VOICE} because it should not live in the brief you retype: put it in the system prompt, or in a project’s instructions where every brief inherits it. OpenAI’s own help article says a project’s instructions “override your global custom instructions”, which makes a project a real container for a spec rather than a folder of chats. If you have no spec yet, build an AI content agent in your brand voice is the artefact and the method. The case for it is made there and I will not make it twice.
Put the banned list in the constraints, not the voice block. Named strings are the half of a voice document that survives being pasted into a prompt. Add a word the evening it annoys you, not at a quarterly review.
Ask for five, not one. One option means you edit whatever arrives; five means you pick, and you see the range you picked from. It is not free: if your tool meters generation, five costs five times one. SchedPilot meters its caption and hook generation as GPT-5 credits allocated per plan, 300 on Gold and none listed on Silver, so check your allowance before writing “return 5” into every contract. The bigger variable is what a tool lets you store: AI caption tools compares them on that.
Keep a rejected-output file. Outputs you refused are few-shot material you cannot buy, and a negative example carries what a good one does not: the target against the near-miss you keep getting. Paste two or three in with one line each saying what not to copy, the annotated-examples method the voice spec sets out. A bare example gets copied at the surface.
Write the temperature beside the template if your tool exposes one. Two runs of one contract coming back one good and one unusable is a sampling setting, and you can spend a week rewriting the prompt before you think to look.
Where prompts stop helping
Two limits, and no contract touches either.
A thin source. No prompt extracts a claim the source does not contain. What you get instead is your own brief paraphrased back at you with confidence, the house style of having nothing to say. The CLAIMS and GAPS blocks exist to make that visible rather than filled in: a claims list with two entries is the answer, and the answer is to go and learn something.
A missing opinion. A template enforces a structure, a length and a banned list. It cannot decide which of three true things is worth saying this week, or which anecdote actually happened to you. Judgement does not transfer, and a page of templates that implied otherwise would be selling you the same wish the lists of 200 do.
One mechanical limit before you wire the chain together. SchedPilot’s delete tool describes itself as failing with a 409 “if the post has already been published on any platform”, because “published posts cannot be deleted”. So the undo you are picturing does not exist. A contract protects the draft, an approval step protects the publish, and nothing at all protects the published post.
What to build first
Three templates, not thirty. The hook template, because hooks are what you write most and reuse least. The caption-from-source template, because that is where a thin prompt wastes real material. And the weekly batch, because it is the only one that changes your week rather than your afternoon.
Build each one backwards: the contract first, the constraints second, the job third, the voice block last. Then run it five times on one brief. If you can tell at a glance which of the five comply, it is finished; if you have to read carefully, the contract is still a preference. Stop at three you trust. A library of thirty you have never run is what you already have.
Questions people actually ask
What makes a good social media prompt?
An output contract. Everything else is table stakes: the voice block, the job and the constraints are things most people already write badly but do write. The contract is the part that says return exactly five options, numbered, one line each, nothing before or after. The test is whether you can tell at a glance that a response broke it.
Why does ChatGPT ignore part of my prompt?
Assume you will never know why, and build so that you notice. A dropped instruction is invisible unless the contract makes it visible, so give every constraint its own line, ask for a fixed count you can check, and add an escape hatch: if a constraint cannot be met, return BLOCKED and name it. Then a silent compromise reads as a failure instead of as an answer.
Should I use one prompt per platform?
No. Keep one prompt per job and add a platform modifier that changes two things only: the constraints and the output contract. The job of writing a caption from an article does not change between LinkedIn and TikTok; the length, the hashtag policy and the format do. A modifier that reaches into the voice block means you are running two brands.
How do I get AI to return just the caption?
Write it as a contract rather than a request. Specify the format, the count and what must not surround it: one caption, plain text, no preamble, no commentary, no sign-off, nothing after the closing line. Add that hashtags are a separate job if you do not want them. Asking politely for no preamble is a preference; naming what must not be there is checkable.
How many options should I ask AI for?
Five is a good default. One means you edit whatever arrives, and five lets you pick and see the range you picked from. It costs five times as much where generation is metered, so check your allowance before writing it into every template. Eight is reasonable for hooks, because hooks are short and you are choosing a shape rather than a draft.
Can prompts replace a brand voice document?
No, and it is the wrong way round: the voice document is what makes the prompts short. A template should point at a voice spec held in the system prompt or in a project's instructions, so every brief inherits it and you edit the rules in one place. Put the voice in each prompt instead and you have as many versions of your voice as you have templates.
Read next
Build an AI Content Agent in Your Brand Voice
Adjectives like 'friendly' do nothing. Here is a voice spec that works, built from rules and annotated examples, plus a drift test.
AI Agents for Social Media: What They Actually Do
Most things sold as an AI social media agent are a scheduler with a caption button. Here is the real distinction, and…
Human-in-the-Loop Approval Workflows That Hold
Approving everything is the same as approving nothing. Route by risk, put the checkpoint in the right place, and give the reviewer…


