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

Power Apps Launch Function: Open a URL in a New Tab, the Same Tab or Another App

Many guides still build web links in Power Apps by gluing text together, or they point you to Navigate(). It works for a fixed link, but Navigate() only moves between screens, and a hand-built URL breaks the moment the text has a space or an ampersand.

The better way is Launch(). Put Launch("https://www.spguides.com/") in a button’s OnSelect, and the page opens in a new browser tab with every parameter encoded for you.

In this tutorial, we’ll cover every powerapps navigate to url case I tested in a real app: a new tab, the same tab, a URL with parameters, a URL built from a variable, one reusable named tab and opening another canvas app on a specific record.

Every result below comes from my own Service Desk Demo app, run in Studio and in the published player on 10/31/2026.

The Sample App We’ll Use (Build It Step by Step)

All the examples run in one canvas app connected to a SharePoint list called Service Requests. It has 623 help desk tickets with a Title, Status and Priority. If you’ve never connected a list before, our guide to creating a canvas app from a SharePoint list goes deeper.

Service Requests SharePoint list with Title, Status and Priority columns used by the demo app

Step 1: Start a new app. Go to make.powerapps.com and select Start with design on the Home page.

Power Apps maker portal Home page with the Start with design option boxed

Step 2: Create a blank canvas app. Select Create from blank. A canvas app is one where you place every control yourself.

Create from blank option for a new Power Apps canvas app

Step 3: Pick the Tablet layout. Choose Tablet and select Create. Power Apps Studio, the app editor, opens.

Start with a blank canvas dialog with the Tablet layout selected

Step 4: Add the data. Select Add data, search for SharePoint and pick the SharePoint connector. Then paste your site URL and select Connect.

Add data pane in Power Apps Studio with the SharePoint connector selected

Step 5: Choose the list. Check Service Requests and select Connect. The list is now a data source, which is just a place the app reads records from.

Choose a list dialog with the Service Requests list checked

Step 6: Add the demo screen. Select New screen > Blank. To rename it, select the screen and click the pencil next to its name in the Properties pane. I called it scrLaunch.

Step 7: Insert the controls. From the Insert menu, add six buttons, a Text input named txtLaunchSearch, a label and a vertical gallery named galLaunch. Set the gallery’s Items to the first four tickets:

FirstN(Sort('Service Requests', ID, SortOrder.Ascending), 4)

To set any property, select the control, pick the property in the dropdown on the left of the fx formula bar, then type the formula. Run the app with Play at the top right, or hold Alt and click a button. Press Ctrl+S to save.

Navigate() vs Launch(): Which One Opens a URL?

Navigate() switches to another screen inside the same app, and it only accepts a screen. That’s why the Navigate function in Power Apps can’t open a web page, no matter what you pass it.

Launch() opens a web page or another canvas app in the browser. It only works in behavior formulas, such as a button’s OnSelect, not in a label’s Text property.

Method 1: Open a URL in a New Tab (Recommended)

Use this for a help link, a policy page or a SharePoint document. Select the first button, pick OnSelect in the property dropdown and type this. Our post on the Power Apps button OnSelect property shows what else a button can run.

Launch("https://www.spguides.com/power-apps/")

Clicking it opens the SPGuides Power Apps hub in a new tab, and the app stays open in its own tab.

Power Apps Studio with the OnSelect property and a Launch formula that opens a URL in a new tab

How does this work?

Launch() takes the address as its only required argument. In a web browser, the default target is New, so you don’t have to say “new tab” anywhere.

If you’d rather show the link as text than as a button, the same formula works in a label’s OnSelect. Here’s how to create a hyperlink button in Power Apps that looks like a link.

Method 2: Open the URL in the Same Tab

Sometimes the app is done once the user clicks, like a “Finish and go to the portal” button. Same app, second button, with LaunchTarget.Replace as the third argument:

Launch("https://www.spguides.com/power-apps/", {}, LaunchTarget.Replace)

I ran this in the published app. The player tab itself went to the Power Apps tutorials hub, the app closed, and no new tab opened.

SPGuides Power Apps tutorials page that replaced the published app in the same browser tab

How does this work?

LaunchTarget only works with the record form of the parameters. That’s why the formula has an empty record {} in the middle, even though this URL needs no parameters.

Important: test Replace in the published app. In Studio it would replace the Studio tab, so I didn’t run it there.

Method 3: Open a URL With Parameters

Parameters are the ?name=value part of a URL. SPGuides search reads the s parameter, so it makes a good test target. Put the names and values in a record:

Launch("https://www.spguides.com/", {s: "launch function"})

You can also pass them as name and value pairs. Both forms build the same address, but only the record form accepts a LaunchTarget, so I use it everywhere:

Launch("https://www.spguides.com/", "s", "launch function")

How does this work?

Power Apps URL-encodes the address and every value for you, as if you’d used EncodeUrl. A space becomes a plus or %20, so you never type ?s=launch+function by hand. The same idea powers a text input that works as a hyperlink.

Method 4: Build the URL From a Variable

Hard-coded values only get you so far. Same screen, now with the txtLaunchSearch box: button 4 copies what the user typed into a global variable and passes it to Launch(). Our guide to global vs context variables in Power Apps explains when Set() is the right pick.

