Mailchimp
Renta sends rows from your data warehouse to a Mailchimp audience as contacts with their merge fields, or as tags on contacts that are already in the audience.
A pipeline writes to one audience and finds contacts by email address. A contact that is already in the audience keeps its subscription status, unless you map the status yourself.
Authentication
Renta connects to Mailchimp with OAuth. You log in to your Mailchimp account and allow access, and Renta works with every audience of that account.
Renta reads audiences and merge fields to fill the pipeline settings and writes the contacts and tags that pipelines deliver.
Your credentials are encrypted, and you can revoke the access at any time in your Mailchimp account.
Connect Mailchimp destination
- Navigate to the Connections > Catalog section in the left sidebar and open the Destinations tab.
- Open the Email marketing category and click the Mailchimp card.

Click Log in to your Mailchimp account. Mailchimp opens in the same tab.

Log in with the account that owns the audiences you want to fill. If Mailchimp asks for a verification code, enter it. On the next screen, click Allow. Mailchimp returns you to Renta.

Renta confirms the granted access and shows the connected account. Finish the setup:
- Destination name.
Renta fills it with the name of your Mailchimp account. Change it to any name you like. The name is used only in the Renta interface.
Click Save to finish.

The new destination appears in the Destinations list with the Active status. You can now use it in Reverse ETL pipelines.

Prepare a data model
A Reverse ETL pipeline reads from a data model: a SQL query saved in the Data models section that decides which warehouse rows to sync and what each row holds. Build it before the pipeline, because the mapping dropdowns are filled from its columns.
Include the contact's email address and a column with a stable identifier of the row, such as a customer id. The identifier becomes the unique key of the model and lets Renta tell a changed row from a new one.
-- Contacts prepared for Mailchimp. The query returns rows only, no table is created.
WITH demo_contacts AS (
SELECT
'mc-demo-0001' AS customer_id,
'james.miller@example.com' AS email,
'James' AS first_name,
'Miller' AS last_name,
'Northwind Traders' AS company,
'pro' AS plan
UNION ALL SELECT 'mc-demo-0002','olivia.johnson@example.com','Olivia','Johnson','Contoso Retail','free'
UNION ALL SELECT 'mc-demo-0003','william.davis@example.com','William','Davis','Fabrikam Inc','enterprise'
)
SELECT * FROM demo_contactsCreate the data model
In the left sidebar, open Data models and click New model. Then:
- Source.
Choose the warehouse connection the query runs against. - Write your model query.
Paste your SQL. Keep SQL query as the query type. - Run preview.
Check the rows and column names. Click Next step when the result looks right.

Pick Reverse ETL only for a model that feeds pipelines. Choose one of the AI agents options instead if the same model should also answer agent questions.

Review the columns Renta read from the query and mark the one that identifies a row, such as customer_id in the example.

Give the model a name and a short description, then click Create model. The name is what you pick from the Data model dropdown when you build the pipeline.

The model appears in the list with the Reverse ETL scope and is ready to use in a pipeline.

Create a Mailchimp pipeline
The destination and the data model have to exist before you start.
In the left sidebar, click New pipeline. On the Source step, switch the toggle to Reverse ETL, pick your data warehouse, such as Google BigQuery, and click Next step.

Choose the warehouse connection that holds your data models and click Next step.

On the Destination step, select Mailchimp under Already connected and click Next step.

Choose the Mailchimp connection you created earlier. The card shows the account name and its data center. Click Next step.

Pipeline configuration
On the final step, choose the data behind the pipeline, the audience it fills, and what Renta sends there.
Data model and audience
Point the pipeline at the data and at the audience that receives it. The fields you can map below depend on both choices.

- Data model.
Choose the model to sync. The columns available for mapping come from it. - Audience.
Choose the Mailchimp audience Renta writes to. Renta reads the list from your account and shows the audience ID and the number of subscribed contacts next to each name.
What to send
Choose whether the rows become contacts or tags.

| Option | Description |
|---|---|
| Audience members | Adds contacts to the audience and keeps their fields up to date. One row is one contact. |
| Tags | Adds a tag to contacts that are already in the audience. One row is one tag on one contact. |
Status for new contacts
This setting appears for Audience members only. It sets the subscription status of contacts that Renta adds to the audience.

| Status | Description |
|---|---|
| Subscribed | New contacts can receive your campaigns right away. This is the default. |
| Pending | Mailchimp emails each new contact a confirmation link. The contact is subscribed after they confirm. |
| Unsubscribed | New contacts are stored in the audience and receive no campaigns. |
| Transactional | New contacts receive transactional emails only. |
A contact that is already in the audience keeps its status. Renta changes it only when you map the Subscription status field.
When a source row is deleted
Set what happens in Mailchimp when a row disappears from the data model. Renta never deletes a contact permanently.

| Option | Available for | Description |
|---|---|---|
| Ignore | Audience members, Tags | The contact and its tags stay as they are. This is the default. |
| Unsubscribe | Audience members | Sets the contact to unsubscribed. The contact and its data stay in the audience. Contacts that are already unsubscribed, cleaned, archived, or missing are left as they are. |
| Archive | Audience members | Archives the contact. Mailchimp keeps its data, and the contact returns to the audience when its row comes back. |
| Remove tag | Tags | Removes the tag from the contact. The contact stays in the audience. |
Field mapping
Connect the columns of your data model to Mailchimp fields. Email address is always the first row and cannot be removed: it is how Mailchimp finds the contact.

