Insert Rows (Advanced)
The Insert Rows (Advanced) action adds one or more new rows to a sheet with advanced row location support (indentation, to top or bottom, etc).
When to use this
Any time a flow needs to create new rows.
Need this action in your flow?
Get this action plus 6 others and ready-to-use sample flows with the toolkit.
How this compares to the native Smartsheet Insert Row action
| Native Insert a Row | Insert Rows (Advanced) | |
|---|---|---|
| Browse and pick a sheet by name* | Yes | No |
| Rows created per execution | 1 | Up to 500 |
| Structured column-by-column input | Yes, but not for dynamically assigned sheet IDs | Yes |
| Works with a dynamically-set sheet ID without extra flow logic | No | Yes |
| Control where the new row is placed | No | Yes |
| Total parameters | 2 | 10 |
*Both actions accept a sheet ID typed in directly or set dynamically from earlier in the flow, while the native action also offers browsing sheets by name. In practice, you usually already have the ID available from a trigger or a previous step, so this rarely is useful in practice.
Parameters
| Parameter | Required | Description |
|---|---|---|
sheetId | Required | The ID of the sheet to add rows to. |
allowPartialSuccess | Optional | Lets some rows succeed even if others in the same execution fail. |
overrideValidation | Optional | Allows values outside a column’s validation limits. Requires strict set to false on the relevant cell. |
accessApiLevel | Optional | Set to 1 to allow COMMENTER access. Defaults to VIEWER access. |
Using sheetId
This can be a fixed, hardcoded value taken from the properties of a sheet in Smartsheet, but it is very common to get the sheetId dynamically from a trigger or another action.
Using allowPartialSuccess
Set to true to prevent the entire batch of rows being created from failing if there are 1 or more rows that are rejected.
Using overrideValidation
Relevant if a column has dropdown or validation rules and you deliberately want to write a value outside them.
Using accessApiLevel
Not commonly used if you’re running the flow on sheets you own or administer. Smartsheet added Commenter as a distinct access level after the API already existed, so by default it’s quietly treated as Viewer for backward compatibility. Setting this to 1 tells the API to recognize Commenter properly, which is relevant if your API token’s access to this sheet is specifically at the Commenter level.
Adding rows
The Body field accepts rows two different ways, and you can switch between them using the icon in the top-right corner of the field.

The icon in the top-right corner of the Body field switches between the two modes.
Adding rows with detail inputs

The default view. Click Add new item to add each row as its own set of fields, filled in through the picker UI. Straightforward for a known, fixed number of rows — but every row has to be added by hand, so it doesn’t work when the row count varies at runtime.
Adding rows as a raw array

