You can’t use Navigate in App.OnStart to pick the first screen anymore, because Microsoft retired it. Put a formula that returns a screen in the App object’s StartScreen property instead, and Power Apps opens that screen when the app loads.
In this tutorial, we’ll replace the old PowerApps OnStart navigate to screen pattern with App.StartScreen, open different screens from a URL parameter, test it in Studio and in the published app, and fix the problems I hit along the way.
Here’s the StartScreen formula from my demo app:
If(
Param("screen") = "param",
scrParam,
Param("screen") = "combo",
scrComboDefault,
Param("screen") = "launch",
scrLaunch
)
Open the app’s link with &screen=param and it starts on scrParam. With no parameter, the If has no match, returns blank, and the app opens the first screen in Tree view.
Build the Demo App Step by Step
If you’ve never made a canvas app, here’s the quick version of how I built mine. Our guide to create a canvas app from a SharePoint list covers the same setup in more detail.
1. Prepare the data. A data source is where the app reads records. Mine is a SharePoint list named Service Requests on the SPGuides site, with 623 items (my screen titles still say 620 from the day I built them):

2. Start a new app. Go to make.powerapps.com and, on Home, select Start with design:

3. Create a blank canvas app. Select Create from blank, then pick the Tablet layout:

4. Add the SharePoint connector. Select Add data, search for SharePoint and pick the connector. Paste the site URL and select Connect:

5. Choose the list. Check Service Requests and select Connect:

Then add screens with New screen > Blank. To rename one, select it in Tree view and select the pencil next to its name in the Properties pane. My first screen is scrDelegation; scrParam, scrComboDefault and scrLaunch come later.
A few moves you’ll need: the property dropdown sits left of the fx formula bar, Play (top right) runs the app, and Ctrl+S saves it.
Why Doesn’t Navigate Work in App.OnStart Anymore?
For years, the standard trick was a Navigate call at the end of App.OnStart. A deep link (a URL that opens the app on a specific screen) looked like this:
// Old pattern - retired, don't build new apps this way
If(Param("screen") = "param", Navigate(scrParam))
The problem is speed. Navigate forces Power Apps to finish all of OnStart before it can show any screen. If you only need the Navigate function to move between screens after the app is open, it still works everywhere else.
Microsoft has retired Navigate in OnStart. Existing apps still run, and for a limited time you can turn it back on in the app settings under Retired. I wouldn’t rely on that switch; moving to StartScreen takes a few minutes.
Here’s how the two approaches compare:
| Navigate in App.OnStart | App.StartScreen | |
|---|---|---|
| Status | Retired (settings switch, limited time) | Recommended |
| Kind of formula | Behavior (runs actions) | Data flow (returns a screen) |
| Load time | Waits for all of OnStart | Doesn’t wait for OnStart |
| Can read OnStart variables | Yes | No |
How Do You Set the StartScreen Property in Power Apps?
Same Service Desk Demo app, no OnStart navigation at all. Follow these steps:
- In Tree view, select App at the top.
- In the property dropdown left of the formula bar, pick StartScreen.
- Type a formula that returns a screen, such as
scrParam, or theIfformula below. - Press Ctrl+S to save.
Here’s my app with App selected, StartScreen in the dropdown and the formula in the expanded bar:

Each condition checks one value of the screen parameter and returns the matching screen. There’s no final else, so anything else returns blank:
If(
Param("screen") = "param",
scrParam,
Param("screen") = "combo",
scrComboDefault,
Param("screen") = "launch",
scrLaunch
)
Because StartScreen is a data flow property, behavior functions like Set, Navigate or Notify aren’t allowed in it. It just returns a screen, once, when the app loads.
Pro Tip: want one fixed first screen? Type just its name, such as scrParam, or simply drag that screen to the top of Tree view.
Test StartScreen in Power Apps Studio
You don’t have to publish to try a change. Hover over App in Tree view, select the … (ellipsis), then Navigate to StartScreen:

Power Apps re-evaluates StartScreen as if the app just loaded. In my test, the canvas stayed on scrOnVisible, the screen I had selected, because Studio has no URL, so Param("screen") is blank and my If returned nothing.
That’s expected, not a bug. To test a Param-based StartScreen in Studio, temporarily swap Param("screen") for a text value like "param", run Navigate to StartScreen, then put it back.
The same menu has Run OnStart. My OnStart only sets two variables now:
Set(gblStartRuns, gblStartRuns + 1);
Set(gblAppName, "Service Desk Demo")
Open a Specific Screen From the App URL
Parameters only reach the app in the player, so publish first: Publish > Publish this version. Then copy the app’s web link from make.powerapps.com > Apps > … > Details.
With no extra parameter, the app opened on scrDelegation, the first screen in my Tree view:

