DEV Community

Brad
Brad

Posted on

Python + Pandas: Automate Your Weekly Business Reports

Python + Pandas: Automate Your Weekly Business Reports

Tired of spending 2 hours every Monday on the same reports? Here's how to automate them.

The Problem

Most small businesses generate reports manually:

  • Export data from multiple sources
  • Paste into Excel or Sheets
  • Format, calculate, visualize
  • Email to stakeholders

This takes 2-4 hours/week. That's 100-200 hours/year.

Core Script

import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta

def generate_weekly_report(data_file, output_dir):
    df = pd.read_csv(data_file)
    df['date'] = pd.to_datetime(df['date'])
    last_week = datetime.now() - timedelta(days=7)
    weekly = df[df['date'] >= last_week]

    metrics = {
        'total_revenue': weekly['revenue'].sum(),
        'new_customers': weekly['new_customers'].sum(),
        'avg_order': weekly['revenue'].mean(),
    }

    fig, axes = plt.subplots(2, 2, figsize=(12, 8))
    weekly.groupby('date')['revenue'].sum().plot(ax=axes[0,0], title='Daily Revenue')
    weekly.groupby('date')['new_customers'].sum().plot(ax=axes[0,1], title='New Customers')
    plt.tight_layout()
    plt.savefig(f"{output_dir}/report_{datetime.now().strftime('%Y_%m_%d')}.png")
    return metrics
Enter fullscreen mode Exit fullscreen mode

Scheduling It

import schedule

def run_weekly():
    metrics = generate_weekly_report('sales.csv', 'reports/')
    print(f"Revenue: ${metrics['total_revenue']:,.2f}")

schedule.every().monday.at('08:00').do(run_weekly)
Enter fullscreen mode Exit fullscreen mode

Real Impact

A Shopify store owner I worked with saved 3 hours every Monday after setting this up.
That's 156 hours/year. At $50/hour value of time, that's $7,800/year saved.

Get 12 Automation Scripts

This report generator plus 11 more business automation scripts (invoicing, email, inventory, web scraping) for $9:

Python Business Automation Toolkit

One-time purchase, instant download, full source code.

Top comments (0)