Set(varSearch, txtLaunchSearch.Text);
Launch("https://www.spguides.com/", {s: varSearch})
OnSelect formula that sets varSearch from a text input and passes it to Launch

In Preview, I typed launch url and clicked button 4. The label next to it now shows varSearch = launch url.

Preview of the Launch demo screen with launch url typed and varSearch showing the same text

A new tab opened on https://www.spguides.com/?s=launch+url, which showed “Search Results for: launch url”.

SPGuides search results page for launch url opened in a new tab by Power Apps

How does this work?

Set() runs first and stores the text. Launch() then reads varSearch and adds it as the s parameter. The space in “launch url” became a plus sign without any extra code.

Pro Tip: you can pass txtLaunchSearch.Text straight to Launch(). I keep the variable because I reuse the value elsewhere, and if you clear the text input after the click, the variable still holds what was sent.

Method 5: Reuse One Named Tab

Click a New-tab button five times and you get five tabs. If users keep coming back to the same page, give the tab a name instead of LaunchTarget.New:

Launch("https://www.spguides.com/power-automate/", {}, "SPGuidesTab")

I clicked button 5 twice in Preview. The first click opened the Power Automate hub in a new tab, and the second click reused that same tab, so only one tab opened.

How does this work?

When a tab with that name already exists, Launch() replaces its content. Otherwise, it creates the tab. The name is internal only, so it never shows as the tab title, and it can’t start with an underscore.

Method 6: Open Another Canvas App on a Specific Record

This is the one I use most at work: a list app opens a details app on the ticket the user picked. Same gallery of four tickets here. If you’ve built a gallery OnSelect action before, this works the same way. The target app reads the values with Param() in its StartScreen property.

Select App in the Tree view, pick StartScreen and add a branch for each screen name. With no screen parameter, it returns blank and the app opens on its first screen.

If(
    Param("screen") = "param",
    scrParam,
    Param("screen") = "combo",
    scrComboDefault,
    Param("screen") = "launch",
    scrLaunch
)
App StartScreen property with an If formula that picks a screen from Param screen

Now give button 6 the app’s App URI and a record of parameters. Replace the ID with your own app’s ID, which you’ll find in the app’s Details page:

Launch("/providers/Microsoft.PowerApps/apps/b8b370fa-09aa-4fc1-8cfc-fc9318f12df6",
    {screen: "param", id: galLaunch.Selected.ID})
OnSelect of a button that launches another canvas app with screen and id parameters

In the published app, I selected New hire setup #1002 (ID 3) and clicked button 6. A new player tab opened straight on scrParam with Param(“id”) = 3, and the LookUp returned “New hire setup #1002 | Closed | High”.

Published Power Apps player opened on scrParam with Param id 3 and the New hire setup request

How does this work?

Launch() turned the record into URL parameters, so the player URL ended with &screen=param&id=3. StartScreen read Param(“screen”) and picked scrParam, and the screen used Value(Param(“id”)) because Param() always returns text.

So here’s the catch: from Studio Preview, the same button opened the Studio edit page of the app, not the player. Test app-to-app links from the published app. The player may also ask “Allow Service Desk Demo to access your data?” the first time.

Important: query strings don’t work when launching a canvas app by its App URI. Always pass the values in the record.

Which Method Should You Use?

SituationUse
Help link, document or policy pageLaunch(url) (new tab, the default)
The app is finished after the clickLaunch(url, {}, LaunchTarget.Replace)
Search or filter page with fixed valuesLaunch(url, {name: value})
Value typed or picked by the userSet a variable, then pass it in the record
Users return to the same page oftenA named tab: Launch(url, {}, "MyTab")
Open another app on one recordApp URI + record, read with Param() in StartScreen

Things to Keep in Mind

  • Nothing opens? The browser’s pop-up blocker may have stopped it. Fix: allow pop-ups for the Power Apps domain.
  • Embedded in SharePoint or Power BI, Replace and named tabs aren’t supported. Fix: keep the default New target there.
  • On a phone, launching an app that’s already running doesn’t refresh its parameters. Fix: close the app first so it reloads.
  • Param() names are case-sensitive and always return text. Fix: match the case and wrap numbers in Value().
  • Email and phone links use the same function with mailto: or tel:. Fix: see how to launch an email from Power Apps.

If you want to build apps like this with a guide, our Power Apps training course covers it on real projects.

Here are a few more Power Apps tutorials I’d read next:

Frequently Asked Questions

How do I open a URL in a new tab in Power Apps?

Put Launch(“https://your-url”) in a button’s OnSelect. In a web browser, New is the default target, so the page opens in a new tab and the app stays open.

How do I open a URL in the same tab in Power Apps?

Use the record form with LaunchTarget.Replace: Launch(“https://your-url”, {}, LaunchTarget.Replace). The empty record is required, because only the record form accepts a target. Test it in the published app.

Can I use Navigate() to open a website in Power Apps?

No. Navigate() only moves between screens in the same app. Use Launch() for web pages and other canvas apps.

How do I pass a variable in a Power Apps Launch URL?

Store the value with Set(), then pass it in the parameter record, like Launch(“https://www.spguides.com/”, {s: varSearch}). Power Apps URL-encodes the value for you.

Why doesn’t LaunchTarget.Replace work in my embedded app?

Microsoft says targets other than New aren’t supported in embedded scenarios like SharePoint or Power BI. See the Launch and Param functions reference.