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

# A Basic Installation

This guide walks you through the complete Innkeepr setup. Follow these steps to enable audience signals and conversion signals for your engagement stack.

## Overview

A complete installation includes five steps:

1. **Subdomain Setup** – Enable first-party tracking for better data coverage
2. **Install Innkeepr.js** – Add the tracking script to your site
3. **Track Conversions** – Capture purchase events with revenue data
4. **Identify Users** – Connect user emails for advanced audience features
5. **Connect Platforms** – Link your ad accounts and analytics

**Timeline:** Most installations are completed within 60 minutes.

## Step 1: Subdomain Setup (Recommended)

Setting up a custom subdomain enables first-party tracking, which captures approximately 20-30% more user sessions by avoiding ad blockers and browser restrictions.

**Create a CNAME Record**

1. Access your domain's DNS settings (typically in your hosting provider or domain registrar)
2. Create a new CNAME record:
   * **Subdomain:** `innkeepr` (or your preferred name)
   * **Target:** `cdn.innkeepr.ai`
3. Save the DNS record and wait for propagation (usually 5-30 minutes)

**Example:**

*innkeepr.yourdomain.com → CNAME → cdn.innkeepr.ai*

After setup, your tracking endpoint will be `https://innkeepr.yourdomain.com` instead of the default Innkeepr domain.

**Note:** This step is optional but strongly recommended. Without a custom subdomain, some user sessions may not be tracked due to browser privacy features and ad blockers.

<Info>
  Learn More

  * [Server-side Installation]()
</Info>

## Step 2: Install Innkeepr.js

Innkeepr.js automatically captures page views and provides methods for tracking conversions and identifying users.

**Get Your Tracking Script**

1. Navigate to **Connections** in the Innkeepr app
2. Click **Add Connection**
3. Select **JavaScript** from the connections catalog
4. Enter your **Innkeepr URI**
5. Copy the tracking snippet

**Install via Tag Manager (Recommended)**

1. Open Google Tag Manager (or your preferred tag manager)
2. Create a new **Custom HTML** tag
3. Paste the Innkeepr.js snippet
4. Set the trigger to **All Pages**
5. If you configured a custom subdomain in Step 1, update the script URL to use your subdomain
6. Save and publish

**Install Directly (Alternative)**

Paste the snippet into the `<head>` section of your website, before other scripts.

**Verify Installation**

Once installed, open your website and check the Event Debugger in the Innkeepr app:

1. Navigate to **Events**
2. You should see `page` events appearing in real-time

<Info>
  Learn More

  * [Innkeepr Spec](/connections/spec-overview)
  * [Testing and Debugging](/getting-started/testing-and-debugging)
</Info>

## Step 3: Track Conversions

Conversion tracking is essential for enabling audience and conversion signals. The track method captures key user actions along with their properties.

**Basic Conversion Tracking**

Fire a `track` call when a user completes a purchase or other conversion event:

```java javascript theme={null}
Innkeepr.track('Order Completed', {
  revenue: 99.95,
  order_id: 'ORD-12345',
  currency: 'EUR'
});
```

**Required Properties**

| Property  | Type   | Description                                   |
| :-------- | :----- | :-------------------------------------------- |
| `revenue` | Number | Order value (required for Conversion Signals) |

**Recommended Properties**

| Property   | Type   | Description                        |
| :--------- | :----- | :--------------------------------- |
| `order_id` | String | Unique order identifier            |
| `currency` | String | ISO currency code (EUR, USD, etc.) |
| `products` | Array  | List of purchased products         |

**Tag Manager Implementation**

1. Create a new **Custom HTML** tag in Google Tag Manager
2. Add the track call with dynamic variables from your data layer:

```java html theme={null}
Innkeepr.track('Order Completed', {
  revenue: {{DL - Order Total}},
  order_id: {{DL - Order ID}},
  currency: {{DL - Currency}}
});
```

3. Set the trigger to fire on your purchase confirmation page or transaction event

**Important:** The `revenue` property is required for Conversion Signals. Without it, incrementality-weighted conversion values cannot be calculated.

**Additional Events**
Track other meaningful user actions to improve audience quality:

```java javascript theme={null}
// Product viewed
Innkeepr.track('Product Viewed', {
  product_id: 'SKU-789',
  category: 'Shoes',
  price: 129.00
});

// Added to cart
Innkeepr.track('Product Added', {
  product_id: 'SKU-789',
  quantity: 1,
  price: 129.00
});
```

**Note:** Some connections (e.g., Shopify) automatically implement track calls for standard e-commerce events. Check the Connections Catalog before implementing manually.

<Info>
  Learn More

  * [Spec: Track](/connections/spec-track)
  * [Standard Events](/connections/overview)
  * [Connections Catalog](/connections/sources/google-ads)
</Info>

## Step 4: Identify Users

The `identify` method connects user actions to known identities. This enables Value-Based Audiences on Meta and improves cross-device tracking.

**Basic User Identification**

Fire an identify call when a user completes a purchase or logs in:

