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 RowInsert Rows (Advanced)
Browse and pick a sheet by name*YesNo
Rows created per execution1Up to 500
Structured column-by-column inputYes, but not for dynamically assigned sheet IDsYes
Works with a dynamically-set sheet ID without extra flow logicNoYes
Control where the new row is placedNoYes
Total parameters210

*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

ParameterRequiredDescription
sheetIdRequiredThe ID of the sheet to add rows to.
allowPartialSuccessOptionalLets some rows succeed even if others in the same execution fail.
overrideValidationOptionalAllows values outside a column’s validation limits. Requires strict set to false on the relevant cell.
accessApiLevelOptionalSet 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.

Body field in detail-inputs mode with the toggle icon in the top-right corner highlighted

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.

FieldRequiredDescription
cellsOptionalThe values to set on the new row. See below.
locationTypeOptionalWhere to place the new row. See below.
locationReferenceRowIdSituationalRequired for some locationType options. See below.
expandedOptionalWhether the new row starts expanded or collapsed.
formatOptionalBaseline formatting for the row’s blank cells only.
lockedOptionalWhether the new row is locked.

Using cells

Each cell needs a columnId and a value. A few things worth knowing:

  • displayValue only matters for contact-list columns, where it sets the displayed name. Put the contact’s email in value and their name in displayValue.
  • formula lets you set the cell to a formula (like =SUM(CHILDREN())) instead of a static value. Cannot be combined with value, displayValue, or linkType on the same cell.
  • strict set to false bypasses Smartsheet’s normal value type checking. This is also the fix for date columns since Smartsheet’s DATE columns only accept YYYY-MM-DD by default and reject regional formats like 07/30/2026. If you set strict to false on that cell, then you can enter a date value like “07/30/2026”.
  • linkType turns the cell into a hyperlink, or removes an existing one. Choose URL, Sheet, Report, or Dashboard to set a new link (provide the target in linkValue, and set value to 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.
  • linkValue is the link’s target: the full URL for a URL link, or the sheet/report/dashboard ID for the others. Required alongside linkType unless linkType is Clear.
  • For checkbox columns, set value to true for checked, or false (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:

locationTypeNeeds locationReferenceRowId?Places the row
TopNoAt the very top of the sheet.
BottomNoAt the very bottom of the sheet (the default if you leave locationType blank).
Child (first)YesAs the first child of the row in locationReferenceRowId.
Child (last)YesAs the last child of the row in locationReferenceRowId.
Sibling (below)YesDirectly below the row in locationReferenceRowId, at the same level.
Sibling (above)YesDirectly above the row in locationReferenceRowId, at the same level.
Indent under row aboveNoMakes the new row a child of whichever row is directly above it.
Outdent one levelNoMoves 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.