> For the complete documentation index, see [llms.txt](https://docs.coupler.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.coupler.io/destinations/categories/database/redshift.md).

# Redshift

Send data to Amazon Redshift automatically with Coupler.io. Centralize analytics data from any source without ETL scripting or manual exports.

Amazon Redshift is a fully managed cloud data warehouse designed for large-scale analytics. It lets you run fast SQL queries across massive datasets, making it a natural home for operational data you want to analyze at scale.

Sending data to Redshift with Coupler.io means your warehouse stays up to date automatically — no manual exports, no ETL scripting required.

## Why use Redshift as a Coupler.io destination?

* **Centralize data from any source** — any Coupler.io source (Google Ads, Facebook, HubSpot, and more) can feed data directly into your Redshift tables
* **Automatic type enforcement** — Coupler.io detects column types and creates properly typed tables, so your queries and downstream models work as expected
* **Two write modes** — overwrite tables on each run for clean snapshots, or append rows for historical tracking
* **Scheduled refreshes** — once your data flow runs successfully, you can schedule it to keep Redshift in sync without lifting a finger

## Prerequisites

Before connecting, make sure you have:

* An active Amazon Redshift cluster (not paused)
* A database user with **CREATE** privileges at the database and schema levels, plus **INSERT** permissions on target tables
* Your cluster's **host**, **port** (default: 5439), **database name**, **username**, and **password** ready
* If your cluster is behind a firewall or VPC, allowlist these Coupler.io IP addresses: `34.123.243.115` and `34.170.96.92`

## Quick start

{% hint style="success" %}
Have your Redshift connection credentials open in another tab before you begin — you'll need host, port, database, username, and password.
{% endhint %}

{% stepper %}
{% step %}
**Create a data flow and add a source.** In Coupler.io, create a new data flow. Select your data source (e.g., Google Ads, HubSpot, PostgreSQL) and configure it by following the prompts to authenticate and choose the data entity you want to load.
{% endstep %}

{% step %}
**Select Redshift as your destination.** On the destination step, choose **Amazon Redshift** from the list.
{% endstep %}

{% step %}
**Add your Redshift account.** Click **+ Add Account** and fill in your connection details:

* **Host** — your cluster endpoint (hostname or IP address)
* **Port** — default is `5439`
* **Database** — the name of your target database
* **User** — your Redshift username
* **Password** — your Redshift password

Click **Connect** to verify the connection.
{% endstep %}

{% step %}
**Set your schema and table.** Enter the schema name and table name where Coupler.io should write data. If the schema or table doesn't exist yet, Coupler.io will create them automatically.
{% endstep %}

{% step %}
**Choose a write mode.** Select how Coupler.io should write data on each run:

* **Replace** — drops and recreates the table with fresh data every run; best for clean, current snapshots
* **Append** — adds new rows below existing data; best for building historical records
  {% endstep %}

{% step %}
**Run your data flow.** Click **Save and Run** to execute the first load. Check that rows appear in your Redshift table before setting up a schedule.
{% endstep %}
{% endstepper %}

## Supported features

| Feature              | Supported |
| -------------------- | --------- |
| Replace mode         | Yes       |
| Append mode          | Yes       |
| Automatic scheduling | Yes       |
| Type enforcement     | Yes       |
| Templates            | No        |

## Redshift common issues

### Connection issues

<details>

<summary>Connection fails after entering credentials</summary>

The most common cause is network access. If your Redshift cluster is inside a VPC or behind a firewall, Coupler.io's requests will be blocked unless you allowlist its IP addresses:

* `34.123.243.115`
* `34.170.96.92`

Add these to your cluster's security group inbound rules (port 5439, TCP) and try connecting again.

{% hint style="warning" %}
If your cluster is paused, the connection will also fail. Resume the cluster in the AWS console before attempting to connect.
{% endhint %}

</details>

<details>

<summary>Wrong host or port causes timeout</summary>

Double-check the endpoint in your AWS console under **Clusters → your cluster → General information → Endpoint**. The default port is `5439` — if your cluster was configured with a custom port, use that value instead. Do not include the database name in the host field.

</details>

### Data issues

<details>

<summary>Append mode breaks after the source adds new columns</summary>

This is a known behavior. When a data source (such as Google Ads) introduces new columns, the existing Redshift table schema won't automatically update to accommodate them. Coupler.io will fail to insert rows that contain columns the table doesn't recognize.

To fix this, you have two options:

1. **Manually add the new columns** to the Redshift table using `ALTER TABLE` before running the data flow again.
2. **Switch to Replace mode temporarily**, run the data flow once to recreate the table with the new schema, then switch back to Append mode.

{% hint style="danger" %}
Option 2 will delete all existing rows in the table. If you need historical data preserved, use option 1 or export your data first.
{% endhint %}

</details>

<details>

<summary>Data types are wrong or cause insert errors</summary>

Coupler.io detects column types from the source data and enforces them when creating the table. If the source returns inconsistent types (e.g., a column that sometimes contains numbers and sometimes text), the load may fail or cast incorrectly.

Check the raw data in the **Preview** step of your data flow. If a column has mixed types, consider using a transformation to normalize it before it reaches Redshift.

</details>

<details>

<summary>Table or schema is not being created automatically</summary>

Coupler.io will only create schemas and tables if the database user has the necessary privileges. Ensure your user has `CREATE` privileges at both the database level (for schema creation) and within the target schema (for table creation). Run the following in Redshift to verify or grant permissions:

```sql
GRANT CREATE ON DATABASE your_database TO your_user;
GRANT CREATE ON SCHEMA your_schema TO your_user;
```

</details>

### Permission errors

<details>

<summary>"Permission denied" errors during data load</summary>

This usually means the database user has read-only access or is missing INSERT permissions on the target table. Grant the required permissions:

```sql
GRANT INSERT ON TABLE your_schema.your_table TO your_user;
```

For Replace mode, the user also needs `DROP` and `CREATE` permissions on the table because Replace recreates the table on every run.

</details>

<details>

<summary>User can connect but can't see or write to a specific schema</summary>

In Redshift, schema access is separate from database access. The user may be authenticated but not granted usage on a specific schema. Run:

```sql
GRANT USAGE ON SCHEMA your_schema TO your_user;
GRANT CREATE ON SCHEMA your_schema TO your_user;
```

</details>

## Redshift FAQ

<details>

<summary>What's the difference between Replace and Append mode?</summary>

**Replace** drops the existing table and recreates it with fresh data on every run. This is ideal when you always want a clean, current snapshot — for example, a live view of active campaigns or current CRM records.

**Append** adds new rows below the existing data without touching what's already there. Use this when you want to build a historical log — for example, tracking daily ad spend over time.

If you're unsure, Replace is the safer starting point. You can always switch to Append once you know your schema is stable.

</details>

<details>

<summary>Can I load data from multiple sources into the same Redshift database?</summary>

Yes. Each data flow writes to a specific schema and table that you define. You can create multiple data flows that all write to the same Redshift database, as long as each flow targets a distinct table (or you intentionally want to append data into a shared table).

</details>

<details>

<summary>What happens if my source adds new columns — will my Redshift table update automatically?</summary>

In **Replace mode**, yes — the table is recreated on every run, so new columns from the source will appear automatically.

In **Append mode**, no. The table schema is fixed at creation time. If the source introduces new columns, you'll need to manually run `ALTER TABLE ... ADD COLUMN` in Redshift before the next run, or the load will fail.

{% hint style="info" %}
For more detail on handling schema changes in Append mode, see the [Common Issues](#redshift-common-issues) article.
{% endhint %}

</details>

<details>

<summary>Which Coupler.io sources can send data to Redshift?</summary>

All of them. Any source available in Coupler.io — including Google Ads, Facebook Ads, HubSpot, Shopify, PostgreSQL, and many others — can be routed to a Redshift destination. You can also combine multiple sources in a single data flow using Join, Append, or Aggregate transformations before the data lands in Redshift.

</details>

<details>

<summary>Do I need to create the table in Redshift before running a data flow?</summary>

No. If the table (or schema) you specify doesn't exist, Coupler.io will create it automatically on the first run — as long as the database user has the necessary CREATE privileges.

</details>

<details>

<summary>How do I keep my Redshift cluster from blocking Coupler.io?</summary>

If your cluster is inside a VPC or has inbound rules configured, you need to allowlist Coupler.io's IP addresses:

* `34.123.243.115`
* `34.170.96.92`

Add these to your security group on port `5439` (TCP). Without this, connection attempts will time out.

</details>

<details>

<summary>Can I use a read-only user for the Redshift connection?</summary>

No. Coupler.io needs to write data, so the user must have at minimum INSERT permissions on the target table, plus CREATE permissions if you want Coupler.io to create schemas or tables automatically. A read-only user will cause the data flow to fail during the load step.

</details>

<details>

<summary>What Coupler.io IP addresses should I allowlist for Redshift?</summary>

If your Redshift server restricts inbound connections by IP, allowlist the following Coupler.io addresses:

* `34.123.243.115`
* `34.170.96.92`

This applies to self-hosted databases, PostgreSQL, Google Cloud SQL, and any other setup with network-level access controls.

</details>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.coupler.io/destinations/categories/database/redshift.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
