Yes, you can build a useful Kanban board in Google Sheets without Apps Script. The reliable approach is to keep one task per row on a Tasks tab, control the Status field with a dropdown, and use formulas to display matching rows on a separate Board tab.
That distinction matters. A board made from manually formatted cells can be quick and visual, but it is harder to filter, validate, and report on. A structured task table gives each item a stable identity and makes the board a view of the data rather than the data itself.
Use the visual model for lightweight tracking when manual maintenance is acceptable. Use the database-plus-view model when status accuracy, filtering, reporting, or future migration matters.
Can Google Sheets work as a Kanban board?
Google Sheets provides the basic ingredients for a simple Kanban workflow: tables, dropdowns, formulas, conditional formatting, protected ranges, and the ability to move cells or rows. It does not provide the same status-aware card interaction as a dedicated board application. Moving a spreadsheet row changes its location, but it does not automatically update a separate Status field or trigger a workflow.
Google says up to 100 people with view, edit, or comment permissions can work on a file simultaneously. That is a file-collaboration limit, not a recommendation that 100 people edit a formatted board at once. Test the board with representative tasks and the people who will actually maintain it. There is no universal card-count or collaborator threshold that determines when Sheets stops being suitable.
Keep task data in one source of truth, then make the Kanban board a view of that data when reliable status and reporting matter.
Design the workflow and task fields before formatting
Begin with the states work actually passes through. Add a stage only when it represents a meaningful state or handoff. A starting workflow might be Backlog, To Do, In Progress, Review, and Done, but use the stages your team recognizes. Decide whether blocked work remains In Progress, whether it counts toward WIP, and when completed tasks move to an archive.
Create a plain, tabular Tasks tab with one task per row. A practical proposed schema is:
- Task_ID: a required, immutable, unique identifier.
- Task_Name: concise text that another person can recognize.
- Status: a controlled value from the agreed workflow.
- Assignee: a consistent name or email format.
- Due_Date: a real date value rather than date-looking text.
- Priority: a controlled value when priority is part of the process.
- Created_At, Started_At, and Completed_At: dates that support basic elapsed-time questions.
- Archived: an optional Boolean or controlled value for hiding completed work.
Do not use Task_Name plus Status as the identity. Names can repeat and statuses change. If tasks may be processed by multiple systems or runs, use a database-enforced unique Task_ID or a transactional upsert. A lookup followed by create is not a safe deduplication method when concurrent writers are possible.
Use Google Sheets data validation to create a Status dropdown. Keep the data tab simple: Google notes that merged cells, conditional formatting, and data validation can affect the availability of the standard filter feature. Put presentation formatting on the separate Board tab. See Google’s dropdown and data-validation documentation for the current interface.
Build a board view that updates from task status
The most dependable setup uses the Tasks tab as the editing location and the Board tab as a read-only projection. Add one heading for each status, then place a FILTER formula below each heading.
For example, if Status is in column C and task fields occupy columns A through H, use:
=IFERROR(FILTER(Tasks!A:H, Tasks!C:C="In Progress"),"")
Repeat the formula for each stage, changing the exact status text. When a user changes Status in the source row, the matching row appears in a different board view. Google documents that FILTER condition ranges must correspond to the range being filtered and that FILTER returns #N/A when no values match. IFERROR displays an empty result instead.
Exact text matters. A value such as In progress or In Progress may not match In Progress. Keep the source and condition ranges aligned, and review every formula if columns are inserted, renamed, or reordered.
FILTER creates a view, not an independently editable card. Users should update Status, Assignee, Due_Date, or other fields in the source row. Protect formula output ranges to reduce accidental edits, but do not treat protection as security. Google explicitly notes that protected sheets and ranges are not a security measure.
Format the board without damaging the data model
Format the Board tab for scanning rather than styling the database. Use clear stage headings, consistent row heights, restrained colors, frozen headings, and enough room for task names and owners. Keep the Tasks tab plain and avoid merged cells there.
A visual-only board can use formatted cell blocks as cards. Google Sheets supports moving cells and rows by dragging or cut-and-paste, but paste behavior varies. Some operations preserve parts of the formatting while others require values, formatting, validation, or conditional-formatting rules to be pasted separately. Test a sample card on a copy before using the layout with live tasks.
Every visual card should contain or reference a stable Task_ID. Otherwise, copying a card can create a duplicate task, and moving a card can make its displayed stage disagree with its stored Status. If a visual move is the chosen operating model, verify the destination, Task_ID, validation, formatting, and Status after the move. Google’s instructions for moving cells and rows describe spreadsheet operations, not a dedicated Kanban card workflow.
For formula views, leave sufficient space for results to expand and do not place manual notes inside formula output ranges. As a sheet grows, reduce unnecessary conditional-formatting rules and inefficient calculations. Google provides performance guidance, but it does not establish a universal maximum number of cards.
Add a WIP warning and understand what the sheet cannot infer
Define the WIP unit before writing the formula. It might be task count, estimated hours, points, or another measure. Also decide whether blocked tasks count. For a simple task-count warning, if Status is in column C, use:
=COUNTIF(Tasks!C:C,"In Progress")
Compare the result with a limit cell and use conditional formatting to highlight an over-limit count. Google Sheets supports conditional formatting and custom formulas. This is a warning, not a control that prevents someone from adding or moving work.
A red WIP warning makes a current count visible; it does not stop new work. A current Status value also cannot reveal how long a task spent in earlier stages. Record transition timestamps or maintain a status-event history when cycle-time analysis matters.
For basic elapsed time, store Created_At, Started_At, and Completed_At. For stage-level analysis, use a separate event grain with one row per transition, such as Task_ID, prior status, new status, and timestamp. Do not infer historical stage duration from the task’s current status alone.
Use deterministic formulas for explicit rules such as counting statuses, checking dates, and identifying duplicate IDs. AI is not necessary for these operations. If unstructured intake requires suggested statuses or priorities, preserve the original text, store the suggestion separately, and require review before writing it into an approved task field.
Choose a template by its actual layout, not its label
Templates can shorten setup, but inspect the current workbook and confirm its fields before adopting it. Public descriptions for two spreadsheet examples show different approaches:
- Vertex42’s Agile Kanban spreadsheet is a row-based adaptation for Google Sheets and Excel. Its page describes horizontal lanes, task or activity rows, a backlog, workflow lanes, and a sprint progress chart. It is not a conventional dedicated card interface, so verify the current workbook’s required inputs before relying on its mechanics.
- Weekdone’s spreadsheet example publicly presents Plans, Progress, Problems, and Future Ideas. Those categories differ from a conventional sequence such as To Do, In Progress, Review, and Done. The public page is a template description, not a complete technical specification of fields or automation.
The current Google Sheets asset and feature set for the Indzara template described in some articles were not independently confirmed. Do not rely on claims about automated due-date warnings, color-coded cards, or configuration options without checking the actual downloadable file.
When to move from Sheets to a dedicated board
Choose based on workflow failure modes rather than a fixed number of cards. Sheets may remain a good fit when the board is mainly a visibility aid, manual status changes are acceptable, and an owner can maintain the formulas and data. Evaluate a dedicated system when missing workflow functions or spreadsheet repair become recurring work.
- You need reliable notifications or assignment changes based on status.
- Tasks need comments, attachments, subtasks, relationships, or dependencies that are awkward to manage in rows.
- You need historical workflow reporting but are not consistently recording status transitions.
- Duplicate or stale records, formula repair, or conflicting edits are recurring problems.
ClickUp is one qualified example of a status-aware alternative. Its official documentation describes Board View grouped by status and drag-and-drop movement. It also documents Automations built from triggers, conditions, and actions, plus task context such as comments, attachments, subtasks, relationships, and custom fields. Availability and usage limits vary by plan and workspace configuration.
ClickUp’s Work in Progress Limits can signal that a column is over capacity, but the documentation states that tasks can still be created, moved, or updated when a limit is exceeded. That is the same important distinction as a Sheets WIP warning: visibility is not enforcement.
If you have decided that a status-aware task system is warranted, see ClickUp consulting or review ClickUp setup and automations. These resources are options for evaluating a dedicated system, not a promise of a specific import, API connection, or workspace configuration.
Frequently asked questions
Can I build a Kanban board in Google Sheets without scripts?
Yes. A formatted board or a FILTER-based view uses standard Sheets features. Apps Script is not required for basic construction.
Can I drag tasks between columns?
You can move spreadsheet cells or rows by dragging or cut-and-paste. That action does not automatically update a structured Status field. In a formula-based setup, change Status in the Tasks tab.
Can multiple people collaborate on the sheet?
Yes. Google documents simultaneous work by up to 100 people with view, edit, or comment permissions. Whether a particular formatted board remains usable with concurrent editors depends on its structure, protections, and editing practices.
Can Sheets enforce a WIP limit?
A formula and conditional formatting can flag an over-limit count, but the warning does not block additional work. Define the WIP unit and response rule with the team.
How can I calculate cycle time?
Record timestamps such as Created_At, Started_At, Completed_At, or a separate status-event history. A current Status field alone cannot reconstruct time spent in earlier stages.
How do I prevent duplicate tasks?
Assign an immutable Task_ID and enforce uniqueness in the system that stores the records. For concurrent processing, use a database-enforced unique constraint or transactional upsert rather than relying on lookup-then-create.
