> For the complete documentation index, see [llms.txt](https://docs.arcade.software/kb/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.arcade.software/kb/leverage/insights-and-analytics/identifying-viewers.md).

# Identifying Viewers

Viewer identification is how Arcade attributes a demo view to a known person or company, rather than an anonymous session. Knowing *who* watched — and which steps they engaged with — lets you follow up, score interest, and connect demo activity to your pipeline.

Arcade offers four ways to identify viewers. Teams can use multiple together: one to name the *person* (a tracking link, a form, or a custom link) and Audience Reveal to fill in the *company* automatically.

### Identify viewers with a tracking link

A tracking link is an Arcade share or embed URL that carries the viewer's identity. When the link tells Arcade who is watching, every view and engagement event in that session is attributed to that person — no form fill required. This is the most direct method when you already know who you're sending to, such as a sales email, a CRM sequence, or a demo embedded in your own app.

You can pass identity in two ways: statically in the URL, or dynamically with a message from the host page.

**Identity parameters.** Pass at least an `email` or a `user_id`. The rest are optional.

| Parameter      | Description                                                   |
| -------------- | ------------------------------------------------------------- |
| `email`        | The viewer's email address.                                   |
| `user_id`      | Your own unique ID for the viewer.                            |
| `account_id`   | The viewer's account or organization ID.                      |
| `company_name` | The viewer's company (also used to look up the company logo). |

If neither `email` nor `user_id` is present, the view stays anonymous.

**Static — add the identity to the URL.** Use this when you can template the link per recipient, such as a mail merge or a CRM sequence that inserts the recipient's email. URL-encode any values that contain spaces (`Acme Corp` becomes `Acme+Corp`).

```html
<iframe src="https://demo.arcade.software/YOUR_FLOW_ID?embed&email=jane@acme.com&company_name=Acme+Corporation&account_id=acme-corp" />
```

The simplest valid version passes only an email:

```html
<iframe src="https://demo.arcade.software/YOUR_FLOW_ID?embed&email=jane@acme.com" />
```

**Dynamic — send `set-identity` from the host page.** Use this when your page only knows the viewer's identity at runtime, such as a logged-in application or a gated portal. Send the message as soon as the iframe mounts so early events are attributed:

```javascript
const iframe = document.getElementById('arcade-iframe')

iframe.contentWindow.postMessage({
  event: 'set-identity',
  identity: {
    email: 'jane@acme.com',          // or userId
    accountId: 'acme-corp',           // optional
    companyName: 'Acme Corporation'   // optional
  }
}, '*')
```

Identified viewers appear in your demo's insights and can be read back through the Identified Views API. See **Tracking links and identified viewers** for the full developer reference.

### Capture viewers with a form

A form collects a viewer's details inside the demo itself. This is the method to use for inbound or unknown traffic — for example, a demo on a public web page — because the viewer supplies their own identity.

To add one:

1. Open your Arcade in the editor.
2. Add a **Form** step from the toolbar.
3. Add an **Email** field. Use the Email field type — a plain text field will not register the submission as a lead.
4. Optionally mark the field required, restrict it to corporate email addresses, or block disposable addresses. You can add name, company, or custom fields as well.

Submissions appear in the **Form Submissions** tab of the demo's insights and in your team's **Leads** tab, each with an email-quality indicator. If you've connected HubSpot or Salesforce, submissions sync to your CRM automatically, and you can be notified by email on each new lead.

### Identify viewers with custom links

A custom link is a named share link you create for a specific recipient or company. Views on each link are tracked separately, so you can attribute engagement to a particular account even when you send the same demo to many.

To create one:

1. Open the **Share** panel.
2. Under **Sharing externally**, select **New link**.
3. Name the link, then set any options: language, password, expiration, or **require email to view**.
4. Select **Create**.

When you turn on **require email to view**, the viewer verifies their own email before watching. This produces an **authenticated view** — the most reliable form of identity, because it's confirmed by the viewer rather than asserted by the sender. Without it, a custom link attributes the view to the account but doesn't capture the individual; combine it with the identity parameters above to name the person.

Each custom link's engagement — views, plays, completion, CTA clicks, and authenticated viewers — appears in the demo's insights.

### Reveal companies with Audience Reveal

Audience Reveal identifies the **company** behind an otherwise anonymous view by resolving the viewer's IP address. It needs no per-recipient setup, which makes it the easiest way to see which organizations are engaging at scale.

Once enabled, companies appear in the **Audience Reveal** tab of your insights, with details such as industry, size, and location, plus the demos they viewed and optional daily digests.

Audience Reveal identifies companies, not individuals, and depends on IP resolution — so viewers on home networks, VPNs, or mobile connections may not be matched. For person-level identity, pair it with a tracking link, a form, or a custom link.

### Compare the methods

| Method          | Identifies                           | Best when                                                                   |
| --------------- | ------------------------------------ | --------------------------------------------------------------------------- |
| Tracking link   | The person, plus company and account | You already know who you're sending to, or you're embedding in your own app |
| Form            | The person who submits               | Traffic is inbound or unknown                                               |
| Custom link     | The account, or the verified person  | You send one demo to many named accounts                                    |
| Audience Reveal | The company                          | You want company-level signal with no setup                                 |

### Related articles

* Tracking links and identified viewers
* [Custom links](https://docs.arcade.software/kb/build/interactive-demo/share/custom-links)
* [Leads](https://docs.arcade.software/kb/leverage/insights-and-analytics/leads)
* [Insights and analytics](https://docs.arcade.software/kb/leverage/insights-and-analytics)

*Some features described here depend on your Arcade plan.*


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.arcade.software/kb/leverage/insights-and-analytics/identifying-viewers.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
