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

# Meta Offline Conversions

> Send offline conversion events from your data warehouse to Meta for ad measurement and optimization.

## Supported syncing

| Type | Description | Supported Sync Modes | API Reference |
| - | - | - | - |
| **Events** | Sync conversion events to Meta's Offline Conversions API | Insert | [Offline Conversions API reference](https://developers.facebook.com/docs/marketing-api/offline-conversions/) |

For more information about sync modes, refer to the [sync modes](https://docs.hightouch.com/syncs/types-and-modes.md#sync-modes) docs.

## Setup Offline Conversions API

To send offline events via Hightouch, you first need to create an app. You can follow these steps to do so:

1. In Meta Business Manager, go to [Business Settings](https://business.facebook.com/settings/) and open the **Apps** tab under **Accounts**.

2. Click **Add** and select **Create a new app ID**.

![App creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-new-apps.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=78bf35f06a4b3f39f24bb9dd16ca765b)

3. Select **Other** as the use case for the app and click **Next**.

![App creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-use-case.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=25969cf1b390fdf32becac1275b37267)

4. Select **Business** as the app type and click **Next**.

![App creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-app-type.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bbe6dc9d8d238894b30b7dc3fd5be224)

5. Add a descriptive name like "Hightouch Offline Events" as the app name and click **Create app**.

6. This takes you to the app overview page. Copy the **App ID** to connect it in the Business Manager.

![App creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-app-id.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=b74c3dad04db18014feb66cd92b85c78)

7. Back in [Meta Business Manager](https://business.facebook.com/) and open the **Apps** tab.

8. Click **Add** and select **Connect an app ID**. Enter the app ID you previously copied and click **Add app**.

![App creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-add-app.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bdc6f16385fe55ec38cb3b43e15e382e)

Next, you need to grant the app **system user access**. This lets your app send data to Meta via the API. To create it:

1. In [Business Settings](https://business.facebook.com/settings/), open the **System Users** tab under **Users** and click **Add**.

![System user creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-add-system-user.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=95fd4a47a166833fb79b50d47a5e9352)

2. Enter a **System user name** and select **Admin** as the system user role. Click **Create system user**.

![System user creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-add-system-user-2.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bff120fb90a36b84cbc2f0d1be793e58)

3. From the newly created user, click **Generate New Token**.

![System user creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-generate-new-token.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=bf42bb01d982639a03bf4cfc43b82098)

4. Select the app you previously connected and set the [token expiration](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/#types-of-system-access-tokens). We strongly recommend indefinite access so you don't need to regenerate the token every 60 days. For **Available permissions**, select **ads\_management**. Click **Generate token**.

![Token creation in Meta](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-generate-token.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=23150b7bb31fa78e918f90a33648ba6a)

5. Copy and store the access token in a secure location as it won't be stored by Meta.

Refer to Meta's [Offline Conversions API Reference](https://developers.facebook.com/docs/marketing-api/offline-conversions/) for further information on prerequisites for using the API.

## Connect to Meta Offline Conversions API

Go to the [**Destinations** overview page](https://app.hightouch.com/destinations?from=docs) and click the **Add destination** button. Select **Meta Offline Conversions** and click **Continue**. You can then authenticate Hightouch to **Meta Offline Conversions** by entering the **Access Token** you previously generated into Hightouch.

## Sync configuration

Once you've set up your Meta Offline Conversions destination and have a [model](https://docs.hightouch.com/getting-started/concepts.md#models) to pull data from, you can set up your sync configuration to begin syncing data. Go to the [**Syncs** overview page](https://app.hightouch.com/syncs?from=docs) and click the **Add sync** button to begin. Then, select the relevant model and the Meta Offline Conversions destination you want to sync to.

> [!WARNING]
>
> To ensure syncs send each event, your event model must use a truly unique [primary key](https://docs.hightouch.com/getting-started/concepts.md#unique-primary-key-requirement). See the [events syncs](https://docs.hightouch.com/syncs/types-and-modes.md#event-syncs) documentation for more information.

### Syncing events

First, enter the event set ID that you want to upload events to. You can find your event set ID from the set's setting's tab.

![Event Set ID](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-event-set.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=9189908c6096454b9574a3c81c41240e)

If you don't have an events set yet, you can create one following [these instructions](https://www.facebook.com/business/help/339320669734609?id=565900110447546). Make sure the [access token](#setup-offline-conversions-api) you entered [has access to this set](https://www.facebook.com/business/help/629677790575687?id=565900110447546).

Enter an upload tag, for example, "monthly\_uploads" to identify the events. Optionally, you can also enter a namespace identifier. The [namespace identifier](https://developers.facebook.com/docs/marketing-api/offline-conversions/#upload-events) is the scope used to resolve `extern_id` or `tpid`. It can be another data set or data partner ID.

![Hightouch sync configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-configuration.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=295eb860f378ca865219eba67e49f88e)

#### Event timestamp

You can optionally select a column that contains timestamps of when events occurred. If this field is empty, Hightouch uses the time the event arrives at the server. Hightouch syncs the timestamp as the `event_time` parameter the Conversions API requires.

If you select a column, it should be in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format. Hightouch automatically converts the data to the format Meta expects.

#### Field mapping

Field mapping is where you can select which event parameters you want to send to the Offline Conversions API. The API expects the following parameters:

* `event_name`: Type of event. For example, `ViewContent`, `Search`, `AddToCart`, `AddToWishlist`, `InitiateCheckout`, etc.
* `currency`: Three-letter ISO currency code for this conversion event. Required for `Purchase` events. For example, `USD`
* `value`: Value of conversion event. Required for Purchase events. For example, `16.00`.
* `match_keys`: a set of identifiers to match people for attribution. Examples include `email`, `phone`, `db`, etc. Note that these must be [hashed](#hashing).

The Meta Offline API accepts strings and arrays of strings for [`match_keys`](https://developers.facebook.com/docs/marketing-api/offline-conversions/#upload-events). For example, you can use values like `"jane@example.com"` or `["jane@example.com", "john@example.com"]` for `match_keys.email`. The API rejects comma-separated strings, for example, `"jane@example.com, john@example.com"`. Ensure the mapped field is in the correct format.

![Hightouch sync configuration](https://mintcdn.com/hightouch-3c037897/L_vQfA0JQEpeGUUo/images/destinations/destination-meta-offline-sync-columns.png?fit=max\&auto=format\&n=L_vQfA0JQEpeGUUo\&q=85\&s=45bf2a1c5868a6b87f45c84eccf7d4d3)

#### Hashing

By default, Hightouch automatically hashes the following fields:

* **email**
* **phone**
* **gender**
* **doby**
* **dobm**
* **dobd**
* **last name**
* **first name**
* **first initial**
* **city**
* **state**
* **zip**
* **country**

If you want to turn hashing off, select **No** under **Would you like Hightouch to automatically detect if your PII data requires hashing?**.

## Tips and troubleshooting

To see the exact API requests and responses from each sync run, use the [live debugger](https://docs.hightouch.com/syncs/debugger.md). To get notified by Slack, PagerDuty, SMS, or email when a sync fails, set up [sync alerts](https://docs.hightouch.com/syncs/alerting.md). If you run into an issue this page doesn't cover, [contact support](#pylon-chat).

## Common errors

### Event time is older than \{...}. Old events can't be submitted

If you receive this error for an event that isn't as old as the error message suggests, it may be because of an incorrect format for the `event_timestamp` field.
Make sure that timestamps are in [ISO 8601](https://www.iso.org/iso-8601-date-and-time-format.html) format, as described in the [event timestamp](#event-timestamp) section above.
