# How to connect Batch to your Data Warehouse with Hightouch?

Modern data architectures demand seamless integration between storage, processing, and actionable platforms. Connecting Batch to your Data Warehouse enables a unified, efficient, and scalable approach to leveraging customer data for engagement.

**Hightouch** is an excellent tool to send your data to Batch and works great with Snowflake, BigQuery, Redshift, Databricks, ClickHouse, [and many more](https://hightouch.com/integrations?type=source).

By doing so, you ensure keeping your Data Warehouse as the Single Source of Truth, you have complete control over your data update frequency and you can leverage huge data volumes.

## Step-by-step guide <a href="#h_1ccf712423" id="h_1ccf712423"></a>

In this tutorial, we will send user data to [Batch’s Profile API](https://doc.batch.com/developer/api/cep/profiles/update).

We will be sending attributes and events to each of your users profiles using the native Batch destination.

{% stepper %}
{% step %}

### Create your data source in your Data Warehouse

The first step is to organize your data in order to have a table storing your user data, transformed and ready to be sent to Batch. *NB : Views will work as well.*

We recommend you use a dedicated database and schema to store the data destined to be sent via Reverse ETL.
{% endstep %}

{% step %}

### Connect Hightouch with your Data Warehouse <a href="#h_91b88cbf85" id="h_91b88cbf85"></a>

Make sure Hightouch has access to your Data Warehouse, see [this Hightouch basics tutorial.](https://hightouch.com/docs/getting-started/create-your-first-sync#connect-a-source)
{% endstep %}

{% step %}

### Create a model in Hightouch <a href="#h_992a68c192" id="h_992a68c192"></a>

Creating a model is basically telling Hightouch where to go fetch the data in your Warehouse.

We will call it `batch_profile_base` in this example.

<figure><img src="/files/4qvdPX0zQjAgw3yKbcMO" alt="Create your model"><figcaption><p>Create your model</p></figcaption></figure>

A model could be made with a more complex query but we recommend you keep your complex logic in your Data Warehouse, with your usual transformations methods.
{% endstep %}

{% step %}

### Create your Batch Destination in Hightouch <a href="#h_771c5a0cca" id="h_771c5a0cca"></a>

This is where you will configure the access to your Batch Project.

You will need API Keys available in your Batch Dashboard > Settings.

In Hightouch, create a Batch Destination and enter the required information, which you can find in your Batch dashboard under Settings → General.

<figure><img src="/files/LITEfPMFd7KQaEIqjWYp" alt="Batch native destination"><figcaption><p>Use the Batch native destination !</p></figcaption></figure>

Once this is done, deal with your internal permissions and your Batch Destination is ready!
{% endstep %}

{% step %}

### Create your Sync in Hightouch <a href="#h_7ec5240aad" id="h_7ec5240aad"></a>

Syncs declare how you want your data to appear in Batch and on what frequency you want updates. This is the section where you will have to make choices.

Add Sync > Select your model > Select your destination

Here comes the mapping configuration:

<figure><img src="/files/xh3V8NwkE3X9BfKRLT7P" alt="Sync configuration"><figcaption><p>Configure your sync</p></figcaption></figure>

You can send various types of data from Hightouch to Batch:

* **Attributes:**

You can include multiple attributes—both native and custom—in a single sync to Batch.

<figure><img src="/files/xrZeOCvt2qZV1i3yV8hw" alt="Synchronize your attributes."><figcaption><p>Synchronize your attributes.</p></figcaption></figure>

{% hint style="danger" %}
Important: Destination field names must be in lowercase. Using uppercase letters will cause errors and prevent the data from being processed correctly.
{% endhint %}

* **Events:**

A single sync allows you to send one event along with multiple associated event attributes.

<figure><img src="/files/FZ8fRdI6QtewKEif34NC" alt=""><figcaption><p>Synchronize your events.</p></figcaption></figure>

{% hint style="danger" %}
Important: Destination field names must be in lowercase. Using uppercase letters will cause errors and prevent the data from being processed correctly.
{% endhint %}

* **Custom Audience (currently supported only for MEP):**

Each sync allows you to create or update one audience, including associated attributes.

<figure><img src="/files/5JGwvQfvKlmxgfjrUtK7" alt=""><figcaption><p>Synchronize your audience (MEP).</p></figcaption></figure>

{% hint style="danger" %}
Important: Destination field names must be in lowercase. Using uppercase letters will cause errors and prevent the data from being processed correctly.
{% endhint %}
{% endstep %}

{% step %}

### Test & Deploy <a href="#h_d405d8ccb9" id="h_d405d8ccb9"></a>

We recommend you test your sync with Hightouch testing module. Remember to test both added rows and changed rows. The API Response should guide you through debugging if needed.

<figure><img src="/files/rsJU5dZShTf50QTm4zqT" alt="Test your sync !"><figcaption><p>Test your sync !</p></figcaption></figure>

Once your test is successful, schedule your sync, deploy it and enjoy having your profile base completely up to date on Batch.

You can use Batch’s Profile View to verify that the customer data has reached its destination, on the basis of a customer ID: [How to find a user's profile on the dashboard?](/getting-started/features/customer-engagement-platform/profiles/search-profiles.md)

You’re now ready to use your data to send personalised and engaging messages to your audience 🎉
{% endstep %}
{% endstepper %}


---

# Agent Instructions: 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:

```
GET https://doc.batch.com/integrations/cdp/page-3.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
