Skip to main contentArrow Right

This blog is the latest in the “The Power of Descope Flows” series, which covers how our drag-and-drop CIAM platform can be used to add, modify, and update authentication on any app or website. In this blog, we cover how Descope Flows can be used to support a Product-Led Growth strategy.

Check out our other "Power of Flows" blogs on user onboarding, enforcing SSO on enabled domains, streamlining in-person event registrations, replacing passwords with passkeys, securely merging OAuth identities, and simplifying password-based authentication.


Picture this: You visit a new city, get hungry, and enter a new restaurant. You tell the host you want to see a menu before sitting down—which they refuse. Instead, they insist you provide your name and credit card number before showing you to a table! Sounds absurd, right?

Yet, many applications and services in the digital world do just that. They demand users create accounts and hand over personal information before they can explore what’s on offer. But times are changing, and smart businesses are catching on to a method that ushers customers inside instead of alienating them.

Enter Product-Led Growth (PLG). This approach is reshaping how we think about user onboarding and conversion. At its core, PLG is about letting users sample the goods before committing—like those tempting free samples at the grocery store.

In this article, we’ll dive into how Descope Flows can supercharge your PLG strategy. We’ll explore the science of tracking anonymous users and the art of turning them into happy, registered customers. By the end, you’ll see why Flows can be a game-changer for user experience. First, let’s discuss how PLG can enable more conversions and why “try before you buy” can massively uplift your customer base.

PLG lets you sample before you order

Think back to our restaurant analogy. A great dining experience often starts with browsing the menu, maybe catching a whiff of something delicious from the kitchen. It’s all part of the way restaurants engage with customers’ senses.

Now, let’s translate this to the digital world. Product-led growth is like a restaurant that lets you peruse the menu, breathe the aromas, and maybe even sample the dishes before committing to a full meal. In app terms, it’s giving users a chance to play with your product before asking them to sign up or fork over their personal info.

My startup story and PLG epiphany

A few years back, I was working for a startup that catered to social media influencers. We had a sleek platform, cutting-edge features, and a sign-up process that felt like filing a tax return. Unsurprisingly, our conversion rates were abysmal.

Then it hit us: our target audience—mostly 18-to-26-year-olds—had neither the time nor attention to stick with a complicated sign-up process. They wanted instant gratification, not form fields asking for their full name, email address, and social links.

So we flipped the script, opened our platform, and let users dive in anonymously. No name was needed, no email was required, no “20 questions” gauntlet—just pure, hands-on product experience.

Instead of asking for information up front, we focused on collecting anonymous data and turning “samplers” into paying customers. The result was like opening the floodgates, with users pouring in, playing around, and—here’s the kicker—starting to convert. Once they got a taste of what we could offer, signing up felt less of a chore and more like a ticket to satisfaction.

Why this matters in the digital ecosystem

Our startup’s experience isn’t unique. More and more online services are waking up to the power of PLG. They’ve realized that users—especially in our low-friction, instant gratification culture—want to kick the tires before they buy the car. 

This strategy is about building brand trust and showcasing your product’s value from the first touch. In the case of my startup story, users soon realized they wanted to work with PII (Personally Identifiable Information), which required registration. They’d already mentally bought into the product by then, so signing up wasn’t a big deal anymore.

Adopting PLG goes beyond optimizing the signup process. It fundamentally reimagines the user’s initial encounter with your product. And first impressions matter a lot

Tracking anonymous users with Descope

Next, let’s explore how to implement a PLG strategy in a note-taking app with Descope Flows. First, we’ll look at the client side.

The client side

With Descope, we can create temporary users that will act as the representatives of the visitors, or “samplers,” to our site. You can follow this guide on implementing Anonymous Users with Descope.

We will start by collecting the user’s data and storing it. For the sake of simplicity, we will use site cookies with a simple react code:

import React from 'react'
import { randomUUID } from 'crypto';
import WelcomePage from './WelcomePage.js'
import { CookiesProvider, useCookies } from 'react-cookie'

function App() {
  const [cookies, setCookie] = useCookies(['user'])

  function noCookies() {
	const userId = randomUUID();
    	const user = {`${userId}`: {...}}
    	setCookie('user', user, { path: '/' })
	return (
	<div>
	<WelcomePage user={cookies.user} />
	</div>
)
  }

  return (
    <CookiesProvider>
      <div>
        {cookies.user ? <WelcomePage user={cookies.user} /> : noCookies}
      </div>
    </CookiesProvider>
  )
}

export default App

Once we have a simple cookie setup, we can store any data we want with the random user ID we just generated. We can store browser information (e.g. navigator.appVersion), or as we discussed, continue letting the user work in our app and save their actions in the cookie.

Even though they’ve enjoyed the product’s features without an account, we can still create a user that will retain the cookie-based information. Here’s the flow:

import { Descope } from '@descope/react-sdk'

const LoginPage = (user) => {
    return (
        <Descope
            flowId='sign-up-anon-users'
            onSuccess={(e) => console.log('Logged in!')}
            onError={(e) => console.log('Could not logged in!')}
            form={...user}
        />
    )
}

Desc: flow rendering after the user decides to sign up.

The Descope side

The flow will look like this:

Fig: Anonymous users conversion flow example

The flow starts with a simple login via OAuth, followed by a step that takes the user properties that we submitted in the previous step’s form:

Fig: Anonymous users set custom attributes example

Once we have set the custom attributes, our user should look like this:

Fig: Anonymous user created example

Later on, when querying the user from Descope, we can get all of those custom attributes from the API/SDK or as custom claims.

Demo use case: notes app

We offer a glimpse of how this behavior is taken into practice with a sample application that lets you add, manage, and share notes.

When using this app, you can create, edit, and delete notes.

In this current state, the notes are saved inside the user’s site cookies, under notes.

Fig: Notes app example interface

Users can log in when they are ready to share or save notes for the long term (and not in their cookies).

Fig: Notes app cookie saving example

In this scenario, we will use the state of the notes that we save as a cookie to send it to the flow's form parameter.

export default function Login(props: { flowId: string | null, notes: Note[] | null }) {
  const { flowId, notes } = props;
  const form = {notes: JSON.stringify(notes) ? notes : []}
  return (
    <div className="my-4">
      <Dialog.Root>
        <Dialog.Trigger>
          <button className="bg-black rounded-md text-white px-4 py-1 hover:bg-gray-700 duration-200">
            Login
          </button>
        </Dialog.Trigger>

        <Dialog.Content style={{ maxWidth: 450 }}>
          <Dialog.Title>Login</Dialog.Title>
          <Descope flowId={flowId || "sign-up-or-in"} form={form}
          ></Descope> 
        </Dialog.Content>
      </Dialog.Root>
    </div>
  );
}

Once the user is logged in, they can perform various actions, such as managing groups and roles.

Fig: Notes app group management example

Conclusion

In this blog, we explored a powerful way to implement a Product-Led Growth approach using Descope as the backbone of our user conversion and data management. This example is compelling because it flips the traditional first touch on its head; instead of forcing users to log in right away, we’re inviting them to demo and engage first.

At Descope, we practice what we preach, which is why we’d love for you to see our PLG strategy in action. Sign up for a Free Forever Descope account and get started with Flows in minutes—plus, experience the prospective customer side of PLG. Like in our restaurant analogy, this allows you to sample Descope’s “menu” at your own pace.

Want to learn more about the relationship between PLG and authentication? Check out our Learning Center post about progressive profiling. We’ll see you in the next Power of Flows blog!