Campaigns
Group related posts by campaign for filtering, caption templates, and reporting.
What campaigns are for
A campaign is a grouping and reporting dimension — pick a theme (e.g. "Q3 product launch", "Black Friday push", "weekly tutorial series") and attach related posts to it. Campaigns can also carry a caption template that helps keep related content consistent.
Useful for related content that should be filtered, reviewed, and measured together.
Where it lives
Open Content (/content). The chip rail at the top of the page is your campaign list. Click + Campaign to create one.
Campaigns appear on the calendar as a small mint dot on event cards that belong to a campaign.
Plan availability
| Plan | Campaigns |
|---|---|
| Launch | 3 active |
| Scale | 15 active |
| Agency | Unlimited |
Campaigns are workspace-scoped — each workspace gets its own.
Step 1 — Create a campaign
- Open
/content. - Click + Campaign in the chip rail.
- Name — e.g. "Black Friday 2026".
- Description (optional) — note what belongs in the campaign.
- Color (optional) — make campaign markers easier to scan.
- Default caption template (optional) — the composer pre-fills this text when you start a new post in the campaign.
- Click Save.
Step 2 — Add posts to the campaign
Three ways:
- Drag a draft onto the campaign chip in the chip rail.
- Pick the campaign in the composer — there's a campaign dropdown next to the channel picker.
- Via API —
POST /api/scheduled-postsaccepts acampaignIdand links the scheduled post to that campaign.
When a post joins a campaign:
- The caption field pre-fills from
defaultCaptionTemplateif blank. - The campaign appears in content and calendar filters.
- Scheduled and published counters update as campaign posts move through the calendar.
Scheduling, channels, queues, and routes are chosen explicitly in the composer or queue tools.
Step 3 — Filter by campaign
- Content drafts list — clicking a campaign chip filters the drafts list.
- Calendar — the same chip click filters the calendar to that campaign's events.
- API —
GET /api/scheduled-posts?campaignId=…returns only posts in that campaign.
Per-campaign metrics
A DB trigger bumps per-campaign scheduled and published counters on every status change. The campaign detail page shows:
- Scheduled count — how many posts are queued / scheduled.
- Published count — how many have gone live.
- Last activity — timestamp of the most recent status change.
No analytics query needed — the counters are always live.
How campaigns interact with other Aidelly features
- Composer — use a campaign caption template as a starting point while choosing channels and scheduling explicitly.
- Calendar — filter scheduled posts by campaign and scan campaign markers on event cards.
- Analytics — campaigns appear as a filter on the analytics page for per-campaign performance.
- Auto-Post — auto-post sources can assign new items to a campaign automatically.
"Campaigns" vs "Collections"
Aidelly has media_collections for grouping uploaded media. Campaigns are a different concept — a reporting group for posts, not a grouping for assets. Don't conflate them.
Step 4 — Edit or close
From the campaign detail page:
- Edit details — change the name, description, color, or caption template. Existing posts keep their campaign association.
- Close — marks the campaign inactive. Closed campaigns disappear from the chip rail but remain in analytics history.
Why one campaign per post?
A post can belong to at most one campaign. If you need cross-campaign organization, use draft tags instead. Campaigns are designed for one primary reporting group per post.
Troubleshooting
- The default caption template didn't appear — the template only pre-fills when the caption field is empty. If you've typed anything, the template stays out of the way.
- Campaign counts look stale — refresh the page; counters are updated by trigger but the UI cache may be a beat behind.