> ## Documentation Index
> Fetch the complete documentation index at: https://docsv4.mile.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating Tasks in Bulk

> Create up to 1,000 tasks at once from a spreadsheet, or type them into a table.

**Bulk** creates many tasks in one go. You can:

* **Use our template**: download a spreadsheet with the right columns for the task type, fill it in and upload it.
* **Use your own spreadsheet**: upload an Excel file you already have and match each of its columns to a task field.
* **Enter the tasks by hand**: skip the file and type the tasks into a table.

<Note>
  Required permission:

  * View task
  * Create task
</Note>

## Open Bulk

1. Open **Activities › Task**.
2. Click the arrow beside **New** and choose **Bulk**.

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-more-create.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=80bb647f6723353ab1052726331f981f" alt="Bulk" width="600" data-path="images/v4/activities/task-more-create.png" />
</div>

3. In **Create Bulk Task**, pick the task type under **Select Task Type**. It decides which fields the tasks have.

## Step 1: Upload your file

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-bulk-create.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=254b98bea8f9f2214b46b7fdb603407e" alt="Create Bulk Task" width="600" data-path="images/v4/activities/task-bulk-create.png" />
</div>

1. **Select Task Type**: the task type every task in the file belongs to.
2. **Upload area**: drag and drop a file here, or click to choose one. `.xlsx` and `.xls` files are supported, with up to 1,000 rows.
3. **Start with our template**: **Download template** gives you a spreadsheet that already has the columns of this task type. Fill it in and upload it.
4. **Bulk tasks manually**: **Bulk Manual** skips the file and opens an empty table to type the tasks into (step 3). **Load sample data** fills the table with example rows so you can see how it works.
5. **View import field requirements**: **View requirements** lists which fields are required, the format each one accepts, and the extra sheets that bills, lists and subpages need.

The upload is refused with a message if the file is not `.xlsx` or `.xls`, has more than 1,000 rows, or has no column headings.

### Import field requirements

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-bulk-requirements.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=9c3c55951e9c9856c1cf40d3eccced5e" alt="Import Field Requirements" width="600" data-path="images/v4/activities/task-bulk-requirements.png" />
</div>

1. **Required Fields**: must be filled in for every row. When the task type has a bill, list or subpage, this includes **Id**, which links each row to its rows in the other sheets.
2. **Optional Fields**: can be left empty.
3. **Complex Components**: bills, lists and subpages, each with the sheet name and the columns its sheet needs.
4. **System Fields**: **Start Time** and **End Time** default to the task type's configuration when left empty, and **Assignee** can be left empty to assign later.
5. **Download**: a ready-to-use template.

Each field shows its **Type** and **Notes**, such as the accepted options of a select, the minimum and maximum of a number, or the format of a date:

| Type | Format |
| - | - |
| Date | `YYYY-MM-DD` |
| DateTime | `YYYY-MM-DD HH:mm` |
| Time | `HH:mm`, 24-hour |
| Phone | With the country code, for example `+6281234567890` |
| Coordinates | `latitude,longitude`, for example `-6.2088,106.8456` |
| Address | Coordinates are found from the address (auto-geocode) |
| Currency, Number | Plain numbers, a period for decimals, no currency symbol |
| URL, Image URL, Video URL | Full addresses starting with `http://` or `https://`; separate several images with commas |
| Select, Multi-select | One of the task type's options |

## Step 2: Map your columns

If you uploaded your own spreadsheet, match each task field to one of its columns. Columns with the same name as a field are matched for you.

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-bulk-mapping.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=18400d52e9c918653162fcc91f65068a" alt="Map your columns" width="600" data-path="images/v4/activities/task-bulk-mapping.png" />
</div>

1. **Header Column**: pick which column of your file holds this field.
2. **Preview**: the first 3 rows of that column, so you can check the data looks right.
3. **Mapped**: the result for the field. A check means every value is valid. **Not mapped** means no column is picked. A badge such as *2 issues found (invalid format)* shows how many rows have a problem.
4. **Field**: the task type's field, with its type.
5. **Next**: go to the review.

Issue types are **required empty**, **not in options**, **invalid format**, **out of range** and **exceeds length**. Click a badge to open **Validation Issues**: the field's requirements, the rows and values that fail, and how to fix them. You can map another column, leave the field unmapped, fix the file and upload it again, or carry on and fix the values in the next step.

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-bulk-issues.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=262b17e3f4c8b2f9f577127fe13663ba" alt="Validation Issues" width="600" data-path="images/v4/activities/task-bulk-issues.png" />
</div>

