Workflows
One brief, 50 brands, 50 voices — in 30 seconds
Cross-brand campaigns let portfolio operators deploy the same announcement across every project they run, each in its own trained voice.
When the same news is relevant to several of your brands, you usually want to publish a version of the announcement on each — adapted to that brand's tone and audience. Doing this manually across, say, five projects means five rounds of drafting and scheduling.
Postcrow's campaign tool handles the fan-out in one call. You provide a single brief and a list of project IDs. For each project, the system generates platform-tuned drafts using that project's trained brand voice and schedules them.
The shape of a campaign call
# From an MCP-connected client
> Announce the new MCP server across all 5 of my product brands.
> Schedule for Monday 9am Paris. Stagger 10 minutes between brands
> so the feeds don't post simultaneously.
# The client calls postcrow_campaign with:
# - brief
# - project_ids: [5 IDs]
# - platforms: [linkedin, twitter]
# - start_at: 2026-12-01T08:00:00Z
# - stagger_minutes: 10Each project's voice paragraph is loaded server-side and included in the system prompt. The drafts are not paraphrases of each other — each is generated independently in that brand's tone, with platform-appropriate length and structure.
Scheduling modes
Same moment
Pass scheduled_atand every project's posts publish at the same time. Useful for synchronized announcements where the timing is part of the message.
Staggered
Pass start_at and stagger_minutesand the campaign spaces the per-project publishes by the interval you specify. Useful when the brands share audience overlap and you don't want them flooding the same feed.
Drafts only
Omit both timestamps and the generated posts save as drafts on each project. You can review and schedule them individually later.
Dry-run mode
Pass dry_run: true and the call returns the generated drafts without creating anything in the database. Use it to preview the output, iterate on the brief, then re-run without dry_run to commit.
Partial failures
If one of the projects in the campaign fails — missing voice, no connected social account, AI quota exhausted — the other projects still complete normally. The response is an array of per-project results with a per-row error field on any that failed. You can fix the failing project and re-run with just that ID.
Use cases beyond launches
Cross-brand campaigns are most obvious for big announcements, but the same primitive applies to recurring needs:
- Holiday or seasonal posts — same theme, different voice per brand
- Industry-news commentary — same news, different angles
- Hiring announcements shared across multiple ventures
- End-of-year retrospectives
- Product-feature mentions for brands that share a feature
Dependencies
For best results, each target project should have a trained brand voice. A project without one still works — it just produces a neutral default tone. Projects also need at least one connected social account on the platforms you target.
Both the campaign endpoint (POST /api/social/campaign) and the MCP tool (postcrow_campaign) accept the same parameters and behave identically.