What You’ll Learn in This Article:
- Why an Iterable pipeline overwrites profile fields on every submission, and when that’s a problem.
- How to look up the subscriber’s existing Iterable profile before you update it.
- How to order your mappings so an existing value is kept, and a new value is only written when the field is empty.
By default, every time a subscriber submits a Campaign, your Iterable pipeline sends the mapped fields to Iterable and overwrites whatever was already on that user’s profile. That’s usually what you want, but not always. Some fields should only be set once, such as the date someone first signed up, their original signup source, or the first Campaign they converted on.
This article walks through an example pipeline that sets a signUpDate field in Iterable to today’s date the first time a subscriber comes through, and leaves the original date untouched every time after that. You can use the same pattern for any field you want to preserve.
How It Works
The pipeline has four tasks. The key idea is in task 3: you map the new value first, then map the existing value from Iterable to the same field below it. Mappings run top to bottom, so when the subscriber already has a value in Iterable, the second mapping replaces the new one and the original value is sent back unchanged. When they don’t have a value yet, there’s nothing for the second mapping to copy, so the new value is kept.
# | Task | Task type | What it does |
1 | Get Iterable Profile | Iterable API (Get User) | Looks up the subscriber in Iterable by email and returns their current profile, including any existing signUpDate. |
2 | Set Current Date | Render Template | Creates a todayDate value containing the current date and time. |
3 | Map Iterable Profile | Map Data | Builds the profile to send. Maps todayDate to signUpDate, then maps the existing signUpDate from task 1 to the same field so it wins when present. |
4 | Update Profile | Iterable API (Update User) | Sends the mapped profile from task 3 to Iterable. This is a subtask of task 3. |
Before You Begin
- You’ll need an Iterable connection set up in Digioh. If you haven’t connected Iterable yet, do that first under Connections > Connections.
- Decide which Iterable field you want to preserve, and confirm its exact name in Iterable (for example, signUpDate). Field names are case-sensitive.
- You can build these tasks into your existing Iterable pipeline, or create a new one under Connections > Pipelines and click Create Pipeline.
Step 1: Get the Subscriber’s Iterable Profile
The first task looks up the subscriber in Iterable so the pipeline knows what’s already on their profile.
- In your pipeline, click Add Task and choose the Iterable API task. Name it something clear, like Get Iterable Profile.
- Under API action, set API operation to Get User.
- Under Connection, choose your Iterable connection.
- Under Payload, set Path to email to Current Data and email. This tells the task to look up the user by the email address that came in with the submission.
- Click Save.

This task doesn’t change anything in Iterable. It only reads the profile so the later tasks can use it.
Step 2: Set the Current Date
Next, create the value you want to write when the field is empty. In this example, that’s today’s date.
- Click Add Task and choose Render Template. Name it Set Current Date.
- Leave Input data set to Current Data.
- Set Template language to Liquid and Output format to JSON.
- In the Template editor, enter the following:
{ "todayDate" : "{{ date.now | date.to_string '%Y-%m-%d %H:%M:%S' }}" } |
- Click Save.

If your Campaign already collects the value you want to write, such as a hidden field, you can skip this task and map that form field directly in Step 3 instead.
Step 3: Map the New Value, Then the Existing Value
This is where the preserve logic happens. In the Map Data task, you’ll add two mappings that both point to the same Iterable field, in a specific order.
- Click Add Task and choose Map Data. Name it Map Iterable Profile.
- Add your standard mappings first, such as email → email, firstName → dataFields.firstName, and lastName → dataFields.lastName.
- Click Add Mapping to add the new value:
Source: Data field → Set Current Date → todayDate
Destination: dataFields.signUpDate
Transform: Date
- Click Add Mapping again, directly below it, to add the existing value:
Source: Data field → Get Iterable Profile → dataFields.signUpDate
Destination: dataFields.signUpDate
Transform: Date
- Turn on Remove unmapped fields so only the fields you mapped are sent to Iterable.
- Click Save.

Here’s what happens on each submission:
Subscriber in Iterable | Mapping 4 (todayDate) | Mapping 5 (existing signUpDate) | Sent to Iterable |
New, or no signUpDate yet | Sets signUpDate to today | Nothing to copy, so it’s skipped | Today’s date |
Already has a signUpDate | Sets signUpDate to today | Replaces it with the existing value | The original date, unchanged |
Step 4: Update the Profile in Iterable
The last task sends the mapped profile to Iterable.
- On the Map Iterable Profile task, open the task menu (⋮) and click Add Subtask. Choose the Iterable API task and name it Update Profile.
- Set API operation to Update User.
- Under Connection, choose your Iterable connection.
- Under Payload, set Path to user to Map Iterable Profile. This sends the output of the Map Data task, not the original submission.
- Leave Merge nested objects on, so the fields you send are merged into the user’s existing data fields instead of replacing them all.
- Click Save.
Step 5: Publish, and Connect to Your Campaign
- Once you're completed with updating your pipeline, click Publish. Changes don’t go live until the pipeline is published.
- If the pipeline isn’t already connected to your Campaign, add it from the Campaign’s Connections settings.
Using This for Other Fields
The same pattern works for any field you only want to set once. Swap out the pieces like this:
- The new value can come from a Render Template task (like the date above), a form field, or a fixed value.
- The existing value always comes from the Get Iterable Profile task, using the field’s path on the profile, such as dataFields.originalSource.
- Both mappings point to the same destination, with the existing-value mapping last.
You can preserve more than one field in the same pipeline. Just add a new-value and existing-value pair for each one.
Want to get more from Digioh?
Get the playbooks leading brands use to convert more visitors into revenue.
Browse the Playbooks