The Scenario
Sprint planning wrapped yesterday. The sprint backlog lives in an Excel workbook the team shares — 20 user stories across the top rows and 60 subtasks nested under them, each with a type indicator in column C and the parent story name in column D. The sprint starts Monday. The team lead needs all of it in Asana before stand-up.
Last sprint, he spent three hours recreating the hierarchy by hand. He said he'd figure out a better way. Now it's Friday afternoon.
The bad version:
- Create each story as a parent task in Asana manually, then open each parent task and add the subtasks one at a time.
- Keep the sheet open beside Asana in split-screen, reading each row, typing the name, setting the assignee, checking the type column to know whether to hit "Add subtask" or "Add task."
- Realize partway through that Asana's interface re-sorted the stories and you've lost track of which subtask belongs where — so some end up in the wrong parent.
Three hours of context-switching between a sheet and a UI doesn't make the sprint better. It just delays the actual work and burns the most productive part of Friday.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent inside your Google Sheet. It reads the structure of the backlog, infers the parent-child relationships from the column indicators, and builds the full hierarchy in Asana — parent tasks, subtasks, and the correct linking between them.
For each row in this sheet where column A has a value and column B is blank, create an Asana task in project [ID]. For rows where column B has a value, create a subtask under the parent task listed in column A.
What You Get
- Parent tasks created first, each with the name from column A
- Subtasks created under their correct parent, linked via Asana's subtask relationship
- Column E gets the GID of each created item — parents and subtasks alike — so you can reference them in follow-up operations
- Any row where the parent name in column B doesn't match a created parent task gets written to column F with "Parent not found"
What If the Data Is Not Quite Ready
The type indicator uses words instead of blank/filled columns
Read the sheet where column C contains either "Story" or "Subtask". For rows where column C is "Story", create an Asana task in project [ID] using column A as the name. For rows where column C is "Subtask", create a subtask under the parent task whose name matches column D. Write the created GID into column E.
Some stories have no subtasks and should still be created
For each row in this sheet: if column C is "Story", create an Asana task in project [ID] with name from column A. If column C is "Subtask", create a subtask under the most recently created parent task where column D matches the parent's column A value. If a parent match can't be found, create it as a standalone task and write "Orphan" in column F.
Subtasks need their own due dates and assignees
Create Asana tasks and subtasks from this sheet. Column C is "Story" or "Subtask", column D is the parent name for subtasks. For all rows, use column A as name, column B as assignee email, and column E as due date. Create stories as tasks in project [ID], subtasks nested under their parent. Write all GIDs back into column F.
Deduplicate story names, then build the whole hierarchy in one pass
First, check column A for duplicate story names where column C is "Story" — if any duplicates exist, write them to a new sheet called "Duplicates" and skip them. Then create all unique stories as Asana tasks in project [ID] and all subtasks nested under their correct parent. Write GIDs into column F for all rows processed.
Asking for the dedup and the creation in one prompt means you get a clean project without a separate cleanup step.
Try It
Get the 7-day free trial of SheetXAI and open your sprint backlog sheet — ask SheetXAI to build the full parent-subtask hierarchy in Asana in one shot. You can also look at how to bulk-create tasks from a flat planning sheet, or check the Asana hub for the complete set of workflows.
