Power Apps Deep Linking: Navigate Directly to Records from Email Notifications
Craft a personalized URL that opens a canvas app to a specific record, allowing recipients to view or edit details with one click.
When a colleague receives an automated email from Power Apps, clicking a link that opens the app exactly to the item they need can save minutes of navigation. Deep links make this possible by passing a record identifier as a URL parameter. In this article you’ll build a simple request‑tracking app, trigger an email from Power Automate, and handle the incoming parameter so the app opens on the correct record—no extra clicks required.
We’ll reuse the same app for both creating new items and viewing existing ones. The form mode will switch automatically when a deep link is detected, and a separate screen will list all records.
Scenario: IT Request Management
Imagine your company uses a canvas app called IT Self‑Service Portal where employees submit hardware or software requests. Each request is stored in a SharePoint list named IT Requests. After submission, the employee receives a confirmation email with a deep link back to that specific request. If they ever need to check the status or edit the details, one click opens the app in view mode.
The SharePoint list has these columns (default columns ID, Created, Created By are used as is):
| Column | Type | Notes |
|---|---|---|
| Title | Single line of text | Short summary of the request |
| Department | Choice | Options: Finance, HR, IT, Marketing, Ops |
| IssueDescription | Multiple lines of text | Full description |
| Urgency | Choice | Low, Medium, High, Critical |
You can add any other columns you need, but these are enough for our example.
Setting Up the Canvas App
- Create a new canvas app from blank (phone or tablet, whichever suits your design).
- Connect the app to your IT Requests SharePoint list via the data source panel.
- Insert an Edit form and set its data source to IT Requests. In the form’s Fields pane, add only Title, Department, IssueDescription, and Urgency. The default fields (ID, Created, Created By) will be generated automatically when a new record is saved.
- Change the form’s DefaultMode to
FormMode.Newso it starts ready for a new entry.
Add a label at the top of the screen to serve as a dynamic title bar.
If( EditForm1.Mode = FormMode.New, "New Request", "Request #" & varRequest.ID )
Submitting the Form and Capturing the Record
Place a Button below the form with the text “Submit”. Set its OnSelect to:
SubmitForm(EditForm1)
In the form’s OnSuccess property, store the newly created record in a variable and switch the form to view mode, then show a success notification:
Set(varRequest, EditForm1.LastSubmit);
ViewForm(EditForm1);
Notify("Your request has been saved.", NotificationType.Success);Set the form’s Item property to varRequest so it knows what to display in view mode.
Finally, hide the Submit button when the form is not in new mode by setting its Visible property to:
EditForm1.Mode = FormMode.New
Obtaining the App Web Link
Save and publish your app. Then go to make.powerapps.com, click the three dots (⋯) next to IT Self‑Service Portal, and choose Details. Copy the Web link (it looks something like the example below) and keep it ready for the next step.
https://apps.powerapps.com/play/d77ba81c-d7e4-4131-bb06-12b172225819?tenantId=f1b8b509-50a4-4a5c-8e48-bf3d3e7c10ed
The web link includes your app ID and tenant ID. Do not share this URL publicly—it can be used to open the app.
Creating the Automated Email with Power Automate
We’ll build a flow that triggers each time a new item is added to the IT Requests list and sends an email containing a deep link to that item.
- In Power Automate, create a new automated cloud flow.
- Set the trigger to When an item is created and point it to your SharePoint list.
- Add a Compose (Data Operation) action to build the email body in HTML. In the Inputs field, paste the HTML below, replacing the
<a>href value with your own web link. The dynamic content@{triggerOutputs()?['body/ID']}appends the record’s ID as a query parameter namedrequestid.
<html>
<body>
You submitted an IT request. To review or update it, click the link below.<br><br>
<a href="https://apps.powerapps.com/play/d77ba81c-d7e4-4131-bb06-12b172225819?tenantId=f1b8b509-50a4-4a5c-8e48-bf3d3e7c10ed&requestid=@{triggerOutputs()?['body/ID']}">View Request</a>
</body>
</html>- Add a Send an email (V2) action. Fill in the recipient, subject, and set the Body to the output of the Compose step.
Save and close the flow. It will run automatically after a new item is created.
Handling the Deep Link in the App
When a user opens the app via the deep link, the URL contains the requestid parameter. We need the app to detect that parameter, look up the corresponding record, and switch the form to view mode.
Place the following code in the app’s OnStart property (accessible from the App tree):
Set(
varRequest,
LookUp(
'IT Requests',
ID = Value(Param("requestid"))
)
);
If(
!IsBlank(varRequest),
ViewForm(EditForm1)
)Param("requestid") returns the value from the query string as text; Value() converts it to a number for comparison with the ID column. If a matching record is found, the form switches to view mode and displays that record.
You can test by sending yourself an email with the deep link or by manually adding &requestid=1 to the web link URL in a browser. The app must be published and you must have permissions to the SharePoint list.
Optional: Adding a Gallery Screen
If you want to give users a full list of their requests, add a new screen with a Gallery connected to the IT Requests list. Use a layout that shows Title, Department, and Urgency. In the gallery’s OnSelect, navigate to the form screen and load the selected item:
Set(varRequest, ThisItem); EditForm(EditForm1); Navigate(RequestFormScreen, Fade);
Add an “+” icon to the gallery screen to create a new request, with OnSelect setting the form back to new mode and navigating to the form screen:
NewForm(EditForm1); Navigate(RequestFormScreen, Fade);
On the form screen, you may want a back button to return to the gallery. Its OnSelect could be Back() or Navigate(GalleryScreen).
Security and Delegation Considerations
- Permissions: Only users who have access to the SharePoint list will be able to view the record. The deep link does not grant additional access.
- Data Exposure: The app ID and tenant ID are visible in the deep link. Treat the full URL as sensitive information.
- Delegation: The
LookUpfunction inOnStartdelegates correctly for the ID column, so no delegation warning appears. - Param() function: It returns an empty string if the parameter is not present. Always check for blankness before using the value.
Common Mistakes and Troubleshooting
| Issue | Likely Cause | Fix |
|---|---|---|
| App opens in new mode instead of showing the record | OnStart code not saved/published, or parameter name mismatch | Verify Param("requestid") matches the query string in the email link |
| Email contains a broken link | Web link is incorrect or app is not published | Copy the correct link from app details and publish the app |
| Flow does not trigger | List permissions or trigger configuration | Check the flow run history; ensure the connection is valid |
| Record not found when clicking the link | The ID was passed as text and not converted to number | Use Value(Param("requestid")) in the LookUp |
Final Recommendation
Deep links turn a one‑way notification into an interactive experience. For any app where users need to quickly access a specific record from an email, this pattern is simple to implement and highly effective. Always test with a published app and verify that the parameter name is consistent between the flow and the OnStart code. If your app has multiple screens, consider adding logic in OnStart to navigate to the appropriate screen based on the presence of the parameter.
References
- Original source: Matthew Devaney – Power Apps Deep Links: Email Direct Link To A Specific Record
- Microsoft Learn: Param function in Power Apps
- Microsoft Learn: LookUp function in Power Apps
Learn how small coding practices—like using descriptive names, flattening conditions, and simplifying logic—can make your apps easier to update and less error-prone.
Move past the gallery and discover the hidden patterns for validation, navigation, and smart submission handling in your data entry forms.
PowerShell unlocks admin capabilities that the Power Platform admin center simply doesn’t offer—from recovering deleted apps to blocking trial licenses. Here’s how to wield them safely.