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

# Connect data systems to Unify

> Sync databases, data warehouses, data lakes, and more into Unify.

## Overview

Unify is built to support custom data models and huge volumes of data. If you
have data that lives in an external data system, you can send it over and use it
to power anything within Unify. Examples of data systems you can connect to
Unify include:

* **Data warehouses** — Snowflake, BigQuery, ClickHouse, Redshift, etc.
* **Databases** — PostgreSQL, MySQL, MongoDB, etc.
* **Data lakes** — S3, Databricks, etc.

Data within Unify is stored in *objects*. Objects are the building blocks that
allow you to store and interact with records in Unify. Every object has a set of
*attributes* which represent the fields that make up the object. You can send
external data into objects in Unify.

Unify provides a set of standard objects, such as Company and Person, that are
used throughout the platform. You can also create custom objects to store data
from external sources or represent information that doesn't fit into standard
objects.

## Modeling data

You can insert data directly into the standard Company and Person objects.
However, this loses track of where the data came from. It can also lead to lots
of custom attributes being created on those standard objects over time, many of
which are not applicable for most records.

Instead, Unify recommends defining custom objects to represent external data
sources. You can create a custom object which aligns with the data source and
then create a reference attribute to link it to the standard objects.

<Callout icon="lightbulb" iconType="regular">
  **Example**

  Suppose you have a table of product users in your data warehouse. One thing
  you could do is insert them directly into the Person object in Unify:

  <Danger>
    **Avoid**: Directly inserting external data sources into standard objects.

    ```mermaid theme={null}
      flowchart LR
        subgraph data_warehouse["Data Warehouse"]
          external_product_user["Product Users Table"]
        end

        subgraph unify["Unify"]
          person["Person"]
        end

        external_product_user -->|Insert| person
    ```
  </Danger>

  However, a better strategy is to create a new object in Unify called "Product
  User" and connect it to the Person object using a reference attribute. Then,
  insert the product user records into that object instead:

  <Check>
    **Prefer**: Inserting external data sources into custom objects linked to
    standard objects.

    ```mermaid theme={null}
    flowchart LR
      subgraph data_warehouse["Data Warehouse"]
        external_product_user["Product Users Table"]
      end

      subgraph unify["Unify"]
        unify_product_user["Product User"] -->|Reference| person["Person"]
      end

      external_product_user -->|Insert| unify_product_user
    ```
  </Check>

  This is how Unify builds its integrations into Salesforce, HubSpot, and more.
</Callout>

This has several benefits. It allows you to connect many data sources to Unify
without adding many custom attributes to the standard objects. It also makes it
easy to filter data based on whether it came from a specific source or not.

## Getting started

<Steps titleSize="h3">
  <Step title="Define objects and attributes">
    The first step is to define the objects and attributes that will store your
    data. This is how you declare the format of the data and how it relates to
    other objects.

    <CardGroup cols={2}>
      <Card title="Manage via API" href="/developers/api/data/overview" horizontal cta="API Reference">
        Create and manage objects, attributes, and records in Unify via API.
      </Card>

      <Card title="Manage via UI" href="/reference/objects/overview" horizontal cta="Objects Reference">
        Create and manage objects, attributes, and records within the Unify app.
      </Card>
    </CardGroup>

    Once the objects are created, you can create, update, and delete records using
    the API. They will also become available in any tools that connect to Unify,
    such as the Hightouch and Fivetran destinations for Unify.
  </Step>

  <Step title="Sync data into Unify">
    Once the objects are created, you can sync data into Unify using the API
    directly or via a supported integration.

    <CardGroup cols={2}>
      <Card title="Connect via Hightouch" href="/developers/guides/data-systems/hightouch-destination" horizontal cta="View Guide">
        Sync object records from Hightouch data sources into Unify.
      </Card>

      <Card title="Connect via Fivetran" href="/developers/guides/data-systems/fivetran-destination" horizontal cta="View Guide">
        Sync object records from Fivetran data sources into Unify.
      </Card>

      <Card title="Sync directly via API" href="/developers/api/data/overview" horizontal cta="API Reference">
        Create, update, and link object records using the Unify API and SDKs.
      </Card>
    </CardGroup>
  </Step>
</Steps>
