Overview
Scheduled reports ensure your team stays informed with regular data exports, metric summaries, and notifications. Using Consuelo’s workflow scheduling, you can automate weekly standups, monthly reviews, and real-time alerts.
Use Cases
| Report Type | Frequency | Recipients |
|---|
| Weekly metrics | Monday 9am | Leadership |
| Monthly revenue | 1st of month | Finance |
| Daily signup summary | Daily 8am | Growth team |
| Pipeline health | Friday 4pm | Sales |
| Data quality alerts | Real-time | Ops team |
Creating a Scheduled Report
Step 1: Create the Workflow
- Go to Settings → Workflows
- Click + New Workflow
- Name it (e.g., “Weekly Growth Report”)
Step 2: Add Schedule Trigger
- Select Schedule trigger
- Configure frequency:
- Daily: Every day at specific time
- Weekly: Day of week + time
- Monthly: Day of month + time
Example: Every Monday at 9:00 AM
Step 3: Add Report Actions
Option A: Email Report
- Add Send Email action
- Configure:
Email template:
Weekly Growth Report
Week of {{trigger.scheduledDate}}
New Signups: {{calculate.newSignups}}
Activation Rate: {{calculate.activationRate}}%
MRR: ${{calculate.mrr}}
View full dashboard: https://app.consuelohq.com/dashboards/growth
Single recipient limitation: The Send Email action supports only one recipient per email. To send to multiple people, chain multiple Send Email actions or send to a distribution list address.
Option B: Export to External System
- Add Code action to query data
- Add HTTP Request to POST to external system
Example: POST to Slack webhook
// Code action
const startOfWeek = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString();
const query = `
query WeeklyMetrics {
people(filter: { signupDate: { gte: "${startOfWeek}" } }) {
totalCount
}
}
`;
const response = await fetch('https://<your-internal-domain>/graphql', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json'
},
body: JSON.stringify({ query })
});
const result = await response.json();
return { newSignups: result.data.people.totalCount };
Then HTTP Request to Slack:
POST https://hooks.slack.com/services/YOUR/WEBHOOK/URL
Body: {"text": "Weekly Report: {{code.newSignups}} new signups"}
Report Content Strategies
Embedded Metrics
Include key numbers directly in the email:
This Week:
- Signups: {{searchPeople.totalCount}}
- Activations: {{searchActivated.totalCount}}
- Conversion: {{calculate.percentage}}%
Links to Dashboards
Reference full dashboards for detailed views:
View full metrics:
https://app.consuelohq.com/dashboards/weekly-metrics
Attachments
Static attachments only. Upload files when configuring the workflow. Same file sent to all recipients. For dynamic reports, generate PDFs using the PDF generation guide.
Advanced Patterns
Conditional Reports
Only send if metrics exceed thresholds:
- Add Filter action after data query
- Condition:
{{searchPeople.totalCount}} > 0
- Only send email if condition is true
Multi-Step Reports
Build complex reports with multiple queries:
- Step 1: Search for new signups
- Step 2: Search for activations
- Step 3: Calculate conversion rate
- Step 4: Send email with all metrics
- Step 5: Post to Slack with summary
Time-Based Queries
Query data relative to the scheduled run:
// In Code action
const today = new Date();
const lastWeek = new Date(today - 7 * 24 * 60 * 60 * 1000);
return {
startDate: lastWeek.toISOString(),
endDate: today.toISOString()
};
Scheduling Best Practices
Timing
- Morning reports: Schedule for 8-9am before work starts
- Weekly summaries: Monday morning for previous week
- Monthly reports: 1st of month or first business day
- Avoid weekends: Unless your team works weekends
Time Zones
Schedules run in your workspace’s configured timezone. Check Settings → General to verify.
Retry Logic
If a report fails:
- Check workflow runs in Settings → Workflows → [Your Workflow] → Runs
- Review error messages
- Fix and manually trigger if needed
Limitations
Email Constraints
- Single recipient per email action
- Static attachments only
- Basic formatting (no HTML signatures)
- Plain text or simple HTML only
Data Limits
- Search returns max 200 records
- Use aggregations for large datasets
- Consider Code action for complex queries
- No rich email templates
- No inline charts or graphs
- Link out to dashboards for visuals
Alternatives to Email
Slack Notifications
More interactive than email:
// Code action to format Slack message
return {
slackPayload: JSON.stringify({
blocks: [
{
type: "header",
text: { type: "plain_text", text: "Weekly Report" }
},
{
type: "section",
fields: [
{ type: "mrkdwn", text: "*Signups*\n{{searchPeople.totalCount}}" },
{ type: "mrkdwn", text: "*Activated*\n{{searchActivated.totalCount}}" }
]
}
]
})
};
Send data to Looker, Tableau, or other BI platforms:
POST https://your-bi-tool.com/api/ingest
Headers: Authorization: Bearer BI_API_KEY
Body: {{code.reportData}}
Save to Consuelo
Create report records in Consuelo:
- Create Record action
- Object: “Weekly Reports”
- Fields: Date, Signups, Activations, etc.
- Build dashboard from historical reports
Troubleshooting
Reports Not Sending
| Issue | Check |
|---|
| Workflow not active | Toggle workflow to Active |
| Wrong schedule time | Verify AM/PM and timezone |
| Email address invalid | Check recipient format |
| Rate limit hit | Check API usage in Settings |
| Code errors | Review workflow run logs |
Data Seems Wrong
- Verify date filters (start of day vs end of day)
- Check timezone conversions
- Confirm field names in queries
- Review filter conditions
Examples
Daily Signup Summary
Trigger: Daily at 8am
Actions:
- Search People (created today)
- Send Email to growth-team@company.com
Weekly Revenue Report
Trigger: Monday 9am
Actions:
- Search Companies (plan type = paid)
- Sum revenue field
- Send Email to leadership
Real-Time Alert
Trigger: Record Created (High-value opportunity)
Actions:
- Send Email to sales-manager@company.com
- POST to Slack #sales-alerts