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

# Installation

> Install tracking on the surface your paid traffic reaches, and confirm the first event.

Install tracking on the surface that receives your paid traffic first. Add the other
surfaces after the first one sends events.

## Before you start

You need a workspace, and permission to publish the site, store, or app.

| You need                                      | Where to get it        |
| --------------------------------------------- | ---------------------- |
| Workspace ID, for the Web SDK and Shopify     | **Settings → Install** |
| Write key, for iOS, React Native, and Node.js | **Settings → API**     |

Use one workspace for one business. Two workspaces split the same customer into two people,
and neither one shows the whole journey.

## Choose an install

| Where customers interact         | Install                        | Guide                                                         |
| -------------------------------- | ------------------------------ | ------------------------------------------------------------- |
| Website or landing page          | Web snippet, or `@datalyr/web` | [Install web tracking](/getting-started/install-web-tracking) |
| Shopify storefront               | App Embed and Web Pixel        | [Install on Shopify](/installation/shopify)                   |
| Native iOS app                   | `DatalyrSDK`                   | [Install in a mobile app](/installation/mobile)               |
| React Native or Expo app         | `@datalyr/react-native`        | [Install in a mobile app](/installation/mobile)               |
| Backend, job, or webhook handler | `@datalyr/api`                 | [Node.js SDK](/sdk-reference/node)                            |

<Warning>
  Install one web tracker per page. The snippet and `@datalyr/web` together issue two
  `visitor_id` values for one person, and split the journey in half.
</Warning>

## What each install sends on its own

| Install           | Automatic wire event names                                                                                                                         |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
| Web               | `pageview` on load, and on every route change                                                                                                      |
| Shopify Web Pixel | `checkout_started`, `checkout_completed`, `pageview`, `view_item`, `add_to_cart`, `cart_viewed`, `search`, `add_payment_info`, `collection_viewed` |
| iOS               | `app_install`, `session_start`, `session_end`                                                                                                      |
| React Native      | `app_install`, `session_start`, `session_end`                                                                                                      |
| Node.js           | None. Every event is a call you make.                                                                                                              |

No install tracks clicks, scrolls, form submits, or outbound links. Call `track()` for
every business action.

## The order to work in

<Steps>
  <Step title="Install tracking">
    Add the snippet or SDK. Publish the change.
  </Step>

  <Step title="Send one real visit">
    Open the published site or app in a private window.
  </Step>

  <Step title="Confirm the event">
    Open **Events**. Inspect the newest event for its URL and identifiers.
  </Step>

  <Step title="Connect revenue">
    Connect the system that creates the charge. See [Revenue](/revenue).
  </Step>

  <Step title="Create a conversion rule">
    Open **Conversions** and select **manage rules**. Without a rule, no ad platform
    receives a conversion.
  </Step>
</Steps>

## Verify

Open **Events** after step 2. Confirm the newest event arrives within 30 seconds.

## When no event arrives

| Symptom                              | Cause                               | Fix                                         |
| ------------------------------------ | ----------------------------------- | ------------------------------------------- |
| Nothing in **Events** from a website | The snippet did not publish         | View the page source and search for `dl.js` |
| Nothing in **Events** from an app    | The API key is wrong                | Compare it against **Settings → API**       |
| Two `pageview` events per load       | Two web trackers                    | Remove one                                  |
| Events arrive with no campaign       | A redirect dropped the query string | Test the final URL directly                 |

## Next

* [Verify your setup](/getting-started/verify-your-setup): test the full chain to a delivered conversion.
* [Revenue](/revenue): connect the system that owns the payment.
* [No events](/troubleshooting/no-events): when the first check never passes.
