Google Sheets for Project Management: I Ditched Notion for a Spreadsheet

Six months ago, I hit a wall. I was juggling four different projects for Search123—planning content calendars, tracking SEO research, managing a small team of freelance writers, and coordinating with our tool developers. I had tried Asana (too noisy), Trello (too shallow for complex tasks), and a brief, regretful stint with Monday.com that broke my freelancer budget.

Then, feeling particularly frugal one rainy Tuesday in November 2025, I opened a blank Google Sheet and thought: What if I just… build it?

Three months in, I’m not going back. Google Sheets for project management isn’t a compromise—it’s a genuinely powerful system when you know how to wire it up. Below is exactly how I use it, including the templates I built, the formulas that saved my sanity, and the honest limits you’ll hit.

Why Google Sheets? (The Honest Pitch)

Let me get this out of the way: Google Sheets is not the best project management tool. But it might be the most practical one for certain situations. Here’s the breakdown from my testing:

FeatureGoogle SheetsAsana (Free)Notion (Free)
Max project complexityMedium (with formulas)Low-MediumHigh
Collaboration speedInstant (live cells)GoodGood (but laggy on heavy pages)
Offline accessYes (with sync)LimitedLimited
Custom reportingUnlimited (query anything)Pre-built onlyGood (but slow)
Price$0 (personal) / $12/mo (Business)$0 (limited)$0 (limited)
Learning curveSpreadsheet knowledgeLowMedium

The killer feature? You can query your project data with formulas. Want to see all tasks assigned to “Sarah” that are overdue by more than 3 days? That’s a FILTER + TODAY() formula away. No clicking through dashboards.

What You’ll Need Before Starting

I’m assuming you have a Google account (you do) and basic spreadsheet literacy—knowing what a cell, column, and formula is. If you’ve used one of our 10 productivity Chrome extensions, you already have the attention to detail this needs.

Version note: I tested this setup on Google Sheets version 2025.12 (rolling release) accessed via Chrome 131 on a 2023 MacBook Air M2. The formulas work on mobile Sheets too, but editing complex conditional formatting rules on a phone is a nightmare—I don’t recommend it.

Step 1: The Core Sheet Structure (Your Backbone)

You only need three sheets in a single workbook. Don’t overcomplicate this.

Sheet 1: Tasks (The Master List)

This is your single source of truth. Every task, no matter how small, lives here.

Here’s my column layout:

ColumnHeader NameData TypeExample
ATask ID=ROW()-142
BProjectText“Content Calendar Q2”
CTask NameText“Draft: How to use voice search effectively”
DDescriptionText“Include testing on iPhone 16 and Pixel 9”
EAssigned ToText (dropdown)“Arron”
FStatusText (dropdown)“In Progress”
GPriorityText (dropdown)“High”
HDue DateDate2026-05-01
IEstimated HoursNumber4
JActual HoursNumber3.5
KDate CreatedDate=TODAY()
LCompleted DateDate(leave blank)

The smart stuff:

  • Column A auto-numbers using =ROW()-1. Delete a row? The numbers re-index. I learned this the hard way after manually renumbering 200 tasks.
  • Status values: “Not Started”, “In Progress”, “Review”, “Completed”
  • Priority values: “Low”, “Medium”, “High”, “Critical”

Dropdowns: Select a range → Data → Data validation → List of items. Paste comma-separated values. This prevents typos that break your formulas later.

Sheet 2: Dashboard (The View Layer)

This sheet reads from Tasks and shows you what matters. No manual data entry here—feed it formulas.

My core dashboard blocks:

  1. Overdue tasks (critical): =FILTER(Tasks!A:L, Tasks!F:F="In Progress", Tasks!H:H<TODAY())
  2. This week’s priorities: =FILTER(Tasks!A:L, Tasks!H:H>=TODAY(), Tasks!H:H<=TODAY()+7, Tasks!G:G="High")
  3. Completion rate: =COUNTIF(Tasks!F:F, "Completed") / COUNTA(Tasks!A:A)
  4. Hours tracked: =SUM(Tasks!J:J)

I also built a mini burn-up chart using SPARKLINE. Here’s the formula I put in cell D1:

=SPARKLINE( {COUNTA(FILTER(Tasks!F:F, Tasks!F:F=“Completed”)), COUNTA(Tasks!A:A)}, {“charttype”,“bar”; “color1”,“green”; “color2”,“lightgray”} )

