You are trying to add a new row in Dataverse using Power Automate, everything looks fine, but the flow fails on a lookup column. The error mentions something about navigation properties or malformed URIs.
Linking records using Lookup columns in Dataverse via Power Automate isn't as simple as just passing the GUID (the unique ID) of the related record. Dataverse expects a specific oData URI format. If you just drop the dynamic content ID into the field, your flow will fail.
In this guide, we'll break down how to properly use oData syntax to link rows in Dataverse.
The Problem: Passing a Raw GUID Fails
When using the "Add a new row" action with Dataverse, you'll notice that Lookup columns often require input. Let's say you are creating a new Contact and you want to link it to an Account.
If you simply select the Account dynamic content (which represents the GUID string) and put it into the 'Company Name (Accounts)' field, Power Automate will throw an error like:
URL was not parsed due to an ODataUnrecognizedPathException.
This happens because Dataverse APIs require a reference to the actual entity set, not just the ID.
The Solution: The oData Navigation Property Syntax
To correctly populate a lookup field, you must provide the plural name of the related table, followed by the GUID in parentheses.
The Syntax:
entitysetname(GUID)
Example:
accounts(outputs('Get_a_row')?['body/accountid'])
If you are using dynamic content from a previous step, it will look like this in the field:
accounts([Dynamic Content ID])
Notice that we use accounts (plural, lowercase) and not account.
Step-by-Step Implementation
-
Find the Plural Name: First, you need to know the logical plural name of the target table. You can find this in the Power Apps maker portal by going to Tables > [Your Table] > Properties > Advanced Options, and looking at the Plural name or Entity set name.
- Note: Custom tables will have your publisher prefix, e.g.,
cr123_projects.
- Note: Custom tables will have your publisher prefix, e.g.,
-
Add the New Row Action: In your flow, add the "Add a new row" action and select your target table.
-
Format the Lookup Field: Locate your lookup column in the action. Type the plural entity set name, open a parenthesis, insert your dynamic content ID, and close the parenthesis.
Example for linking a custom 'Project' table:
cr123_projects([Project ID])
Handling the _value Field from "Get a row"
If you used a "Get a row by ID" or "List rows" action previously, you might be trying to extract a lookup value from that result to pass into your new row.
Dataverse returns lookups in the JSON body with a _value suffix. For example, if the field is cr123_accountid, the value will be mapped as _cr123_accountid_value.
However, the dynamic content menu in Power Automate usually simplifies this as "Account (Value)". You can safely insert that dynamic content inside the parenthesis:
accounts([Account (Value)])
Common Mistakes to Avoid
- Using Singular Instead of Plural: Always use
accounts,contacts,systemusers, neveraccount,contact,systemuser. - Forgetting the Parentheses:
accounts [ID]will fail. It must beaccounts([ID]). - Missing Publisher Prefixes: For custom tables, remember the prefix (e.g.,
cr123_mytables([ID])).
Summary
Dataverse expects strict oData URIs for lookups. Simply remember the formula pluralsetname(GUID) and your "Add a new row" actions will run perfectly every time!



