Live training: next batches coming soon. Join the waitlist:Waitlists open:Developer Training →Developer →Copilot Studio Training →Copilot Studio →

Power Automate: Add a New Row to Dataverse (Lookups, Choices and the New Row ID)

Our help desk lead wanted every phoned-in problem saved as a Dataverse service request the moment someone logs it, with the customer and the assigned tech already linked. The Add a new row action in Power Automate does exactly that, and it hands back the new row’s ID.

In this tutorial, we’ll build a power automate add a new row dataverse flow that creates request REQ-1007, Printer Jam, with a Customer and an Employee lookup, a choice, and a due date.

Then we’ll pass the new row’s ID to Update a row and fix the three errors I hit while testing.

Here’s what we’re building. This is the finished run: the inputs we sent and Dataverse’s 201 Created response.

Add a new row run showing Printer Jam REQ-1007 inputs and statusCode 201 in the outputs

Before You Start

Dataverse actions are Premium, so you need a Power Automate license that covers premium connectors. You also need create rights on the table. If tables and environments are new to you, read what Microsoft Dataverse is first.

I built this in my Power Platform developer environment with a table called Service Requests. These are the columns we’ll fill:

ColumnLogical nameTypeNotes
Subjectcr85a_subjectText (primary)Required in the action
Request Numbercr85a_requestnumberTextREQ-1007
Statuscr85a_statusChoiceOpen 770700000, In Progress 770700001, Closed 770700002
Prioritycr85a_priorityChoiceLow 770700000, Medium 770700001, High 770700002
Due Datecr85a_duedateDate and timeSent as 2026-11-13T17:00:00Z
Customercr85a_customerLookup to CustomersBusiness-required
Employeecr85a_employeeLookup to EmployeesAssigned tech
Request Categorycr85a_requestcategoryFormulaRead-only

The cr85a_ part is my publisher prefix, so your names will start with your own. Before the run, the table held six requests, such as Network Issue (REQ-1006) and Monitor Flicker (REQ-1009).

Step 1: Create the Flow and Add the Action

We’ll start with a manual trigger so you can test on demand.

  1. Go to make.powerautomate.com and pick the environment that holds your table (top right).
  2. Select Create > Instant cloud flow, choose Manually trigger a flow, then Create.
  3. Select + > Add an action, search Dataverse, and select See more.
  4. Pick Add a new row from the Microsoft Dataverse list.
Add an action pane listing Microsoft Dataverse actions with Add a new row highlighted

You’ll also see Add a new row to selected environment. It adds a required Environment box for tables in another environment.

Checkpoint: an Add a new row card sits under the trigger, asking for a Table name.

Step 2: Pick the Table and Fill the Basic Fields

Here’s what each box on the Parameters tab does.

  1. Set Table name to Service Requests.
  2. Type Printer Jam in Subject.
  3. Under Advanced parameters, select Show all and fill Request Number, Description and Due Date.
FieldRequired?What it does
Table nameYesThe table that gets the new row. Its columns appear after you pick it.
Primary column (Subject here)YesThe row’s name column. My panel marked only this one as required.
Other columnsNoHidden under Advanced parameters (mine said Showing 7 of 23).
Return Full MetadataNoReturns all columns instead of only the essential ones.
Add a new row parameters with Table name Service Requests, Subject Printer Jam and the Customer lookup value

Checkpoint: Subject reads Printer Jam and the advanced section shows your optional columns.

Step 3: Set the Customer and Employee Lookups

A lookup doesn’t take a name like Bob. It takes the related table’s entity set name plus the related row’s GUID: <entity set name>(<guid>).

  1. In Customer (Customers), enter cr85a_customer1s( + Bob’s GUID + ).
  2. In Employee (Employees), enter cr85a_employees( + Alice’s GUID + ).
Employee lookup set to cr85a_employees with a GUID and the Status dropdown set to Open

To find the entity set name, go to make.powerapps.com > Tables, set the filter to All, open the related table, and select Tools > Copy set name. It’s usually the plural name, but my Customers table’s set is cr85a_customer1s, so always copy it.

For the GUID, use dynamic content from an earlier step, such as a List rows filtered on the customer’s name, or get a row by ID from Dataverse. In Code view, the lookup is saved as the navigation property plus @odata.bind, like item/cr85a_Customer@odata.bind.

Checkpoint: both lookup boxes hold text in the form setname(guid), not a display name.

Step 4: Set the Choice and Date Columns

The designer shows Status and Priority as dropdowns with labels, but the flow stores numbers like 770700000.

  1. Pick Open in Status and Medium in Priority.
  2. When the value comes from an expression or another system, send the number instead of the label.
  3. In Due Date, enter an ISO 8601 UTC string: 2026-11-13T17:00:00Z.

