Goal
Analyze historical performance to recommend optimal posting schedule based on when YOUR specific audience is most engaged. Not generic "best times" — data-driven recommendations for this account.
Which Agents Use This
- analytics — Primary use case for schedule optimization analysis
- content_creator — Check best times before scheduling posts
- custom — Any agent needing timing optimization for content
Hard Rules
- MUST analyze actual account performance (not generic platform averages)
- MUST require minimum sample size (default 10 posts) for valid recommendations
- SHOULD indicate confidence level based on sample size
- SHOULD explain WHY each time is recommended (e.g., "47% higher engagement")
Steps
1. Validate input
- Verify account_id exists and belongs to workspace
- Check if enough posts exist for analysis_period
2. Fetch historical performance
bolta.get_post_metrics(account_id, analysis_period)
- Extract published_at timestamp and engagement metrics for each post
3. Analyze patterns
- Group posts by day of week and time of day
- Calculate avg engagement rate for each time slot
- Identify statistically significant patterns
- Compare to account baseline
4. Generate recommendations
- Rank time slots by performance
- Calculate confidence based on sample size
- Explain why each time performs well
- Return top 3-5 recommendations
Output
{
"success": true,
"account_id": "uuid",
"platform": "linkedin",
"analysis_period": "90d",
"posts_analyzed": 47,
"recommendations": [
{
"day": "Thursday",
"time": "9:00 AM EST",
"avg_engagement_rate": 0.038,
"confidence": "high",
"reason": "47% higher engagement than account average"
},
{
"day": "Tuesday",
"time": "2:00 PM EST",
"avg_engagement_rate": 0.032,
"confidence": "medium",
"reason": "32% higher, but only 8 posts in this slot"
}
]
}
Failure Handling
- If < min_posts_required: return error "Need at least 10 posts for analysis"
- If account_id not found: return error "Account not found"
- If platform API fails: return error with suggestion to retry
Example Usage
Scenario: Content creator checking best time before scheduling
{
"account_id": "uuid",
"platform": "linkedin",
"analysis_period": "90d"
}
Result: Receive data-driven schedule recommendations for optimal engagement
1---2name: bolta-get-best-posting-times3version: 2.0.04description: Analyze historical performance to recommend optimal posting schedule based on when YOUR specific audience is most engaged5category: analytics6roles_allowed: [Viewer, Creator, Editor, Admin]7agent_types: [analytics, content_creator, custom]8safe_defaults:9 min_posts_required: 1010tools_required:11 - bolta.get_post_metrics12inputs_schema:13 type: object14 required: [account_id]15 properties:16 account_id: { type: string, description: "Social account UUID" }17 platform: { type: string, enum: [linkedin, twitter, instagram], description: "Target platform" }18 analysis_period: { type: string, enum: [30d, 90d], description: "How far back to analyze" }19 min_posts_required: { type: number, description: "Minimum posts needed for valid analysis", default: 10 }20outputs_schema:21 type: object22 properties:23 success: { type: boolean }24 account_id: { type: string }25 posts_analyzed: { type: number }26 recommendations: 27 type: array28 items:29 type: object30 properties:31 day: { type: string }32 time: { type: string }33 avg_engagement_rate: { type: number }34 confidence: { type: string }35 reason: { type: string }36organization: bolta.ai37author: Bolta Team38---3940## Goal41Analyze historical performance to recommend optimal posting schedule based on when YOUR specific audience is most engaged. Not generic "best times" — data-driven recommendations for this account.4243## Which Agents Use This44- **analytics** — Primary use case for schedule optimization analysis45- **content_creator** — Check best times before scheduling posts46- **custom** — Any agent needing timing optimization for content4748## Hard Rules491. MUST analyze actual account performance (not generic platform averages)502. MUST require minimum sample size (default 10 posts) for valid recommendations513. SHOULD indicate confidence level based on sample size524. SHOULD explain WHY each time is recommended (e.g., "47% higher engagement")5354## Steps5556### 1. Validate input57- Verify account_id exists and belongs to workspace58- Check if enough posts exist for analysis_period5960### 2. Fetch historical performance61- `bolta.get_post_metrics(account_id, analysis_period)`62- Extract published_at timestamp and engagement metrics for each post6364### 3. Analyze patterns65- Group posts by day of week and time of day66- Calculate avg engagement rate for each time slot67- Identify statistically significant patterns68- Compare to account baseline6970### 4. Generate recommendations71- Rank time slots by performance72- Calculate confidence based on sample size73- Explain why each time performs well74- Return top 3-5 recommendations7576## Output77```json78{79 "success": true,80 "account_id": "uuid",81 "platform": "linkedin",82 "analysis_period": "90d",83 "posts_analyzed": 47,84 "recommendations": [85 {86 "day": "Thursday",87 "time": "9:00 AM EST",88 "avg_engagement_rate": 0.038,89 "confidence": "high",90 "reason": "47% higher engagement than account average"91 },92 {93 "day": "Tuesday",94 "time": "2:00 PM EST",95 "avg_engagement_rate": 0.032,96 "confidence": "medium",97 "reason": "32% higher, but only 8 posts in this slot"98 }99 ]100}101```102103## Failure Handling104- If < min_posts_required: return error "Need at least 10 posts for analysis"105- If account_id not found: return error "Account not found"106- If platform API fails: return error with suggestion to retry107108## Example Usage109110### Scenario: Content creator checking best time before scheduling111```json112{113 "account_id": "uuid",114 "platform": "linkedin",115 "analysis_period": "90d"116}117```118**Result:** Receive data-driven schedule recommendations for optimal engagement