---
description: >-
  Detailed technical description of the upsert and mirror sync modes for the
  Reverse ETL sources.
---

# Sync Modes

The Reverse ETL sources support two sync modes that let you define how to sync your data to the destination:

* Upsert mode
* Mirror mode

Currently, the [Redshift](https://www.rudderstack.com/docs/reverse-etl/amazon-redshift/), [PostgreSQL](https://www.rudderstack.com/docs/reverse-etl/postgresql/), [Snowflake](https://www.rudderstack.com/docs/reverse-etl/snowflake/), and [BigQuery](https://www.rudderstack.com/docs/reverse-etl/google-bigquery/) warehouse sources support syncing data via these sync modes.

You can configure the sync mode while connecting a destination with your Reverse ETL source.

By default, these modes sync the data incrementally, meaning they only sync the new data. However, you can choose to run a full sync manually.

## Upsert mode

In this mode, RudderStack supports insertion of new records and updates to the existing records, while syncing data to the destination.

The upsert mode is supported for all destinations connected to the above-mentioned Reverse ETL sources, except [Facebook Custom Audience](https://www.rudderstack.com/docs/destinations/advertising/fb-custom-audience/).

![Upsert mode](https://876606571-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Lq5Ea6fHVg3dSxMCgyQ%2Fuploads%2Fgit-blob-b442b296a9d700efcbea112a93194900d335c114%2Fupsert-mode.png?alt=media)

Whenever the columns mapping is changed, RudderStack runs a full sync the next time.

## Mirror mode

In this mode, RudderStack 'mirrors' the source by keeping the destination data the same as the source data. It performs insertion, updates, and deletion of records while syncing data to the destination.

This mode is currently supported only for the [Facebook Custom Audience](https://www.rudderstack.com/docs/destinations/advertising/fb-custom-audience/) destination connected to the above-mentioned Reverse ETL sources.

![Mirror mode](https://876606571-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Lq5Ea6fHVg3dSxMCgyQ%2Fuploads%2Fgit-blob-b163e130c90c76a2f8427316cb0ac66ea8c5519b%2Fmirror-mode.png?alt=media)

Whenever the columns mapping is changed, RudderStack runs a full sync the next time. While performing a full sync, RudderStack first deletes all the existing records and then syncs the records as per the latest column mappings.

## FAQ

### What happens to the records that have not been successfully sent to the destination in the previous sync?

In case of an unsuccessful delivery, RudderStack retries sending the events in the next sync.

## Contact us

For queries on any of the sections covered in this guide, you can [**contact us**](mailto:%20docs@rudderstack.com) or start a conversation in our [**Slack**](https://rudderstack.com/join-rudderstack-slack-community) community.