| Mapping type | Description |
|---|---|
| Standard | Takes the value from a data model column. |
| Static | Writes the same fixed value into every contact. |
| Variable | Writes a value from the sync itself, such as the data model name or the time the run started. |
The right-hand dropdown lists the contact fields of Mailchimp followed by the merge fields of the selected audience. Under each field, Renta shows the value it expects. A field that is already mapped is greyed out.

| Mailchimp field | What to send |
|---|---|
| Email address | The contact's email. Renta lowercases it. A row without an email is rejected. |
| Subscription status | One of subscribed, unsubscribed, cleaned, pending, or transactional. Any other value rejects the row. |
| Language | A language code, such as en or fr. |
| VIP | true or false. The values 1, 0, yes, and no are accepted too. |
| Email format | html or text. |
| Tags | A list of tag names, a JSON array, or a comma-separated string. The tags are added to the contact, existing tags stay. |
| Text, phone, ZIP, URL, and image merge fields | Any text value. |
| Number merge fields | A number. |
| Date merge fields | A date, such as 2024-01-15. Free text is not accepted. |
| Birthday merge fields | A date, or a month and day written month first, such as 12/31. Renta writes it in the format the field uses in Mailchimp. |
| Dropdown and radio merge fields | One of the choices defined in Mailchimp. Letter case does not matter. |
| Address merge fields | One row per part: street address, city, state or province, postal code, address line 2, and country. |
A value that does not fit the field type is skipped for that row, and the rest of the row is still delivered. Mailchimp keeps the value it had.
An address needs the street address, city, state or province, and postal code. When one of them is empty in a row, Renta leaves the whole address out of that row.
A mapped Subscription status overwrites the status of existing contacts too, including contacts who unsubscribed. Map it only when your warehouse is the record of your contacts' consent. To set the status of new contacts only, use Status for new contacts instead.
Null values
Each mapping row has its own rule for empty source values. Open it with the gear icon next to the row.

| Option | Description |
|---|---|
| Don’t sync null values | Skips the field when the source column is empty, so Mailchimp keeps its current value. This is the default. |
| Always sync | Clears the Mailchimp field when the source column is empty. Use it when the warehouse is the single source of truth for that field. |
Always sync clears merge fields and Language. VIP, Email format, Tags, and Subscription status have no empty state, so an empty value in them is always skipped.
Tags
When What would you like Renta to send to Mailchimp? is set to Tags, the mapping block holds two required rows: Email address and Tag name. Each row of the data model adds one tag to one contact.

The contact has to be in the audience already. A row whose email address is not there is rejected, so run an Audience members pipeline for new contacts first. A tag that does not exist in the audience yet is created. To add several tags to one contact, give the data model one row per tag.
Then name the pipeline.

Integration name is the name of your pipeline. Edit it to match your preferences.
Schedule
Choose how often the pipeline runs.

| Schedule type | Description |
|---|---|
| Manual | The pipeline runs only when triggered manually through the interface or via API. |
| Daily | The pipeline runs once a day at the specified update time. |
| Interval | The pipeline runs at specified time intervals. |
| Cron Expression | The pipeline runs on a schedule defined by a cron expression. |
For Daily schedules, set the Update time (the exact time each run starts), then click Create pipeline.

Renta also supports API triggers and integration with external orchestrators such as Apache Airflow, Dagster, and Prefect. See the full scheduling documentation for details.
The new pipeline appears in the Pipelines section under the Reverse ETL tab, where you can track its runs and progress.

Sync strategy
Renta syncs incrementally. A run compares the data model against the state the previous run recorded and sends only what changed. The first run has nothing to compare against and delivers every row.
| Row state | Audience members | Tags |
|---|---|---|
| New | Adds the contact with the status for new contacts, or updates the contact that has this email address. | Adds the tag to the contact. |
| Changed | Writes the mapped fields again with the new values. Fields outside the mapping stay as they are. | Adds the tag from the new values. The tag from the previous values stays on the contact. |
| Unchanged | Sends nothing. | Sends nothing. |
| Deleted | Follows the deletion policy: ignore, unsubscribe, or archive. | Follows the deletion policy: ignore or remove the tag. |
Limits
- One audience per pipeline.
A pipeline writes to the audience selected in its settings. Create a pipeline for each audience you fill. - Email addresses must be unique in the model.
When several rows of one run share an email address, the last row is delivered and the others are rejected. - A rejected row does not stop the others.
Mailchimp answers per contact, so a row it refuses is rejected on its own and the rest of the batch still lands. The reasons appear in the run log. - A run stops when rejections pile up.
Renta halts the run when more than 30% of a batch, or more than 10% of the rows delivered so far, come back rejected. Contacts already written stay in Mailchimp. - Merge fields are not created for you.
Renta writes into the merge fields your audience already has. Mailchimp does not check fields marked as required in the audience, so a contact can arrive without them.
Ready to get started?
Build your data pipeline today or get a personalized demo. Start free!
Need help?
Get expert support to ensure your project succeeds. We're here to help!
Feature requests?
Help shape our product! Share your ideas for new features and integrations.