Scheduled Reports
Automated report generation and delivery.
API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/reports | List saved reports |
| POST | /api/reports | Create report config |
| PUT | /api/reports/:id | Update report |
| DELETE | /api/reports/:id | Soft delete |
| POST | /api/reports/:id/generate | Generate now |
| GET | /api/reports/export | Ad-hoc export |
Data Model
prisma
model CompanyReport {
id String
companyId String
name String
reportType String // 'analytics', 'engagement', 'growth'
dateRange Json // Preset or custom
platforms String[]
socialAccountIds String[]
metrics String[]
schedule Json? // Frequency, dayOfWeek, time
recipients String[] // Email addresses
isActive Boolean
lastGeneratedAt DateTime?
lastReportUrl String?
}Report Types
- Analytics: Engagement, reach, impressions
- Growth: Follower trends, growth rate
- Content: Post performance ranking
- Comparison: Platform vs platform
Generation Flow
- Check if report is due (schedule)
- Fetch analytics for date range
- Generate PDF/CSV/XLSX
- Upload to R2 storage
- Email download link to recipients
- Update lastGeneratedAt
Formats
| Format | Library | Use Case |
|---|---|---|
| pdfkit | Visual reports | |
| CSV | native | Data export |
| XLSX | exceljs | Spreadsheet |
Scheduling
Uses background jobs to check due reports:
- Cron: Every hour
- Check: Is it time based on schedule?
- Generate if due