Clicking the icon in the top-right of the Body field in the default view details array view, results in the view shown above. The item picker is replaced with a single field that accepts a JSON array, which means the array can come from an expression or the output of any earlier step. Using this option, the number of rows doesn’t have to be known when you build the flow. This is how you insert a dynamic number of rows, anywhere from 1 up to the 500-row limit, without adding items by hand.
This input accepts a standard Smartsheet row object or array of row objects. Here is an example showing 2 rows being created, each with a value in 1 cell:
[
{
"locationType": "Top",
"cells": [
{ "columnId": 1234567890123456, "value": "New task" }
]
},
{
"locationType": "Top",
"cells": [
{ "columnId": 1234567890123456, "value": "Another new task" }
]
}
]
Row fields
Each row you add is its own item with these fields. You can add multiple rows in one execution of the action, up to 500 rows, which is a hard limit set by the Smartsheet API itself, not something this connector can increase.
| Field | Required | Description |
|---|---|---|
cells | Optional | The values to set on the new row. See below. |
locationType | Optional | Where to place the new row. See below. |
locationReferenceRowId | Situational | Required for some locationType options. See below. |
expanded | Optional | Whether the new row starts expanded or collapsed. |
format | Optional | Baseline formatting for the row’s blank cells only. |
locked | Optional | Whether the new row is locked. |
Using cells
Each cell needs a columnId and a value. A few things worth knowing:
displayValueonly matters for contact-list columns, where it sets the displayed name. Put the contact’s email invalueand their name indisplayValue.formulalets you set the cell to a formula (like=SUM(CHILDREN())) instead of a static value. Cannot be combined withvalue,displayValue, orlinkTypeon the same cell.strictset to false bypasses Smartsheet’s normal value type checking. This is also the fix for date columns since Smartsheet’s DATE columns only acceptYYYY-MM-DDby default and reject regional formats like07/30/2026. If you setstrictto false on that cell, then you can enter a date value like “07/30/2026”.linkTypeturns the cell into a hyperlink, or removes an existing one. Choose URL, Sheet, Report, or Dashboard to set a new link (provide the target inlinkValue, and setvalueto the link’s label text), or choose Clear to remove a hyperlink that’s already on the cell. Leave blank to leave any existing hyperlink untouched.linkValueis the link’s target: the full URL for a URL link, or the sheet/report/dashboard ID for the others. Required alongsidelinkTypeunlesslinkTypeis Clear.- For checkbox columns, set
valuetotruefor checked, orfalse(or leave it blank) for unchecked.
Using locationType
Smartsheet’s raw API uses seven separate placement fields that can only be combined in specific ways. This connector replaces all of them with one dropdown:
| locationType | Needs locationReferenceRowId? | Places the row |
|---|---|---|
Top | No | At the very top of the sheet. |
Bottom | No | At the very bottom of the sheet (the default if you leave locationType blank). |
Child (first) | Yes | As the first child of the row in locationReferenceRowId. |
Child (last) | Yes | As the last child of the row in locationReferenceRowId. |
Sibling (below) | Yes | Directly below the row in locationReferenceRowId, at the same level. |
Sibling (above) | Yes | Directly above the row in locationReferenceRowId, at the same level. |
Indent under row above | No | Makes the new row a child of whichever row is directly above it. |
Outdent one level | No | Moves the new row’s placement out one level from its default. |
Leave locationType blank entirely for the default behavior (bottom of the sheet), which is what is done in most situations.
NOTE: Every row in the same call must use the same locationType. You can’t send one row with Sibling (below) and another with Child (last) in the same call. Smartsheet will reject the entire request if the types don’t match.
Using locationReferenceRowId
Pairs with: required when locationType is set to Child (first), Child (last), Sibling (below), or Sibling (above) — see the table above.
The ID of the row that the new row is positioned relative to. For instance, the parent for Child (first) and Child (last), or the sibling for Sibling (above) and Sibling (below). Leave blank for Top, Bottom, Indent under row above, and Outdent one level, which don’t need a reference row.
NOTE: Every row in the same call must use the same locationReferenceRowId. To insert rows under or beside different reference rows, use a separate call for each one.
Using expanded
This controls whether the row displays expanded or collapsed if it has child rows.
Using format
Uncommon. One thing worth knowing: it only sets the baseline format for the row’s blank cells. It does not restyle cells that already have a value. To format existing data, format has to be set per-cell, not on the row.
Using locked
Sets whether the new row is locked from editing as soon as it’s created.
Example
A flow that reads data from an Excel file and inserts rows into a sheet in Smartsheet. Or, if you are adding items to a specific invoice number, you can use locationType and locationReferenceRowId to insert the new rows under the parent invoice number.
What you get back
The newly created row objects, including each new row’s id, which you may need in later actions in the same flow needs to reference the row you just created (attaching a file to it, for example).
Gotchas
Every row in a single call must share the same locationType and the same locationReferenceRowId. You can’t send some rows to one sibling/parent and other rows to a different one in the same call. Attempting to mix either the type or the reference row fails the entire call: If rows need to land at different reference points, split them across separate Insert Rows (Advanced) calls — one call per distinct location.
There’s no locationType option for “add as a sibling, then indent it a level.” That combination requires two separate calls. Add the row first with whichever locationType you need, then a follow-up Update Rows call to indent it.
A cell’s formula and its value/displayValue/linkType fields are mutually exclusive. If formula is set on a cell, none of those other fields can also be set on that same cell. Smartsheet’s API rejects the entire call if they are. If a cell should be formula-driven, leave its value and link fields empty.
Date and Contact List columns are common sources of erros. See the strict and displayValue notes above to help you work through issues you may encounter.
Need this action in your flow?
Get this action plus 6 others and ready-to-use sample flows with the toolkit.
