<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[New users are never counted — all users appear as Returning Users after launch]]></title><description><![CDATA[<h3>Our Authentication Architecture</h3>
<p dir="auto">We use <strong>BrainCloud External Authentication</strong> (<code>AuthenticateExternal</code>) as our primary auth method.<br />
We do <strong>not</strong> use <code>AuthenticateAnonymous</code> at all.</p>
<p dir="auto">Our flow is:</p>
<ol>
<li>Client calls our own backend server with a device identifier (<code>SystemInfo.deviceUniqueIdentifier</code>)</li>
<li>Our server creates/finds an account in our own identity provider using a deterministic anonymous ID derived from the device identifier</li>
<li>Our server then calls BrainCloud <strong>S2S API</strong> (<code>SYS_CREATE_USER_EXTERNAL_AUTH</code>) to create a BrainCloud profile <strong>before returning a response to the client</strong></li>
<li>Our server returns a user ID and access token to the client</li>
<li>The client then calls <code>AuthenticateExternal(userId, accessToken, externalAuthName, forceCreate: true)</code></li>
</ol>
<p dir="auto">The relevant server-side code (Step 3):</p>
<pre><code class="language-csharp">public async Task&lt;AccountData&gt; EnsureExternalAccountAsync(string externalId)
{
    var account = await BrainCloudS2SClient.CallAsync&lt;AccountData&gt;(
        "friend", "GET_PROFILE_INFO_FOR_EXTERNAL_AUTH_ID_IF_EXISTS", ...);

    if (string.IsNullOrEmpty(account.BrainCloudProfileId))
    {
        account = await BrainCloudS2SClient.CallAsync&lt;AccountData&gt;(
            "user", "SYS_CREATE_USER_EXTERNAL_AUTH", ...);
    }

    return account;
}
</code></pre>
<hr />
<h3>The Problem</h3>
<p dir="auto">Since launch, <strong>zero users are counted as New Users</strong> in the BrainCloud dashboard.<br />
Every user appears as a Returning User.</p>
<hr />
<h3>Questions</h3>
<p dir="auto"><strong>Q1.</strong> When <code>AuthenticateExternal</code> is called and the profile already exists (created earlier via <code>SYS_CREATE_USER_EXTERNAL_AUTH</code> S2S), does BrainCloud return <code>"newUser": "false"</code> — even if the user has never called <code>AuthenticateExternal</code> before?</p>
<p dir="auto"><strong>Q2.</strong> Does BrainCloud's New User analytics (retention cohorts, DAU new/returning breakdown) rely on the <code>newUser</code> flag from <code>AuthenticateExternal</code>, on the profile's <code>createdAt</code> timestamp, or something else?</p>
<p dir="auto"><strong>Q3.</strong> If the S2S pre-creation is the cause, what is the recommended pattern?</p>
<ul>
<li>Should we remove the S2S pre-creation and let <code>AuthenticateExternal(forceCreate: true)</code> be the sole profile creator?</li>
<li>Or is there a way to mark an S2S-created profile so BrainCloud still counts the first <code>AuthenticateExternal</code> call as a New User event?</li>
</ul>
]]></description><link>https://forums.getbraincloud.com/topic/350/new-users-are-never-counted-all-users-appear-as-returning-users-after-launch</link><generator>RSS for Node</generator><lastBuildDate>Tue, 12 May 2026 12:41:11 GMT</lastBuildDate><atom:link href="https://forums.getbraincloud.com/topic/350.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 May 2026 06:32:09 GMT</pubDate><ttl>60</ttl></channel></rss>