Operations & Admin
communication
How to Automate End-of-Day Summary Reports
Generate and send daily summary reports of what each team accomplished.
Jay Banlasan
The AI Systems Guy
End-of-day reports give managers visibility without micromanaging. I built a system to automate end of day summary reports that pulls activity from your tools, compiles what each person accomplished, and delivers a clean summary at 5pm. No manual tracking. No forgotten updates.
The day's work, summarized automatically.
What You Need Before Starting
- Python 3.8+
- API access to productivity tools (PM tool, Git, CRM)
- An AI API key (Claude)
- Slack or email for delivery
Step 1: Gather Activity from Multiple Sources
import requests
from datetime import datetime, timedelta
def gather_daily_activity(team_config):
today = datetime.now().strftime("%Y-%m-%d")
activity = {}
for member in team_config["members"]:
activity[member["name"]] = {
"tasks_completed": fetch_completed_tasks(member, today),
"commits": fetch_git_commits(member, today),
"meetings_attended": fetch_calendar_events(member, today),
"messages_sent": 0
}
return activity
def fetch_completed_tasks(member, date):
# Replace with your PM tool API
return [{"title": "Example task", "project": "Client A"}]
def fetch_git_commits(member, date):
return [{"message": "Fix login bug", "repo": "main-app"}]
def fetch_calendar_events(member, date):
return [{"title": "Client sync", "duration": 30}]
Step 2: Generate the Summary with AI
import anthropic
import json
client = anthropic.Anthropic()
def generate_eod_summary(activity, team_name):
prompt = f"""Create a concise end-of-day summary for the {team_name} team.
Activity data:
{json.dumps(activity, indent=2)}
Format:
## Team Summary
One paragraph overview of the team's day.
## Individual Updates
For each person, 2-3 bullet points of what they accomplished.
Focus on outcomes, not activity. "Shipped login fix" not "wrote code."
## Tomorrow's Focus
Based on what was in progress, suggest 2-3 priorities for tomorrow.
Keep it under 300 words total."""
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return message.content[0].text
Step 3: Format and Deliver
def deliver_eod_report(summary, channel, slack_token, team_name):
date_str = datetime.now().strftime("%A, %B %d")
requests.post(
"https://slack.com/api/chat.postMessage",
headers={"Authorization": f"Bearer {slack_token}"},
json={
"channel": channel,
"blocks": [
{"type": "header", "text": {"type": "plain_text", "text": f"EOD Report: {team_name} - {date_str}"}},
{"type": "section", "text": {"type": "mrkdwn", "text": summary}},
{"type": "divider"},
{"type": "context", "elements": [
{"type": "mrkdwn", "text": "Generated from project activity, Git commits, and calendar data."}
]}
]
}
)
Step 4: Track Productivity Trends
import sqlite3
def init_eod_db(db_path="eod_reports.db"):
conn = sqlite3.connect(db_path)
conn.execute("""
CREATE TABLE IF NOT EXISTS daily_metrics (
date TEXT,
team_member TEXT,
tasks_completed INTEGER,
commits INTEGER,
meetings INTEGER
)
""")
conn.commit()
return conn
def store_daily_metrics(conn, activity):
date = datetime.now().strftime("%Y-%m-%d")
for member, data in activity.items():
conn.execute(
"INSERT INTO daily_metrics VALUES (?,?,?,?,?)",
(date, member, len(data["tasks_completed"]),
len(data["commits"]), len(data["meetings_attended"]))
)
conn.commit()
def weekly_trend(conn, member):
rows = conn.execute("""
SELECT date, tasks_completed, commits
FROM daily_metrics WHERE team_member=?
ORDER BY date DESC LIMIT 5
""", (member,)).fetchall()
return rows
Step 5: Schedule the Report
def run_eod_report(config):
activity = gather_daily_activity(config)
summary = generate_eod_summary(activity, config["team_name"])
deliver_eod_report(summary, config["channel"], config["slack_token"], config["team_name"])
conn = init_eod_db()
store_daily_metrics(conn, activity)
print(f"EOD report sent for {config['team_name']}")
# Schedule: weekdays at 5pm
# 0 17 * * 1-5 python3 /path/to/eod_report.py
What to Build Next
Add a weekly rollup that compiles the five daily reports into a single weekly summary. Managers get the daily view. Executives get the weekly rollup. Different audiences, same data source.
Related Reading
- AI-Powered Reporting That Actually Gets Read - making reports people use
- Building Your First Automation: A Complete Guide - automation fundamentals
- The Feedback Loop That Powers Everything - daily reporting as feedback
Want this system built for your business?
Get a free assessment. We will map every system your business needs and show you the ROI.
Get Your Free Assessment