- Brand
- Bolta
- Category
- Marketing
- Primary Subcategory
- Social Media Management & Scheduling
Integration details
Description
Bolta drafts and schedules social posts for a business workspace. Write a draft, set the time it should publish, and check items waiting for approval. It uses only the social accounts already connected in that workspace, and it publishes only when you ask it to.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Social Media Management & Scheduling
- Secondary Subcategories
- None listed
- Brand
- Bolta
- Access
- Account required
- First tracked
- 2026-11-07
- Tool count
- 64
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Bolta
Get updates when Bolta’s Discoverability Score or category rank changes.
Competing in ChatGPT Social Media Management & Scheduling
View Category64 tools agents can invoke
Attach existing posts to a content campaign. Idempotent and scoped, and a PARTIAL result is the normal outcome rather than an error: a post already in the campaign comes back under `already_present`, and an id that is not in this workspace comes back under `not_found`. Both arrive as 200 alongside whatever did apply, so report what actually attached rather than assuming all of it did. Nothing here creates or publishes a post.
add-posts-to-content-campaign
Approve a post that is pending review. Requires admin or owner role. Supports scheduling modes: approve_only, use_suggested_time, or set_fixed_time.
approve-post
Approve an AI-generated recurring post, optionally scheduling it at the suggested time.
approve-recurring-review
Create MULTIPLE posts in one call. ALWAYS use this instead of calling create-post repeatedly whenever the user asks for more than one post (e.g. 'a week of content', 'make 7 posts') — looping create-post renders a separate card per post and the user only ever sees one of them. Use create-post only for a single post. Returns a task_id; the card polls bulk-create-status itself and lists every post's copy when the work lands, so you do NOT need to poll or restate the copy. Each post goes through the same approval, Safe Mode and autonomy rules as create-post — including not inventing the topic or destination: ask the user what the posts are about and which account(s) they target before calling this.
bulk-create-posts
Check the status of a bulk post creation task. The response's quality_blocked array is read live from the posts, so it stays accurate even for a post demoted after the task reported SUCCESS: each entry names the post, why it was blocked, and how to fix it. Repair those with update-post before submit-for-review.
bulk-create-status
Start a themed, time-boxed body of content — "our spring launch", "Q3 thought-leadership push". Always lands in DRAFT: creating a campaign never arms it. Call set-content-campaign-status with action=activate when the user is ready, which is also what starts generation. A campaign is the BRIEF — what the content is about and when it runs. For one-off posts, use create-post or schedule-post.
create-content-campaign
Verify and persist a caller-supplied third-party target in the existing Hunter Mention pipeline. Use this when a target is known directly or when a platform, such as LinkedIn, does not provide public discovery. The operation is idempotent.
create-engagement-opportunity
Create ONE post (draft or scheduled). EXACTLY one — this tool is single-use per turn. If the request needs two or more posts — the same idea adapted for several platforms is the common case — call bulk-create-posts ONCE instead. Do not call this tool twice; do not loop it. Each call renders its own card and the user sees only the last one, so a second call does not add a post to the reply, it HIDES the first. That failure is invisible from here: both calls return 200 and the user quietly receives half the work. For a WordPress article use create-wordpress-blog-post instead, which handles the article settings, SEO metadata and Media Library upload in one call. NEVER invent the topic or the destination. If the user has not said what the post should be about, ask them before calling this — do not pick a subject for them. Likewise, if they have not said where it should go, ask which account(s), unless they explicitly asked for a draft only. A post created with invented content and no accounts is an orphan the user never asked for and cannot publish. If the workspace has Safe Mode enabled, non-Draft posts are automatically rerouted to Pending Approval. Images you generated in this conversation CAN be attached: pass them in the media parameter (no separate upload step needed) — or attach them to an existing post later via update-post's media parameter.
create-post
Create a social bucket — a named group of connected accounts for one-shot multi-account publishing. Users phrase this naturally: 'create a bucket called Launch Team with my LinkedIn and X accounts' — resolve the accounts via list-accounts and pass their ids as account_ids.
create-social-bucket
Create a new brand voice profile for a workspace. This is the first step in the voice bootstrap flow. Requires voice:write permission. The server completes the profile for you: it links the workspace's default Business DNA and copies its brand values / tone of voice / tone constraints / dos / donts into any field you left empty, defaults the content intent, assigns the workspace's unassigned connected social accounts to this voice, seeds starter platform rules and content structures for the platforms those accounts publish to, and derives the workspace's first Product from the Business DNA. Anything you pass explicitly is kept as-is. The response includes a 'bootstrapped' object listing what was filled in — report it to the user so they know what was set up. Either run extract-business-dna BEFORE this call, or just pass website_url and let this call do the scrape.
create-voice-profile
Create a SERP-ready WordPress blog post in one call: resolves the WordPress account, creates the draft, sets WordPress article settings (title, excerpt, categories, tags, SEO meta), uploads featured/inline images to WordPress's real Media Library, and optionally submits for review, schedules, or publishes — all without separate list-accounts / update-post-platform-details / submit-for-review calls. Never invent the topic, images, or destination the user didn't ask for. If wordpress_account_id is omitted and the workspace has more than one WordPress account, this returns a typed selection_required result listing them — ask the user which one rather than guessing. 'SERP-ready' means technically and editorially prepared (headings, meta title/description, focus keyphrase placement) — never promise rankings.
create-wordpress-blog-post
Get cross-platform performance summary for a workspace. Returns followers, engagement, and growth rate aggregated by platform. SEPARATE PIPELINE: these account-level numbers are synced from the platforms themselves and do NOT depend on Bolta's per-post publication records. So posts with `has_publication_record: false` in list-workspace-posts do not cause account-level zeros, and the two are not evidence about each other — a 0 here means this account genuinely gained no engagement in the window.
cross-platform-analytics
Delete a post. Recoverable for 7 days — the post is hidden immediately and permanently destroyed after the undo window.
delete-post
Generate a Voice Context-aware reply for a persisted opportunity. CALL get-engagement-conversation FOR THIS OPPORTUNITY FIRST. Search returns a title and a link, not the discussion — drafting straight off a search hit produces a reply that is on-topic and answers nothing, which is the single most common way engagement reads as spam and gets an account throttled. Read the thread, then draft. The draft is stored as the existing Hunter Reply record and requires approval; nothing is posted here. Repeating the same opportunity returns the existing draft instead of generating again, so a retry costs nothing.
draft-engagement-reply
Draft a reply to a comment or mention left on OUR OWN content. ALWAYS call this rather than composing the reply yourself. A reply you write directly is in YOUR voice; this one is in the workspace's, because it runs the Voice Profile and Business DNA the customer configured. Reading the comment with get-social-content or list-inbox-items is not a substitute — that is the input to this call, not a replacement for it. USE THIS, NOT draft-engagement-reply, for anything on our own posts. They route to different server-side writers and picking the wrong one is SILENT: draft-engagement-reply writes as an outsider joining someone else's thread, so used here it produces a reply that is on-brand, fluent, and reads as though a stranger wandered into our own comments. Nothing errors and nothing warns. draft-engagement-reply is for third-party conversations Bolta discovered; this one is for the people talking to us. Reads the comment AND the post it was left on — a terse comment ("How?", "price?") is unanswerable without the thing it is asking about — then writes in the workspace's voice. Stateless: creates NOTHING and sends NOTHING. It returns text with drafted_only=true. Show it to the user, and send the approved text with reply-to-social-content.
draft-inbound-reply
Extract a Business DNA record (industry, audience, positioning, tone signals) by scraping a brand's website. Reaches the public internet and consumes AI credits (ai:generate). Creates a new DNA record on the workspace, and — when the workspace has no products yet — derives its first Product from the same scrape (returned as 'product_created').
extract-business-dna
Generate AI content using brand voice. Supports two modes: 1. Profile mode: provide voice_profile_id to use a saved voice profile. 2. Scratch mode: omit voice_profile_id and provide 'context' + 'niche' + 'business_name' to generate content inline from DNA/business context — no profile required. Ideal for outreach pipelines, demos, and cold prospecting. Consumes AI credits on every call.
voice-generate
Daily time series for one account — followers and engagement over the last N days, one point per day, plus total followers change and growth rate. The 'show me my Instagram followers/engagement over 30 days' view. READING THE NUMBERS: quote `totals.engagement` for activity gained in the window and `totals.engagement_lifetime` for the all-time figure. NEVER add up the series to get a total — each point's `likes`/`replies`/`reposts`/`quotes`/`engagement` is that DAY's delta, and the `*_cumulative` fields beside them are running lifetime totals that would be double-counted many times over if summed. A null delta means no earlier snapshot exists to measure that day against (unknown, not zero); `counter_reset: true` marks a day where the lifetime counter fell, usually deleted posts or a reconnect.
get-account-analytics
Get a specific business DNA entry — the brand's identity record: colors, fonts, visual aesthetics, logo, tagline, values, and positioning. ALWAYS pull this before generating an image for a post and fold the colors/aesthetics/logo guidance into the image prompt so visuals stay on-brand.
get-business-dna
Read one content campaign in full: its brief (name, theme, audience, strategy, call to action, content mix, window), its status, and its derived results. Unlike the list, this read derives the campaign's performance, so prefer the list when the user is browsing and this when they ask how one campaign is doing. Read-only.
get-content-campaign
Read a third-party target and useful thread context before drafting. Supports Reddit, Threads, Bluesky, Mastodon, and LinkedIn post URNs. Reddit accepts t3_ submission or t1_ comment fullnames; for bare IDs pass target_type.
get-engagement-conversation
Get one engagement's stored status and canonical URL. When supported, verify=true checks that the externally published reply still exists.
get-engagement-status
Check what the current API key or agent is allowed to do in a workspace. `permissions` is the caller's role intersected with the scopes this key actually carries; `denied_by` says why each denied action is denied (`role`, `workspace_plan`, or `key_scope`).
get-my-capabilities
Read the platform-specific settings attached to a post for one platform. Supports x, threads, reddit, linkedin, facebook, instagram, bluesky, mastodon, discord, tiktok, pinterest, youtube, wordpress — e.g. Reddit subreddit + flair, TikTok privacy + duet/stitch, YouTube title/privacy/tags, Pinterest board + title, Threads reply controls, WordPress title + SEO meta. The returned fields tell you exactly what update-post-platform-details accepts for that platform.
get-post-platform-details
Get details of a specific post
get-post
Get a URL that takes the user to Bolta's social-account connect page. Use this whenever the workspace has no connected account for the platform the user wants to publish to — OAuth cannot run inside the chat, so share this link and ask the user to complete the connection in their browser, then re-check with list-accounts.
get-connect-link
Read any public post or comment by URL and return it normalized: platform, author, text, canonical URL, target type, and surrounding conversation. The target does NOT need to have been discovered by a Bolta agent or Hunter campaign — this works on a link you found anywhere. Use it to inspect a target before replying, or to pull conversation context for drafting. READING IS NOT DRAFTING. Do not write the reply yourself from what this returns — a reply you compose directly is in YOUR voice, not the workspace's, and it silently bypasses the Voice Profile and Business DNA that are the entire reason the customer connected Bolta. Draft through a tool: draft-inbound-reply for a comment on OUR own content, draft-engagement-reply for a third-party opportunity Bolta discovered. Wired for reddit, threads, bluesky, mastodon, linkedin, and x.
get-social-content
Use this before generating any content. Returns the compact, resolved voice context for a workspace (schema voice-context.v1): the selected or default Voice Profile merged with its linked Business DNA — business identity, writing rules, tone, persona, platform adaptations, knowledge availability — with provenance and missing-field indicators. This is the same brand identity the Bolta app and internal agents resolve, so content written from it matches the user's voice everywhere.
get-voice-context
Get details of a specific brand voice profile
get-voice-profile
One workspace's details — including its `timezone`, which is the timezone to use when scheduling, plus its name, plan and settings. Read-only.
get-workspace
Per-account performance breakdown for every connected account in a workspace: followers, engagement, and growth over the window. Use this for 'which of my accounts is growing' — a finer cut than cross-platform-analytics, which aggregates by platform.
list-account-insights
List Business DNA entries for a workspace. Each entry captures brand identity, target audience, and messaging pillars.
list-business-dna
Every post belonging to a content campaign, oldest first. Membership is TWO edges unioned here: posts explicitly attached to the campaign, and posts its runs generated. That union is why this tool exists rather than filtering the post list — a generated post carries only the second edge, so a campaign can look empty from anywhere else. Read-only.
list-content-campaign-posts
List this workspace's content campaigns — themed, time-boxed bodies of content, newest first. A campaign is a SUBJECT and a WINDOW (theme, audience, editorial strategy, call to action, content mix, start/end dates). Each row carries the campaign's status (draft | scheduled | active | paused | completed | archived) and how many posts belong to it, but not its results; call get-content-campaign for those. Read-only. This is the CONTENT campaign surface — it has nothing to do with LinkedIn ad campaigns or Hunter keyword monitors.
list-content-campaigns
List the engagement actions each connected account can actually perform. Capabilities fail closed for invalid or reconnect-required credentials; mcp_ready identifies an end-to-end adapter rather than an internal-only primitive.
list-engagement-capabilities
List stored engagement Reply records with target, approval, publication, retry, error, and URL state.
list-engagements
Everything waiting on the customer, in one call — the dashboard hub's full inbox. THIS IS ALSO WHERE COMMENTS AND MENTIONS ON OUR OWN CONTENT ARRIVE. When the user mentions a comment left on their post, a mention, or a reply they need to answer, look HERE: the row carries the platform, the account, the target id/url and the comment text — exactly what a drafting tool needs. Do NOT go hunting through list-workspace-posts for it; that lists OUR posts, not the comments people left on them. Rows are labeled by source: posts awaiting team review (source=team), recurring AI-generated posts (source=recurring), engagement reply drafts and mentions such as Threads (source=hunter), and reports (source=report). Use this when the user asks what's waiting for them, what was produced for them, or about replies/mentions to review. For ONLY the recurring queue use list-recurring-reviews. The total_team/total_recurring/total_hunter/total_report counts are always workspace-wide — they do NOT shrink when you pass source, so an empty filtered result can still show work pending in the other buckets. A row here is the INPUT to acting on it, not the act. In particular, a row carrying comment text is not permission to answer it yourself: a reply you compose directly is in YOUR voice and skips the Voice Profile and Business DNA entirely. To reply to a comment or mention on our own content, call draft-inbound-reply. To revise or send a reply Bolta already drafted (source=hunter), use update-outreach-reply / send-outreach-reply. To approve a post, approve-post.
list-inbox-items
Posts and agent jobs deleted in the last 7 days that can still be restored with restore-deleted. Each item carries its type (post|job), a label, when it was deleted, and how many days remain before it is permanently purged.
list-recently-deleted
List AI-generated recurring posts that are waiting for review.
list-recurring-reviews
List all POSTS pending review in a workspace (team + recurring post reviews). Drafted outreach/engagement replies awaiting approval are NOT posts: list them with list-engagements status=pending (needs_approval=true) and approve/send them with publish-engagement-reply.
list-reviews
List all scheduled posts in a workspace
list-scheduled-posts
List all connected social accounts in workspace. Renders a card with Socials and Buckets tabs — connected accounts with their health, plus the workspace's social buckets (named account groups).
list-accounts
List the workspace's social buckets — named groups of connected accounts used to publish to several accounts at once (e.g. 'Launch Team' = LinkedIn + X). Each bucket includes its member accounts (id, platform, username). Renders in the accounts card's Buckets tab.
list-buckets
Retrieve all brand voice profiles for a workspace
list-voice-profiles
List posts in a workspace with optional filters, rendered as a posts card. For "how did my post(s) do" questions, call with status=published, a start_date/end_date window (e.g. today or the last 7 days), and include_metrics=true — each post then carries per-platform engagement (views, likes, comments, reposts). FRESHNESS: metrics sync nightly from the platforms; for posts published less than ~24h ago, tell the user metrics may not have synced yet — zeros on a fresh post mean 'not synced', NOT that the post performed badly or failed. UNATTRIBUTABLE POSTS: every post carries `has_publication_record`. When it is false the post has no linked account/platform, so no engagement can be attributed to it and its zeros are MISSING DATA, not poor performance (`metrics_unavailable_reason` spells this out). Exclude those posts when ranking top performers and say how many you set aside — never present their zeros as results, and never conclude from them that metrics are broken workspace-wide.
list-workspace-posts
List all workspaces accessible by your API key
list-workspaces
Explicitly approve and queue a stored reply through Bolta's existing execute_approved_reply task and platform adapter. Idempotent for an already-sent reply. Use get-engagement-status to wait for and verify the external result.
publish-engagement-reply
Immediately queue a post for publishing. Requires admin or owner role. Blocked when workspace Safe Mode is ON — use submit-for-review instead.
publish-post
Like, upvote, favourite, or boost ANY public post using a connected account. The target does NOT need to have been discovered by a Bolta agent — pass the public target_url you already have (or platform + native target_id). Supported today: reddit (upvote, downvote), bluesky (like, repost), mastodon (favorite, boost), x (like, repost). Threads and LinkedIn have no reaction API wired and fail closed with a typed capability error. Call list-engagement-capabilities for the live matrix.
react-to-social-content
Reject an AI-generated recurring post and optionally provide feedback.
reject-recurring-review
Bolta ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Bolta's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Bolta alternatives on ChatGPT?
As of 2026-11-07, Bolta competes with 8digit Planner, Abency, AdaptlyPost, Adly, Adzviser Sprout Social, AffiliSend, AgentFabrica, Aidelly and 119 more in ChatGPT Social Media Management & Scheduling, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.