```java javascript theme={null}
Innkeepr.identify('user_12345', {
  email: 'customer@example.com'
});
```

**Required Traits for Value-Based Audiences**

| Trait   | Type   | Description                      |
| :------ | :----- | :------------------------------- |
| `email` | String | User's email address (plaintext) |

**Or:**

| Trait          | Type   | Description                                      |
| :------------- | :----- | :----------------------------------------------- |
| `email_sha256` | String | SHA256-hashed email address (lowercase, trimmed) |

**Tag Manager Implementation**

1. Create a new **Custom HTML** tag in Google Tag Manager
2. Add the identify call with variables from your data layer:

```java html theme={null}
Innkeepr.identify('user_12345', {
  email: 'customer@example.com'
});
```

**Or with hashed email:**

```java html theme={null}
Innkeepr.identify({{DL - User ID}}, {
  email_sha256: {{DL - Customer Email SHA256}}
});
```

3. Set the trigger to fire on purchase confirmation (same as your conversion tracking trigger)

**Additional Traits**

Include additional traits to enrich user profiles:

```java javascript theme={null}
Innkeepr.identify('user_12345', {
  email: 'customer@example.com',
  name: 'Maria Schmidt',
  created_at: '2024-01-15',
  lifetime_value: 450.00,
  customer_type: 'returning'
});
```

**Important:** The `email` or `email_sha256` trait is required for Value-Based Audiences on Meta and Custom Audiences on TikTok. Without it, audience matching relies solely on pixel-based identification.

<Info>
  Learn More

  * [Spec: Identify](/connections/spec-identify)
</Info>

## Step 5: Connect Platforms

Connect your advertising platforms and analytics to enable audience syncing and conversion signals.

**Required Connections**

Navigate to **Connections > Add Connection** and connect the following:

| Platform           | Purpose                                                     |
| :----------------- | :---------------------------------------------------------- |
| Google Analytics 4 | Audience sync via GA4 audiences                             |
| Google Ads         | Audience signals, Conversion signals                        |
| Meta Ads           | Audience signals, Conversion signals, Value-Based Audiences |

**Google Analytics 4**

1. Select **Google Analytics 4** from the connections catalog
2. Authenticate with your Google account
3. Select the GA4 property for your website
4. Grant the required permissions

**Google Ads**

1. Select **Google Ads** from the connections catalog
2. Authenticate with your Google account
3. Select the ad account(s) you want to connect
4. Grant the required permissions
5. Enter your **Dynamic URL Parameter** that carries the Google Campaign ID (e.g., `google_campaign_id={campaignid}`)

**Meta Ads**

1. Select **Facebook Ads** from the connections catalog
2. Authenticate with your Facebook account
   3.Select the ad account and pixel you want to connect
3. Grant the required permissions
4. Enter your **Dynamic URL Parameter** that carries the Meta Ad ID (e.g., `meta_ad_id={{ad.id}}`)

**Note:** Connect all ad accounts where you plan to use Innkeepr audiences or conversion signals.

<Info>
  Learn More

  * [Connections Catalog](/connections/sources/google-ads)
  * [How to Set Up Audience Signals on Meta](/guides/how-to-guides/meta)
  * [How to Set Up Audience Signals in Performance Max](/guides/how-to-guides/pmax)
</Info>

## Validation Checklist

After completing the installation, verify each component is working correctly:

**Event Debugger**

Navigate to **Events** in the Innkeepr app and confirm:

* `page` events are flowing (from Innkeepr.js)
* `Checkout Completed` (or your conversion event) appears with `revenue` property
* `identify` calls appear with `email` or `email_sha256` trait

**Connections**

Navigate to **Connections** and confirm:

* Innkeepr.js shows as **Active**
* Google Analytics 4 shows as **Active**
* Google Ads shows as **Active**
* Meta Ads shows as **Active**

**Troubleshooting**

**No events in debugger:**

* Verify the Innkeepr.js snippet is installed correctly
* Check browser console for JavaScript errors
* Confirm the tag fires on the correct pages/triggers

**Missing revenue in conversions:**

* Verify your data layer contains the order value
* Check that the variable mapping in Tag Manager is correct

**Missing email in identify calls:**

* Verify your data layer contains the customer email
* Check privacy/consent settings aren't blocking the data

## Next Steps

Once your installation is validated, you're ready to create your first signals:

1. **Create an Audience** – Build seed, retargeting, or exclusion audiences
2. **Enable Conversion Signals** – Stream incrementality-weighted conversions to your ad platforms
3. **Set Up Platform-Specific Configurations** – Follow the detailed guides for Meta and Google

<Info>
  Learn More

  * [Audience Signals](/guides/signals-and-activation/audience-signals)
  * [Conversion Signals](/guides/signals-and-activation/conversion-signals)
  * [How to Set Up Audience Signals on Meta](guides/how-to-guides/meta)
  * [How to Set Up Audience Signals in Performance Max](/guides/how-to-guides/pmax)
</Info>
