📈 Generating Reports and Dashboards with Python and Google Sheets
Creating reports and dashboards manually can be a repetitive and time-consuming task. But with Python + Google Sheets, you can automate data collection, formatting, and visualization, all inside a collaborative cloud spreadsheet!
This guide walks you through how to:
✅ Automatically generate reports
✅ Update Google Sheets with dynamic data
✅ Create simple dashboards using built-in charts
✅ Schedule automated updates
🧰 Tools You’ll Need
-
Python 3.x
-
Google Sheets
-
gspreadfor interacting with Google Sheets -
oauth2clientfor authentication -
(Optional)
matplotliborpandasfor processing/visualizing data before export
Install Dependencies
pip install gspread oauth2client pandas matplotlib
🔑 Step 1: Authenticate with Google Sheets
Set up your Google Sheets API access using a service account (see previous post on Working with Google Sheets API).
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
client = gspread.authorize(creds)
sheet = client.open("Sales Report").sheet1
📤 Step 2: Populate the Sheet with Dynamic Report Data
Imagine you want a weekly sales report. Here’s a sample:
import pandas as pd
# Example data
data = {
"Date": ["2025-04-13", "2025-04-14", "2025-04-15"],
"Product": ["Widget A", "Widget B", "Widget A"],
"Quantity": [12, 8, 5],
"Revenue": [240, 160, 100]
}
df = pd.DataFrame(data)
# Clear existing sheet
sheet.clear()
# Update headers and data
sheet.append_row(df.columns.tolist())
for row in df.values.tolist():
sheet.append_row(row)
📊 Step 3: Create a Dashboard Inside Google Sheets
Once your data is there:
-
Go to Insert > Chart in Google Sheets
-
Choose chart type: Column, Line, Pie, etc.
-
Link chart to your data range (e.g.,
A1:D4) -
Place charts in a separate Dashboard sheet
You can automate this partially with Google Apps Script if needed, or manually design the dashboard using named ranges and Google Sheets’ visual tools.
📅 Step 4: Schedule Automated Reports
Option A: Use Python Script + Cron Job (Linux/macOS)
Edit crontab with:
crontab -e
Add:
0 9 * * 1 /usr/bin/python3 /path/to/your_script.py
This runs every Monday at 9 AM.
Option B: Windows Task Scheduler
Use Task Scheduler to run your .py script weekly or daily.
🖼 Optional: Export Matplotlib Charts to Image and Upload
If you generate charts using matplotlib, you can save them locally and upload them to Google Drive (using pydrive or Google Drive API), then link to them from your sheet.
import matplotlib.pyplot as plt
df.groupby("Product")["Revenue"].sum().plot(kind='bar')
plt.title("Revenue by Product")
plt.savefig("revenue_chart.png")
🔁 Automating KPIs or Summary Rows
Add a summary section to the sheet:
summary_data = [
["Total Revenue", df["Revenue"].sum()],
["Average Sale", df["Revenue"].mean()],
["Top Product", df.groupby("Product")["Revenue"].sum().idxmax()]
]
for row in summary_data:
sheet.append_row(row)
✅ Final Thoughts
You’ve just built a pipeline to:
-
Collect or generate dynamic data
-
Export it to Google Sheets
-
Build live dashboards and summaries
-
Automate the entire workflow
| Feature | Tool |
|---|---|
| Sheet Integration | gspread |
| Data Processing | pandas |
| Charting | Google Sheets / matplotlib |
| Automation | cron / Task Scheduler |