> ## Documentation Index
> Fetch the complete documentation index at: https://docs.northbeam.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Custom Goals

> Track other actions on your site, like sign-ups, add-to-carts, or form submissions.

<span id="what-are-custom-goals" style={{ display: "block", scrollMarginTop: "7rem" }} />

Custom Goals let you track actions that happen on your website, beyond page views and purchases. For example:

* Email or SMS sign-ups
* Add-to-carts
* Checkout starts
* Quiz or lead form submissions

Each goal shows up as a metric on your Sales page. Custom goals count how many times an action happens. They don't record revenue or other values.

## Which setup you need

Custom Goals work the same way on Shopify and custom stores. You add a short script wherever the action happens, then register the goal in your dashboard.

<span id="how-custom-goals-work" style={{ display: "block", scrollMarginTop: "7rem" }} />

<span id="supported-examples" style={{ display: "block", scrollMarginTop: "7rem" }} />

<span id="unsupported-examples" style={{ display: "block", scrollMarginTop: "7rem" }} />

<Note>
  **Custom goals must happen in the browser.** The script has to run on your website, on the same domain as the Northbeam Pixel, while the visitor is on the page.

  | Works | Doesn't work |
  | :- | :- |
  | Button clicks | Backend or webhook events |
  | Form and quiz submissions | Server-side API calls |
  | Add-to-carts and checkout starts | Offline or CRM-triggered events |
</Note>

***

<span id="how-to-set-up-custom-goals" style={{ display: "block", scrollMarginTop: "7rem" }} />

## Set up a custom goal

<Steps>
  <Step title="Check that the Northbeam Pixel is installed">
    The [Northbeam Pixel](/docs/add-pixel) must be running on the page where the action happens, and it must load first. Custom goals won't track without it.
  </Step>

  <Step title="Add the script">
    Add this script so it runs **when the action happens**, for example after a form submits successfully or after an add-to-cart click:

    ```javascript theme={null}
    <script>
      window.Northbeam.fireCustomGoal("your_goal_id")
    </script>
    ```

    Replace `your_goal_id` with your own Goal ID. You can add the script through Google Tag Manager (easiest for most stores) or directly in your site's code.
  </Step>

  <Step title="Register the goal in your dashboard">
    Go to [Settings → Custom Goals](https://dashboard.northbeam.io/settings/custom-goals) and click **Add Custom Goal**. Fill in:

    * **Goal ID:** the exact Goal ID from your script. If it doesn't match exactly, the goal won't show up.
    * **Display Name:** the metric name you'll see in your dashboard (for example, `SMS Sign Up`).

    Then click **Add**. New or changed goals take effect after the next data processing run.

    <Frame>
      <img src="https://mintcdn.com/northbeam/J4zmt1vvYYrNiG2R/images/readme/889f7aac-CleanShot_2026-04-11_at_16.04.162x-crop.png?fit=max&auto=format&n=J4zmt1vvYYrNiG2R&q=85&s=e4012935ebd49dc2d194c36b94f09216" alt="Settings, Custom Goals page with the Add Custom Goal button and the Add a custom goal form" style={{ maxWidth: "560px", maxHeight: "440px", width: "auto", height: "auto", margin: "0 auto" }} width="2425" height="1078" data-path="images/readme/889f7aac-CleanShot_2026-04-11_at_16.04.162x-crop.png" />
    </Frame>
  </Step>

  <Step title="Add the goal to your Sales page">
    After the goal fires at least once, it's available as a metric. On the [Sales page](https://dashboard.northbeam.io/sales), click **Customize Table**.

    <Frame>
      <img src="https://mintcdn.com/northbeam/J4zmt1vvYYrNiG2R/images/readme/9e7bdc1a-CleanShot_2026-04-11_at_16.14.192x-crop.png?fit=max&auto=format&n=J4zmt1vvYYrNiG2R&q=85&s=274c5e3ca924a6c8cd97a63fa9329d3b" alt="The Customize Table button on the Sales page" style={{ maxWidth: "560px", maxHeight: "440px", width: "auto", height: "auto", margin: "0 auto" }} width="1950" height="284" data-path="images/readme/9e7bdc1a-CleanShot_2026-04-11_at_16.14.192x-crop.png" />
    </Frame>

    Click **Custom goals**, select your goal's metrics, then click **Apply**.

    <Frame>
      <img src="https://mintcdn.com/northbeam/J4zmt1vvYYrNiG2R/images/readme/42110687-CleanShot_2026-04-11_at_16.06.162x-crop.png?fit=max&auto=format&n=J4zmt1vvYYrNiG2R&q=85&s=8f711384e307ec3b30ba3f60d84f681c" alt="Customize table window with Custom goals selected and SMS sign-up metrics checked" style={{ maxWidth: "560px", maxHeight: "440px", width: "auto", height: "auto", margin: "0 auto" }} width="3110" height="1644" data-path="images/readme/42110687-CleanShot_2026-04-11_at_16.06.162x-crop.png" />
    </Frame>
  </Step>
</Steps>

<span id="recommended-naming-conventions" style={{ display: "block", scrollMarginTop: "7rem" }} />

## Goal ID rules

* Use **lowercase letters, numbers, and underscores** only. Hyphens or spaces stop the goal from showing up in your dashboard.
* The Goal ID in your script and in your dashboard must **match exactly**.

Good examples: `sms_signup`, `email_signup`, `add_to_cart`, `quiz_submit`, `initiate_checkout`.

<span id="common-mistakes" style={{ display: "block", scrollMarginTop: "7rem" }} />

<span id="limitations" style={{ display: "block", scrollMarginTop: "7rem" }} />

## Troubleshooting

If a goal isn't showing up, check that:

* The Northbeam Pixel is running on the page where the action happens
* The Goal ID in your dashboard matches the script exactly
* The script runs when the action happens, not on page load or on the wrong trigger
* The action happens on the same domain as the Northbeam Pixel
* At least one processing run has finished since you added the goal
