Mozilla accounts helpers


Since a rebranding in October 2023, we now refer to “Mozilla accounts” in our web pages instead of “Firefox accounts”. This rebranding is so far superficial, and sign up flows still go to Because of this, our internal code and helpers still use FxA or fxa as a common abbreviation. However the language used around them should now be “Mozilla accounts” going forward.

Marketing pages often promote the creation of a Mozilla account as a common call to action (CTA). This is typically accomplished using either a sign-up form, or a prominent link/button. Other products such as Mozilla VPN use similar account auth flows to manage subscriptions. To accomplish these tasks, bedrock templates can take advantage of a series of Python helpers which can be used to standardize product referrals, and make supporting these auth flows easier.


See the attribution docs (Mozilla accounts attribution) for more a detailed description of the analytics functions these helpers provide.

Mozilla account sign-up form

Use the fxa_email_form macro to display a Mozilla account sign-up form on a page.


To use the form in a Jinja template, first import the fxa_email_form macro:

{% from "macros.html" import fxa_email_form with context %}

The form can then be invoked using:

{{ fxa_email_form(entrypoint='') }}

The macro’s respective JavaScript and CSS dependencies should also be imported in the page:


import FxaForm from './path/to/fxa-form.es6.js';


The above JS is also available as a pre-compiled bundle, which can be included directly in a template:

{{ js_bundle('fxa_form') }}


@import '../path/to/fxa-form';

The JavaScript files will automatically handle things such as adding metrics parameters for Firefox desktop browsers. The CSS file contains some default styling for the sign-up form.


The sign-up form macro accepts the following parameters (* indicates a required parameter)

Parameter name





Unambiguous identifier for which page of the site is the referrer.



Used to identify experiments.

Experiment ID



Used to track page variations in multivariate tests. Usually just a number or letter but could be a short keyword.

Variant identifier



An optional parameter used to invoke an alternatively styled page at




Applies a CSS class name to the form. Defaults to: ‘fxa-email-form’




The main heading to be used in the form (optional with no default).

Localizable string

‘Join Firefox’ .


Introductory copy to be used in the form. Defaults to a well localized string.

Localizable string

‘Enter your email address to get started.’ .


Button copy to be used in the form. Defaults to a well localized string.

Localizable string

‘Sign Up’ .


CSS class names to be applied to the submit button.

String of one or more CSS class names

‘mzp-c-button mzp-t-primary mzp-t-product’


Used to identify specific marketing campaigns. Defaults to fxa-embedded-form

Campaign name prepended to default value



Used for paid search keywords.

Brief keyword



Declared when more than one piece of content (on a page or at a URL) links to the same place, to distinguish between them.

Description of content, or name of experiment treatment


Invoking the macro will automatically include a set of default UTM parameters as hidden form input fields:

  • utm_source is automatically assigned the value of the entrypoint parameter.

  • utm_campaign is automatically set as the value of fxa-embedded-form. This can be prefixed with a custom value by passing a utm_campaign value to the macro. For example, utm_campaign='trailhead' would result in a value of trailhead-fxa-embedded-form.

  • utm_medium is automatically set as the value of referral.


When signing into a Mozilla account using this form on a Firefox Desktop browser, it will also activate the Sync feature.

Common Parameters

The fxa_button, pocket_fxa_button, and monitor_fxa_button helpers all support the same standard parameters:

Parameter name





Unambiguous identifier for which page of the site is the referrer. This also serves as a value for ‘utm_source’.




The button copy to be used in the call to action.

Localizable string

‘Try Pocket Now’


A class name to be applied to the link (typically for styling with CSS).

String of one or more class names



A boolean value that dictates if the CTA should be styled as a button or a link. Defaults to ‘True’.


True or False


A boolean value that dictates if metrics parameters should be added to the button href. Defaults to ‘True’.


True or False


An dictionary of key value pairs containing additional parameters to append the the href.


{‘s’: ‘ffpocket’}


An dictionary of key value pairs containing additional data attributes to include in the button.


{‘data-cta-text’: ‘Try Pocket Now’, ‘data-cta-type’: ‘activate pocket’,’data-cta-position’: ‘primary’}


The fxa_button helper also supports an additional action parameter, which accepts the values signup, signin, and email for configuring the type of authentication flow.

Firefox Sync and UITour

Since Firefox 80 the accounts link and email form macros use UITour to show the Mozilla accounts page and log the browser into Sync or an account. For non-Firefox browsers or if UITour is not available, the flow uses normal links that allow users to log into the Mozilla accounts website only, without connecting the Firefox Desktop client. This UITour flow allows the Firefox browser to determine the correct Mozilla accounts server and authentication flow (this includes handling the China Repack build of Firefox). This transition was introduced to later migrate Firefox Desktop to an OAuth based client authentication flow.

The script that handles this logic is /media/js/base/fxa-link.js, and will automatically apply to any link with a js-fxa-cta-link class name. The current code automatically detects if you are in the supported browser for this flow and updates links to drive them through the UITour API. The UITour showFirefoxAccounts action supports flow id parameters, UTM parameters and the email data field.

Testing Sign-up Flows

Testing the Mozilla account sign-up flows on a non-production environment requires some additional configuration.

Configuring bedrock:

Set the following in your local .env file:


For Mozilla VPN links you can also set:



The above values for staging are already set by default when Dev=True, which will also apply to demo servers. You may only need to configure your .env file if you wish to change a setting to something else.