### Bills, lists and subpages

A bill, list or subpage holds several rows per task, so it lives in its own sheet of the file:

1. Each such component is matched to a sheet with the same name. If none matches, the first sheet is used; pick another under **Select sheet...**.
2. Map the component's own columns to the columns of that sheet.
3. The **Id** column links each row of the extra sheet to its task in the **Main Sheet**. Give every task a temporary id, such as `TASK1`, and repeat it on its rows in the other sheets.

#### A list inside a subpage

When a subpage contains a list, the list rows go in their own sheet, named after the list's title. Sheet names are cut to Excel's 31-character limit and the characters `/ \ * ? [ ]` are removed. An `entry` column links each row to a subpage entry: `entry=1` is the task's first row in the subpage sheet, `entry=2` the second, and so on.

| List type | Required columns | Optional columns |
| - | - | - |
| Text | `id`, `entry`, `name` | |
| Checkbox | `id`, `entry`, `name` | `isChecked` (`true`/`false`, `yes`/`no`, `1`/`0`) |
| Quantity | `id`, `entry`, `name` | `qty`, `qtyProcessed` (numbers) |

Example: a task type with an *Inspection* subpage that contains a quantity list titled *Parts*.

`Main` sheet:

| id | startTime | endTime |
| - | - | - |
| TASK1 | 2026-05-13 09:00 | 2026-05-14 09:00 |

`Inspection` sheet (two rows, so two subpage entries for TASK1):

| id |
| - |
| TASK1 |
| TASK1 |

`Parts` sheet:

| id | entry | name | qty | qtyProcessed |
| - | - | - | - | - |
| TASK1 | 1 | Brake pad | 4 | 0 |
| TASK1 | 1 | Filter | 2 | 0 |
| TASK1 | 2 | Light bulb | 6 | 0 |

This creates 1 task with 2 subpage entries: entry 1 has 2 list items and entry 2 has 1.

#### A bill inside a subpage

A bill inside a subpage also gets its own sheet, named after the bill's title, with the same `id` and `entry` columns. The `reason` column tells items from costs: `-` for an item, `Cost` or `Discount` for a cost.

| Column | Meaning | Items | Costs |
| - | - | - | - |
| `id` | Task id | required | required |
| `entry` | Subpage entry, counted from 1 | required | required |
| `name` | Item or cost name | required | required |
| `qty` | Quantity | number | `-` |
| `qtyProcessed` | Processed quantity | number | `-` |
| `unitPrice` | Price per item | number | `-` |
| `subTotal` | Line total, or the cost amount | number | number |
| `reason` | Row type | `-` | `Cost` or `Discount` |

Example `Charges` sheet for a *Delivery* subpage:

| id | entry | name | qty | qtyProcessed | unitPrice | subTotal | reason |
| - | - | - | - | - | - | - | - |
| TASK1 | 1 | Item A | 2 | 0 | 10000 | 20000 | - |
| TASK1 | 1 | Item B | 1 | 0 | 25000 | 25000 | - |
| TASK1 | 1 | Shipping | - | - | - | 5000 | Cost |
| TASK1 | 1 | Discount | - | - | - | -2000 | Discount |

This creates 1 task with 1 subpage entry that has 2 items and 2 costs. The total is worked out from the items and costs.

<Note>
  List and bill rows whose `entry` is out of range or not a number, or whose `id` matches no task, are left out. The other rows are still imported.
</Note>

## Step 3: Review, edit and submit

The tasks appear in a table, one row per task, with the values from your file.

<div align="center">
  <img src="https://mintcdn.com/mileappv4/is2Iz6JyejGk_jkF/images/v4/activities/task-bulk-review.png?fit=max&auto=format&n=is2Iz6JyejGk_jkF&q=85&s=4a5703832b1e0d7a30958c133ef88c64" alt="Review the tasks" width="600" data-path="images/v4/activities/task-bulk-review.png" />
</div>

1. **Total Task**: how many tasks will be created.
2. **Rows**: click any cell to change its value. A bill, list, subpage or signature cell opens its own editor.
3. **Delete row**: remove a task you do not need.
4. **Add Task**: add another row. **Delete All Tasks** empties the table.
5. **Submit**: create all the tasks.

Rows with wrong values are highlighted, and a banner says how many tasks are invalid. Use **Previous invalid task** and **Next invalid task** to jump between them, and fix them before you submit. The table shows 10 tasks per page.

If you close the dialog or switch task type with unsaved rows, **Discard changes?** asks first. If your plan's monthly task limit is reached, the tasks beyond the limit are not created and a message says how many failed.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.