Introduction
It started with frustration. Every morning, I’d sit down with a coffee and open the same five tabs, sift through repetitive emails, rename downloaded files, and update a spreadsheet that felt more like a punishment than a productivity tool. It was the same dance every day — tedious and mind-numbing. But then it hit me: I’m a developer. I have Python. Why am I doing all of this manually?
This post walks through how I automated my daily workflow using Python — from opening apps and organizing files to pulling in data and sending summary reports. It took less than 30 minutes to set up, and it changed my mornings completely.
Part 1: Identifying the Repetitive Tasks
Before diving into code, I took a step back to list the tasks I repeated daily. It looked something like this:
- Open email and sort unread messages.
- Launch productivity tools (Notion, Slack, Google Calendar).
- Rename and move downloaded files to categorized folders.
- Log key updates in a Google Sheet.
- Summarize tasks and email them to my team.
When I saw them written down, I realized: these are all things a script could handle.
Part 2: The Tools I Used
- Python 3.11: My language of choice.
- Selenium: For web browser automation.
- imaplib + email: To connect to and process Gmail.
- os / shutil / pathlib: For file operations.
- openpyxl + pandas: To interact with Excel and CSV.
- smtplib: For sending emails.
- schedule: To automate running scripts at specific times.
Part 3: Automating Email Processing
The first problem was my inbox. I used Python’s imaplib to connect to my Gmail account. Here’s the condensed flow:
- Connect via IMAP.
- Search unread emails.
- Download sender, subject, timestamp.
- Mark important ones (from specific addresses) with a label.
I created a small rule engine based on subject keywords. Anything containing “invoice”, “client update”, or “meeting” would trigger a specific tag or action.
import imaplib, email
(Full code excluded here for brevity, but trust me — it was under 30 lines.)
Part 4: Opening Daily Tools
I used Python’s subprocess module to open tools like Notion and Slack from their local app paths. For web tools, I used Selenium to launch Chrome and navigate to predefined tabs.
import subprocess
subprocess.Popen(["C:\\Program Files\\Notion\\Notion.exe"])
With a loop, I could launch all my web apps in separate tabs within seconds.
Part 5: Organizing My Downloads Folder
This one gave me a silly amount of joy.
Every morning, I’d rename downloaded PDFs (receipts, invoices, etc.) manually. Now I run a Python script that scans ~/Downloads, checks for file types, renames them based on patterns, and moves them into categorized folders.
from pathlib import Path
import shutil
for file in Path.home().joinpath("Downloads").glob("*.pdf"):
if "invoice" in file.name.lower():
new_name = f"invoice_{file.stat().st_mtime}.pdf"
shutil.move(file, Path("~/Documents/Invoices") / new_name)
Part 6: Updating My Spreadsheet
Every day I used to type key numbers (emails handled, meetings scheduled, tasks done) into a Google Sheet.
Now, I gather the metrics during the workflow and update the sheet automatically using gspread and pandas. Here’s a snippet:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
client = gspread.authorize(creds)
sheet = client.open("Daily Tracker").sheet1
sheet.append_row([date, emails, meetings, tasks])
Simple. Fast. Painless.
Part 7: Emailing the Summary
The final step was to wrap it all up and send a short report to myself and my team. I used smtplib to send an HTML-formatted email.
import smtplib
from email.mime.text import MIMEText
msg = MIMEText("<h3>Daily Summary</h3><p>Emails: 12<br>Meetings: 2<br>Tasks: 5</p>", 'html')
msg['Subject'] = 'Daily Workflow Report'
Send it. Done. No more writing morning updates manually.
Part 8: Scheduling It
To make it truly effortless, I scheduled the entire script using the schedule module, and had it run automatically at 8:30 AM every day.
import schedule
import time
schedule.every().day.at("08:30").do(run_daily_workflow)
while True:
schedule.run_pending()
time.sleep(1)
Or, if you prefer OS-level scheduling:
- Windows: Task Scheduler
- macOS/Linux: cron jobs
Conclusion: Why This Changed My Life
This took me under 30 minutes to build, test, and implement.
What I gained:
- ~1 hour saved every day
- Zero cognitive load in the morning
- No skipped updates or forgotten tabs
- That smug feeling when someone says “how do you stay so organized?”
And the best part? Once you automate one thing, you start noticing everything you can automate. Python becomes a personal assistant — and not just in theory.
If you’re a developer (or even a semi-technical person) and you’re still stuck in the loop of repeating daily tasks manually, I can’t recommend this enough. Python isn’t just for data science or backend work — it can give you your time back.
Now when I sit down with my coffee, my tabs are open, my email is sorted, my docs are filed, and my brain is ready for actual work — not digital housekeeping.