That due date is 12:00 PM Eastern on 11/13/2026, because the trailing Z means UTC. If you need labels later, here’s how to get the choice column value from a row.

The finished action’s Code view parameters:

{
  "entityName": "cr85a_servicerequests",
  "item/cr85a_subject": "Printer Jam",
  "item/cr85a_requestnumber": "REQ-1007",
  "item/cr85a_status": 770700000,
  "item/cr85a_priority": 770700001,
  "item/cr85a_description": "The third-floor printer jams on every color job.",
  "item/cr85a_duedate": "2026-11-13T17:00:00Z",
  "item/cr85a_Customer@odata.bind": "cr85a_customer1s(87309834-e89b-48b4-8ccd-f4d8d5d5b19d)",
  "item/cr85a_Employee@odata.bind": "cr85a_employees(a8b5c906-06e6-48ac-bfb2-6ff82573a0d6)"
}

Checkpoint: Code view shows numbers for Status and Priority and both @odata.bind lookups.

Step 5: Use the New Row’s ID in the Next Step

Add a new row returns the new row with its unique identifier. We’ll use it to move the request to In Progress.

  1. Add an Update a row action and pick Service Requests.
  2. Click Row ID and choose the Service Request token from Add a new row’s dynamic content.
  3. Set Status to In Progress (770700001) and update the Description.
Update a row Row ID filled with the Service Request token from Add a new row

The token is the table’s unique identifier column. In Code view it’s this expression:

@outputs('Add_a_new_row')?['body/cr85a_servicerequestid']

I cover the rest of that action, including Upsert a row, in the guide to update a row in Dataverse.

Checkpoint: Row ID shows the purple Service Request token, not a typed value.

Test the Flow

  1. Select Save, then Test > Manually > Run flow.
  2. Open the run and select Add a new row, then Show raw outputs.

My run on 10/20/2026 succeeded in 2 seconds. Add a new row returned statusCode 201 (Created), and body/cr85a_servicerequestid held the new GUID, 08b860c2-75cc-f111-a05b-6045bd0406d6.

Update a row then used that ID, and its output showed Status In Progress. The table went from six requests to seven, which you can confirm when you count rows in a Dataverse table.

Make It Production-Ready

  • Swap the manual trigger for the real source, like a new SharePoint item.
  • Look up lookup GUIDs at run time with List rows instead of hard-coding them.
  • Add a Scope with a Configure run after branch for failures so a bad row alerts someone.
  • Build the flow inside a solution so you can move it between environments.
  • Need to report who created each row? See how to get Dataverse Created By in Power Automate.

Troubleshooting

Invalid choice value. I sent Status 999 in a test flow, and Add a new row failed with statusCode 400:

A validation error occurred. The value 999 of 'cr85a_status' on record of type 'cr85a_servicerequest' is outside the valid range. Accepted Values: 770700000,770700001,770700002
Add row bad choice test with cr85a_status 999 and statusCode 400

Fix: copy the number from the column’s choice list. The error lists the accepted values, which helps.

Formula column can’t be set. My first version set Request Category, a formula column. Saving failed with “The API operation does not contain a definition for parameter ‘item/cr85a_requestcategory’.” Fix: remove it and set the source columns instead.

Required columns. When I let Upsert a row create a record without a Customer, it failed with “Enter Customer details.” That came from the table’s business logic, not the panel. Fix: always send every business-required column on a create.

Where to Take It Next

For more flow builds, browse our Power Automate tutorials hub.

Working with more Dataverse data? These guides pick up from here:

Frequently Asked Questions

How do I add a new row to Dataverse in Power Automate?

Add the Microsoft Dataverse Add a new row action, pick the Table name and fill the columns (optional ones are under Advanced parameters). A successful create returns statusCode 201.

What’s the format for a lookup column in Add a new row?

Use the related table’s entity set name and the row GUID, like cr85a_customer1s(guid). Copy the set name in Power Apps from the table’s Tools menu with Copy set name. See Use a flow to add a row in Dataverse.

How do I get the ID of the row I just created?

Add a new row returns the full row. Pick the table’s unique identifier token (Service Request in my flow) from dynamic content, or use outputs(‘Add_a_new_row’)?[‘body/cr85a_servicerequestid’] in an expression.

What’s the difference between Add a new row and Add a new row to selected environment?

Both create a row; the second adds a required Environment box for other environments. The Microsoft Dataverse connector reference lists both.

Why doesn’t my formula column appear in Add a new row?

Formula columns are read-only, so the action doesn’t offer them. Set the columns the formula uses instead.