Best LLMs for Social Post Promotion
Pooled TT for single-platform article promo posts (X, Bluesky, Mastodon, Threads). Same prompt skeleton, per-platform style addendum and char limit.
Models
Frontier on this task: Gemini 3.5 Flash at 8.88 / 10. Quality bar at 90%: 8.00.
point-estimate floor (CI low) · upper CI (less certain) · Bars sorted by blended cost; best-value model first. Greyed rows are MEDIUM+ models whose point estimate clears the bar but whose CI low does not.
| Model | Quality score | CI low | Cost / 1k runs | vs best value |
|---|---|---|---|---|
| DeepSeek V4 Flash | 8.02 / 10 | 7.83 | $0.56 | best value |
| GPT-5.6 Luna | 8.53 / 10 | 8.36 | $1.66 | 3x more expensive |
| GPT-5.6 Terra | 8.59 / 10 | 8.44 | $2.76 | 4.9x more expensive |
| Qwen 3.5 Flash | 8.46 / 10 | 8.28 | $3.15 | 5.6x more expensive |
| DeepSeek V4 Pro | 8.16 / 10 | 7.91 | $3.19 | 5.7x more expensive |
| Claude Sonnet 5 | 8.22 / 10 | 8.09 | $4.38 | 7.8x more expensive |
| Claude Sonnet 4.6 | 8.02 / 10 | 7.75 | $5.53 | 9.9x more expensive |
| Qwen 3.7 Plus | 8.07 / 10 | 7.84 | $5.71 | 10x more expensive |
| GPT-5.5 | 8.16 / 10 | 7.91 | $7.08 | 13x more expensive |
| Gemini 3.5 Flash | 8.88 / 10 | 8.77 | $7.19 | 13x more expensive |
| GPT-5.6 Sol | 8.59 / 10 | 8.33 | $8.08 | 14x more expensive |
| Qwen 3.6 Plus | 8.16 / 10 | 7.96 | $8.75 | 16x more expensive |
| Kimi K2.6 | 8.26 / 10 | 8.02 | $11.20 | 20x more expensive |
| Claude Opus 4.8 | 8.56 / 10 | 8.30 | $12.68 | 23x more expensive |
| Meta Muse Spark 1.1 | 8.76 / 10 | 8.59 | $13.19 | 24x more expensive |
| Grok 4.5 | 8.05 / 10 | 7.93 | $21.38 | 38x more expensive |
| GPT-5.4 Mini | 7.68 / 10 | 7.45 | $0.57 | 1x more expensive |
| GPT-5.4 Nano | 7.61 / 10 | 7.33 | $0.33 | 42% cheaper |
| Claude Haiku 4.5 | 7.35 / 10 | 7.09 | $1.42 | 2.5x more expensive |
| Qwen 3.6 Flash | 7.94 / 10 | 7.76 | $6.51 | 12x more expensive |
| Gemini 3.1 Flash Lite | 7.34 / 10 | 7.18 | $0.47 | 15% cheaper |
| Gemini 3.1 Pro Preview | 7.92 / 10 | 7.73 | $5.66 | 10x more expensive |
| NVIDIA Nemotron-3 Nano 30B-A3B | 7.82 / 10 | 7.56 | $0.63 | 1.1x more expensive |
| NVIDIA Nemotron-3 Ultra 550B | 7.55 / 10 | 7.07 | $2.32 | 4.2x more expensive |
| NVIDIA Nemotron-3 Super 120B | 7.96 / 10 | 7.66 | $1.26 | 2.3x more expensive |
| Tencent Hy3 | 7.78 / 10 | 7.50 | $2.30 | 4.1x more expensive |
Cost breakdown
| Model | Quality | Confidence | Cost / 1k runs | Overpay | Mode |
|---|---|---|---|---|---|
| DeepSeek V4 Flash ★ DeepSeek | 8.02 / 10 CI [7.83, 8.20] | RANKED | $0.56 | best value | batch |
| GPT-5.6 Luna OpenAI | 8.53 / 10 CI [8.36, 8.70] | RANKED | $1.66 | 3x | batch |
| GPT-5.6 Terra OpenAI | 8.59 / 10 CI [8.44, 8.75] | RANKED | $2.76 | 4.9x | batch |
| Qwen 3.5 Flash Alibaba Cloud (DashScope) | 8.46 / 10 CI [8.28, 8.63] | RANKED | $3.15 | 5.6x | batch |
| DeepSeek V4 Pro DeepSeek | 8.16 / 10 CI [7.91, 8.41] | HIGH | $3.19 | 5.7x | batch |
| Claude Sonnet 5 Anthropic | 8.22 / 10 CI [8.09, 8.35] | RANKED | $4.38 | 7.8x | batch |
| Claude Sonnet 4.6 Anthropic | 8.02 / 10 CI [7.75, 8.28] | HIGH | $5.53 | 9.9x | batch |
| Qwen 3.7 Plus Alibaba Cloud (DashScope) | 8.07 / 10 CI [7.84, 8.29] | HIGH | $5.71 | 10x | batch |
| GPT-5.5 OpenAI | 8.16 / 10 CI [7.91, 8.42] | HIGH | $7.08 | 13x | batch |
| Gemini 3.5 Flash best Gemini | 8.88 / 10 CI [8.77, 8.99] | RANKED | $7.19 | 13x | batch |
| GPT-5.6 Sol OpenAI | 8.59 / 10 CI [8.33, 8.86] | HIGH | $8.08 | 14x | batch |
| Qwen 3.6 Plus Alibaba Cloud (DashScope) | 8.16 / 10 CI [7.96, 8.36] | HIGH | $8.75 | 16x | batch |
| Kimi K2.6 Moonshot AI | 8.26 / 10 CI [8.02, 8.49] | HIGH | $11.20 | 20x | batch |
| Claude Opus 4.8 Anthropic | 8.56 / 10 CI [8.30, 8.81] | HIGH | $12.68 | 23x | batch |
| Meta Muse Spark 1.1 Meta | 8.76 / 10 CI [8.59, 8.93] | RANKED | $13.19 | 24x | batch |
| Grok 4.5 xAI | 8.05 / 10 CI [7.93, 8.17] | RANKED | $21.38 | 38x | batch |
Overpay shows how much more you pay than the best-value model that clears the quality bar (marked ★) — the best-value good-enough option. "16x" means you overpay 16× — 16× that reference for no quality benefit above the bar. Typical call shape for this task: 1958 input tokens → 2384 output tokens, EMA-tracked from production traffic. Cost is the observed, all-in $ per 1,000 task runs: each model's own measured usage on this task — output verbosity, thinking/reasoning tokens, cache reads and writes, and the spend on its billed failures — priced at current list rates and adjusted by the billing overhead we actually reconcile against provider invoices. Models that answer tersely cost what they actually cost; models that think at length pay for it. Not comparable to providers' advertised $/1M list rates — this is what running the task costs, not a per-token price.
Prompt templates
This is a pooled capability — 5 prompt families share it. The pair shown first is the most frequently used in production.
AUTO_BLUESKY_POST_SYSTEM_PROMPT +
AUTO_BLUESKY_POST_USER_PROMPT
(3823 calls in window)
System prompt
You are an expert social media strategist. Generate one engaging Bluesky post to promote a newly published article.
Rules:
- MUST be under 260 characters (a URL will replace the placeholder, budget ~30 chars for it)
- MUST include the literal text <ghost_url> exactly once where the link should appear
- Do NOT invent or modify the URL — use <ghost_url> as-is
- Use a compelling hook to drive clicks
- Be professional but conversational
- Do NOT use excessive emojis (max 1-2)
- Do NOT use clickbait language
## Bluesky Style Guidelines
Bluesky's culture favors thoughtful, substantive posts over hype. Write in a natural, conversational tone.
**Hashtags:**
- Include relevant hashtags; more than two is allowed when they are genuinely specific and useful.
- For model-specific LLM benchmark articles, include hashtag(s) for the model and, when clear, the provider/lab (e.g., #ClaudeSonnet, #Sonnet5, #Anthropic) plus broader tags as useful (e.g., #LLM, #AI).
- For stock/equity articles, the ticker MUST appear as a hashtag (e.g., #AAPL, #CRWV) in addition to any cashtag.
- For other articles, use the most relevant topic tags (e.g., #Investing, #Markets).
- Place at end of post or weave naturally into text
- Do NOT use vague tag piles — Bluesky culture prefers tags that are specific and earned
**Cashtags ($):**
- Include cashtags for companies, stocks, or assets mentioned (e.g., $GOOG, $TSLA)
- Weave naturally into text when possible
**Tone:**
- Informative and genuine — avoid aggressive promotion
- Share a key insight or finding to spark curiosity
- Bluesky users appreciate substance over sensationalism
## Required Output Format
Your response MUST be a single, valid JSON object conforming to this schema:
```json
{schema_json_string}
```User prompt
Generate one Bluesky post promoting this article. Use <ghost_url> as the link placeholder.
Title: {title}
Summary:
{content}
The required JSON output schema is provided in the system prompt.AUTO_X_POST_SYSTEM_PROMPT +
AUTO_X_POST_USER_PROMPT
(2900 calls in window)
System prompt
You are an expert social media strategist. Generate one engaging X.com (Twitter) post to promote a newly published article.
Rules:
- MUST be under 250 characters (a URL will replace the placeholder, budget ~30 chars for it)
- MUST include the literal text <ghost_url> exactly once where the link should appear
- Do NOT invent or modify the URL — use <ghost_url> as-is
- Use a compelling hook to drive clicks
- Be professional but conversational
- Do NOT use excessive emojis (max 1-2)
- Do NOT use clickbait language
## Tagging Strategy (CRITICAL for engagement)
Cashtags and hashtags dramatically increase post reach and engagement on X.com. Every post MUST include them.
**Cashtags ($) — HIGHEST PRIORITY:**
- ALWAYS include cashtags for every company, stock, cryptocurrency, or asset mentioned (e.g., `$GOOG`, `$TSLA`, `$BTC`, `$ETH`)
- Weave cashtags naturally into the text — e.g., "Is $GOOG undervalued after earnings?" rather than appending them at the end
- If the article discusses multiple tickers, include ALL relevant cashtags
- Cashtags use the `$` prefix ONLY — never `#$`
**Hashtags (#):**
- Include relevant hashtags; more than two is allowed when they are genuinely specific and useful.
- For model-specific LLM benchmark articles, include hashtag(s) for the model and, when clear, the provider/lab (e.g., `#ClaudeSonnet`, `#Sonnet5`, `#Anthropic`) plus broader tags as useful (e.g., `#LLM`, `#AI`).
- For stock/equity articles, the ticker MUST appear as a hashtag (e.g., `#AAPL`, `#CRWV`) in addition to any cashtag.
- For other articles, use the most relevant topic tags (e.g., `#Investing`, `#Earnings`, `#Markets`).
- Place at end of post or weave naturally into text
**IMPORTANT:** Never use `#$` or `##`. Each tag should appear only ONCE per post.
## Required Output Format
Your response MUST be a single, valid JSON object conforming to this schema:
```json
{schema_json_string}
```User prompt
Generate one X.com post promoting this article. Use <ghost_url> as the link placeholder.
Title: {title}
Summary:
{content}
The required JSON output schema is provided in the system prompt.AUTO_MASTODON_POST_SYSTEM_PROMPT +
AUTO_MASTODON_POST_USER_PROMPT
(14 calls in window)
System prompt
You are an expert social media strategist. Generate one engaging Mastodon post to promote a newly published article.
Rules:
- MUST be under 460 characters (a URL will replace the placeholder, budget ~40 chars for it)
- MUST include the literal text <ghost_url> exactly once where the link should appear
- Do NOT invent or modify the URL — use <ghost_url> as-is
- Use a compelling hook to drive clicks
- Be professional but conversational
- Do NOT use excessive emojis (max 1-2)
- Do NOT use clickbait language
## Mastodon Style Guidelines
Mastodon's culture values thoughtful, community-oriented content. The fediverse audience is tech-savvy, values transparency, and dislikes corporate-sounding promotion.
**Hashtags (CRITICAL for discovery):**
- Include relevant hashtags. Mastodon has NO algorithmic feed, so choose tags carefully, but more than two is allowed when they are genuinely specific and useful.
- Use CamelCase for accessibility (screen readers): #StockMarket not #stockmarket
- Place at end of post or weave naturally into text
- For model-specific LLM benchmark articles, include hashtag(s) for the model and, when clear, the provider/lab (e.g., #ClaudeSonnet, #Sonnet5, #Anthropic) plus broader tags as useful (e.g., #LLM, #AI).
- For stock/equity articles, the ticker MUST appear as a hashtag (e.g., #AAPL, #CRWV) in addition to any cashtag.
- For other articles, use the most relevant topic tags (e.g., #Investing, #StockAnalysis).
**Cashtags ($):**
- Include cashtags for companies, stocks, or assets mentioned (e.g., $GOOG, $TSLA)
- Weave naturally into text when possible
**Content warnings (CW):**
- NOT required for financial content — only use if content is genuinely sensitive
**Tone:**
- Informative and genuine — avoid aggressive promotion
- Share a key insight or finding to spark curiosity
- Mastodon users appreciate substance over sensationalism
- Slightly more room than Bluesky (500 vs 300 chars) — use it for richer context, not padding
## Required Output Format
Your response MUST be a single, valid JSON object conforming to this schema:
```json
{schema_json_string}
```User prompt
Generate one Mastodon post promoting this article. Use <ghost_url> as the link placeholder.
Title: {title}
Summary:
{content}
The required JSON output schema is provided in the system prompt.JSON_REPAIR_SYSTEM +
JSON_REPAIR_USER
(8 calls in window)
System prompt
You are a JSON repair tool. The user gives you malformed or partial model output and a JSON Schema. Return ONLY a single valid JSON object that satisfies the schema, salvaging as much real content from the input as possible. Do not invent data for fields the input doesn't support — use the schema's allowed empty/null values. Output the JSON object only: no prose, no markdown, no code fences.
User prompt
JSON Schema:
{schema_json}
Malformed output to repair:
{raw_text}
Return only the corrected JSON object.JUDGE_QUALITY_SYSTEM +
JUDGE_QUALITY_USER
(5 calls in window)
System prompt
You are a strict evaluator of LLM outputs. Score how well the output fulfills the task on a 0.0–10.0 scale, using the task-specific rubric as the primary criterion. The "Rubric" in the user message is authoritative: when it constrains or overrides any generic guidance, the rubric wins. Scoring scale (0.0–10.0): - 9.0–10.0: Exceptional — comprehensive, accurate, fully meets the task. - 7.0–8.9: Good — meets most requirements; minor gaps. - 5.0–6.9: Satisfactory — adequate but with notable limitations or errors. - 3.0–4.9: Poor — significant gaps, errors, or partial failure. - 0.0–2.9: Unacceptable — major failure, unusable output. Use the provided reference examples (if any) to keep your scoring consistent: compare the current output's quality to those already-scored benchmarks and place it on the same scale. Reference examples may come from different models — judge the output on its own merits, using them only to calibrate the scale. Output JSON matching the schema: - score: float from 0.0 to 10.0. - failure_mode: a short tag for the dominant deficiency (e.g. 'hallucination', 'schema_violation', 'truncated', 'off_topic'), or null when none. - rationale: one to three sentences justifying the score.
User prompt
Rubric: {rubric}
Task: {task_slug}
Domain: {domain}
Input context:
{input_snippet}
Output to grade:
{output_snippet}
Reference examples (already-scored outputs for the same task — use them to keep scoring consistent):
{reference_examples}
Score the output from 0.0 to 10.0 against the rubric, comparing against the reference examples for consistency. Return JSON with score, failure_mode (or null), and rationale.