That tiny bar updates in real-time as anyone on the team checks off tasks. When I tested this on a shared sheet with two freelancers both updating simultaneously (around 2 PM on a Wednesday), I watched the green bar grow by 3% in under 90 seconds. That’s the kind of dopamine hit that makes people actually want to update their status.

Sheet 3: Gantt Chart (The Timeline View)

This is the trickiest part. Google Sheets doesn’t natively do Gantt charts, but you can fake it with conditional formatting.

Setup:

  • Column A: Task Name (copied from Tasks sheet using =Tasks!C:C and a filter to only show “In Progress”)
  • Columns B through AF: Date headers (e.g., B1 = “4/23/2026”, C1 = “4/24/2026”… formatted as ddd m/d)

The magic formula for conditional formatting:

Select range B2:AF100 (or however many rows you need). Go to Format → Conditional formatting → Custom formula:

=AND(B$1>=$H2, B$1<=$L2)

Replace $H2 with your start date column and $L2 with your end date column. Set the formatting to a solid fill color.

When I first set this up, I spent twenty minutes wondering why my bars looked like confetti. Turns out I had mixed up relative and absolute references. Pro tip: Use $ to lock the column reference for the date row (B$1) but let the row change, and do the opposite for task columns ($H2).

Step 2: The Formula Arsenal (Copy These)

These are the specific formulas I use daily. Tested and working as of April 2026.

Priority matrix (multi-conditional): =IF(AND(F2=“Completed”, H2<TODAY()), “Completed Late”, IF(F2=“Completed”, “On Time”, IF(H2<TODAY(), “Overdue”, IF(H2=TODAY(), “Due Today”, “Upcoming”)))) This goes in a helper column and tells me exactly which tasks are in trouble without me scanning dates.

Workload balancing: =QUERY(Tasks!A:L, “select E, count(A) where F = ‘In Progress’ group by E label count(A) ‘Active Tasks’”) This shows me if one person has 8 active tasks while another has 2. I noticed in January that I was consistently over-assigning myself—this formula made it embarrassingly visible.

Project completion by week: =ARRAYFORMULA(COUNTIFS(Tasks!L:L, “>="&DATE(2026,4,1), Tasks!L:L, “<="&DATE(2026,4,7), Tasks!F:F, “Completed”)) Adjust the dates to match your reporting period. I use this every Monday morning to fill my weekly report.

Step 3: Automation That Actually Saves Time

Manual spreadsheets are only useful if you maintain them. Here’s how I automate the boring parts.

Email notifications via Google Apps Script

Yes, Sheets can send emails. I wrote a 30-line script that checks every morning at 8 AM for tasks due that day and sends me a compact digest.

Here’s the core of it:

function sendDigest() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“Tasks”); var data = sheet.getDataRange().getValues(); var today = new Date(); var dueTasks = [];