Next, I added the parameters after the tenantId value at the end of the web link:
https://apps.powerapps.com/play/e/<environment-id>/a/<app-id>?tenantId=<tenant-id>&screen=param&id=2&dept=IT%20Help%20Desk
This time StartScreen matched "param" and the app opened straight on scrParam. That screen read Param("id") and showed request 2, Password reset #1005 | Closed | High:

The same link with &screen=combo opened scrComboDefault, and &screen=launch opened scrLaunch. Parameter names are case-sensitive, so &Screen=param wouldn’t match.
Note: after each re-publish, the player asked “Allow Service Desk Demo to access your data?” for the SharePoint connection. Each user has to select Allow before the first screen loads.
Why Can’t StartScreen See My OnStart Variables?
This trips up almost everyone who migrates. Global variables and collections, including those set in App.OnStart, aren’t available in StartScreen. A formula like If(gblIsAdmin, scrAdmin, scrHome) won’t work there.
The reason is timing. OnStart is non-blocking by default, so it runs alongside the first screen, and its variables might not be set yet. You can read more about scope in our post on Power Apps global vs context variables.
You have three better options:
- Param() for values in the app URL, like the deep link above.
- User() or LookUp() to read the signed-in user or a list record directly.
- Named formulas in App.Formulas, which StartScreen can read.
A named formula is a Name = expression; line in the App object’s Formulas property. This is a pattern I didn’t add to the demo app; ScreenParam is just my example name:
// App.Formulas
ScreenParam = Param("screen");
// App.StartScreen
If(ScreenParam = "param", scrParam, scrDelegation)
Pick the First Screen by User or List Data
StartScreen can call data sources too. A common case is sending managers to an approvals screen. Our walkthrough on how to show a different home screen per user goes deeper; here’s the StartScreen version of that idea.
This sketch assumes an Approvers list with an Email column. User().Email is the signed-in person, as covered in getting current user details in Power Apps:
If(
!IsBlank(LookUp(Approvers, Email = User().Email)),
scrApprovals,
scrDelegation
)
Keep these lookups simple and fast, because the first screen waits for them. Use conditions SharePoint can run on the server, or Power Apps delegation limits can return the wrong answer on big lists. Filter vs Search vs LookUp explains which one to pick.
Add a Fallback Screen With IfError
If StartScreen hits an error, Power Apps quietly shows the first screen in Tree view. That’s safe, but you may want a screen that tells the user what went wrong.
Wrap the formula in IfError and return your own fallback. This follows Microsoft’s documented pattern; scrError is a screen you’d add yourself:
IfError(
If(Param("screen") = "param", scrParam, scrDelegation),
scrError
)
To show which screen a user landed on, a label with App.ActiveScreen.Name helps while testing. Our post on how to get the current screen name in Power Apps has more ways.
Common StartScreen Problems and Fixes
These are the issues I ran into, or see most often in apps I review:
- The app always opens the first screen. The parameter name or value doesn’t match (names are case-sensitive), or you’re testing an old version. Publish again and reload the link.
- Navigate to StartScreen does nothing in Studio. Param is blank in Studio. Test with a hard-coded value, then switch back.
- A variable is blank in StartScreen. OnStart variables aren’t available there. Use Param, User, LookUp or a named formula.
- Set, Navigate or Notify is flagged in StartScreen. Behavior functions aren’t allowed there. Move that logic to the target screen’s OnVisible.
- An old app shows a Navigate error in OnStart. Move the screen choice into StartScreen and delete the Navigate call.
Want more patterns like this? Browse our Power Apps tutorials for screens, galleries, forms and formulas.
If you’re tidying up how your app starts, these posts are worth a look too:
Frequently Asked Questions
Can I still use Navigate in Power Apps OnStart?
Only in older apps, and only while Microsoft keeps the switch under Retired in the app settings. New apps should return the first screen from the App.StartScreen property instead.
Why does StartScreen open the first screen instead of mine?
StartScreen returned blank or an error. Check the Param name (it’s case-sensitive), make sure the If formula has a match, and test the published app, because Param is blank in Studio.
Can StartScreen use variables set in OnStart?
No. Global variables and collections, including ones from OnStart, aren’t available in StartScreen. Use Param, User, LookUp or a named formula in App.Formulas.
How do I test StartScreen without publishing?
In Tree view, hover over App, select the ellipsis and choose Navigate to StartScreen. Power Apps re-runs the formula as if the app just loaded.
Where is App.StartScreen documented?
Microsoft documents StartScreen, OnStart and named formulas on the App object reference page.

Hey! I’m Bijay Kumar, founder of SPGuides.com and a Microsoft Business Applications MVP (Power Automate, Power Apps). I launched this site in 2020 because I truly enjoy working with SharePoint, Power Platform, and SharePoint Framework (SPFx), and wanted to share that passion through step-by-step tutorials, guides, and training videos. My mission is to help you learn these technologies so you can utilize SharePoint, enhance productivity, and potentially build business solutions along the way.