for (var i = 1; i < data.length; i++) { var dueDate = new Date(data[i][7]); // column H if (dueDate.toDateString() === today.toDateString() && data[i][5] !== “Completed”) { dueTasks.push(data[i][2] + " - " + data[i][1]); // task name + project } }

if (dueTasks.length > 0) { MailApp.sendEmail({ to: Session.getActiveUser().getEmail(), subject: “Due Today: " + dueTasks.length + " tasks”, body: dueTasks.join("\n”) }); } }

To set this up: Extensions → Apps Script → paste the code → save (Ctrl+S) → click the clock icon (Triggers) → add a time-driven trigger for 8-9 AM.

Caveat: Gmail has a daily sending limit (100 recipients for free accounts, 1500 for Workspace). This script sends to one address, so it’s fine. If you’re distributing digests to a team of 15+, watch out for that 100-recipient limit.

Automated sorting

I don’t want to manually sort by due date every morning. I use:

Data → Protected sheets and ranges → Set permissions so only I can edit the Tasks sheet, then add this Apps Script:

function onEdit(e) { if (e.range.getSheet().getName() === “Tasks” && e.range.getColumn() === 6) { // Status column changed, resort var sheet = e.source.getSheetByName(“Tasks”); var range = sheet.getRange(“A2:L” + sheet.getLastRow()); range.sort([{column: 8, ascending: true}, {column: 7, ascending: false}]); } }

This triggers whenever someone changes the status column. Tasks bubble up by nearest due date, with higher priorities first.

Step 4: Collaboration Without Chaos

I share this sheet with three freelance writers. Here’s how I keep things from descending into spreadsheet anarchy.

Data validation everywhere

Every editable cell that accepts specific values gets a dropdown. I defined named ranges for things like:

  • Projects: “Content Calendar Q2”, “Tool Development”, “SEO Audit”
  • TeamMembers: “Arron”, “Sarah”, “Mike”, “Priya”

Then in Data validation, I use =Projects or =TeamMembers as the list source. This means I can add a new team member in one place (the named range) and it updates every dropdown instantly.

Conditional formatting for “stale” tasks

I highlight tasks where the status hasn’t changed in 3+ days:

=TODAY()-INDEX(SORT(FILTER(AuditLog!C:C, AuditLog!A:A=A2), 1, 0), 1) > 3 (This assumes you have a tiny audit log sheet tracking changes—overkill for most cases. A simpler version: add a “Last Updated” column and highlight cells where status = “In Progress” AND Last Updated < TODAY()-3.)

Comments and notes

I trained my team to use comments (Ctrl+Alt+M) rather than editing cells directly when discussing task details. This creates a thread that’s searchable and doesn’t muck up the data. When I tested this with Sarah last month—she tends to overwrite statuses instead of logging time—the comment thread on her row has saved me 4 follow-up emails.

Step 5: Limitations I Hit (and Why I Didn’t Switch)

I want to be honest about where Google Sheets broke down. If these are dealbreakers for you, please use a dedicated tool.

Limitation 1: Mobile experience is terrible

The Google Sheets mobile app is designed for data entry, not project management. I tried updating a task status while waiting for coffee on my iPhone 15 Pro (iOS 18.3), and it took 7 taps to do what takes 2 clicks on desktop. Scrolling a Gantt chart on a 6.1-inch screen is masochistic.

My workaround: I built a simple data entry form using Google Apps Script and Google Forms. Team members (including me) can submit quick updates via a form that writes to the Tasks sheet. The form loads in 2 seconds on mobile compared to Sheets’ 8+ seconds.

Limitation 2: No native dependencies

You can’t say “Task B starts 3 days after Task A finishes” without manual formulas. True Gantt charts in dedicated tools handle this automatically. In Sheets, I maintain a Dependencies column (column M) where I type the Task ID of the blocker, then use conditional formatting to highlight blocked tasks yellow.

Limitation 3: Version history is messy

Google Sheets keeps 30 days of version history, but it’s per-sheet, not per-cell. If someone accidentally deletes 50 rows, you can restore them, but you’ll lose any edits made in the meantime by other people. I lost 2 hours of formatting work last December because of this. Save manual snapshots by going to File → Version history → Name current version before making major changes.

Limitation 4: 10 million cell limit

Sounds huge, right? Start adding Gantt charts with daily columns for 2 years (730 columns) × 200 tasks, and you’re at 146,000 cells just for the Gantt. Add 5 sheets with similar complexity, and you’re scratching 1 million. For a large agency managing 50+ projects, this limit becomes real. I track about 4 projects in one workbook with roughly 300,000 cells—I’m fine, but I wouldn’t push to 2 million without performance lag.

The Dashboard I Actually Use (Screenshot-Free Description)

Since I can’t embed an image here, let me describe my main dashboard:

Top row: Four summary cards made with single-cell formatting. Cell A1: “Overdue: 3” (using =TEXT(COUNTIF(Tasks!F:F, "Overdue"), "Overdue: 0")). Cell D1: “This week: 12”. Cell G1: “Completion: 67%”. Cell J1: “Hours tracked: 143”.

Below that: A table showing overdue tasks with red fill, sorted by days overdue in descending order. Next to it, a sparkline showing completed tasks per week for the last 8 weeks.

Bottom half: The Gantt chart with horizontal bars. Completed tasks are grayed out, in-progress tasks are blue, overdue tasks are red. The current date has a vertical red line (a thin border on the column that matches =TODAY() format).

I open this dashboard every morning before I touch Slack. It takes 3 seconds to tell me where fires are burning.

Integrating with Other Tools (The Power Move)

Google Sheets shines when it connects to your existing workflow. Here are the integrations I use:

Zapier for Slack notifications

I set up a Zapier automation (free tier, 100 tasks/month) that watches my Tasks sheet. When a new row is added with Priority = “Critical”, it posts to my team’s #urgent Slack channel.

Cost: Free (Zapier free tier) + Sheets. Compare that to Slack’s own project management integrations that start at $7.25/user/month.

Import from Trello

I exported all 47 cards from an old Trello board as CSV, imported them to my Tasks sheet, and re-mapped the columns in about 15 minutes. Google Sheets’ IMPORTDATA function can even pull from Trello’s JSON export directly:

=IMPORTDATA(“https://api.trello.com/1/boards/YOUR_BOARD_ID/cards?key=YOUR_KEY&token=YOUR_TOKEN")

(This requires a Trello API key—you can get one from trello.com/power-ups/admin)

Calendar sync

I use IMPORTRANGE to pull due dates into a separate sheet that I’ve connected to Google Calendar via IFTTT. It’s janky—updates take 15-30 minutes—but it works. If you need real-time sync, you’re better off with a dedicated tool.

When You Should NOT Use Google Sheets

I’ve been evangelizing, but let me be clear about when you should walk away:

  • You have more than 10 team members: Collaboration overhead becomes a mess. People will accidentally overwrite each other’s data, and the version history won’t save you.
  • You need time tracking: There are 47 better tools for logging hours. Sheets can store hours, but it can’t track them with a start/stop button.
  • You’re building client-facing dashboards: Sheets sharing is either “view all data” or “email a PDF.” There’s no polished client portal.
  • Regulated industries: Healthcare (HIPAA), finance (SOX), or any compliance-heavy field. Google Sheets doesn’t offer audit trails or access controls granular enough.

For those scenarios, I recommend looking at free project management tools that offer dedicated compliance features.

My Final Setup (The Living Template)

If you want to replicate my system exactly, here’s the structure:

Project Management (Workbook) ├── Tasks (Master data) │ ├── Columns A-L (as described above) │ ├── Helper columns M-P (status flags, dependency IDs, tags) │ └── Named ranges: Projects, TeamMembers, Priorities ├── Dashboard (Formulas only, no data entry) │ ├── Overdue tasks (red table) │ ├── This week’s tasks (blue table) │ ├── Completion summary (counts + sparklines) │ └── Project breakdown (pie chart from QUERY) ├── Gantt (Conditional formatting) │ ├── Row 1: Date headers (auto-generated with SEQUENCE) │ └── Rows 2+: Task bars └── Archive (For completed projects) └── Same columns as Tasks, but filtered to only show status=Completed

I manually move completed tasks to the Archive sheet once a month. There’s probably a script for this, but I find the manual review helpful—I catch quality issues and can assign follow-up tasks.

What I’d Do Differently Next Time

If I were building this from scratch again in 2026, I would:

  1. Use named ranges from day one. I spent two weeks with broken formulas because I referenced Tasks!H$2:H$500 instead of INDIRECT("Tasks!H$2:H$"&COUNTA(Tasks!A:A)). Named ranges (=Tasks_DueDate) are less fragile.
  2. Add a “Blocked” status earlier. I didn’t realize how often tasks stall on external dependencies until week 4. Now I have a dedicated blocked status with a notes field for the blocker.
  3. Skip the color coding on the Gantt. I spent 3 hours making rainbow-colored bars that nobody looked at. Simple blue/gray/red is enough.

The Verdict

After 3 months of daily use across 4 projects and 3 collaborators, I’d call Google Sheets project management a solid 7/10 for solo developers and small teams. It’s not pretty, it’s not purpose-built, but it’s free, infinitely flexible, and it doesn’t force you into someone else’s workflow.

When I compare it to the dedicated tools I’ve tested—and I’ve tested 5 search engines for a week so I know how to run a comparison—Sheets wins on adaptability and loses on convenience. You trade 10 hours of setup time for $0/month and complete control.

Is it for everyone? No. Is it for the kind of person who builds their own systems, who prefers understanding how their tools work, who enjoys the satisfaction of a perfectly optimized formula? Absolutely.

If you’re already knee-deep in spreadsheets for other work—like using one to track free online courses and certifications or managing a content calendar—consolidating your project management into the same environment might be the productivity hack you didn’t know you needed.

One more thing: if you build this, name your workbook something you’ll remember. I called mine “The Mothership.” It’s saved in my Google Drive root, pinned, and I navigate to it by muscle memory alone. That’s the ultimate test of a tool—when you stop thinking about the tool and just work.

Arron Zhou
Written by
Arron Zhou is a frontend engineer with 8 years of experience building web applications. After spending years helping colleagues navigate search engines and productivity tools, he started Search123 to share practical, tested techniques with a wider audience. Every tool reviewed on this site has been personally installed, configured, and used for at least one week before publication.

Comments