Your marketing works with Evalanche, your sales team with the Salesforce Sales Cloud. Both systems do what they’re supposed to. But they don’t speak the same language.
Evalanche only knows profiles. A profile is a profile, whether it’s a newsletter subscriber, a qualified contact, or the CEO of a key account. Everything lands in a flat pool, a single table without relational connections. The Salesforce Sales Cloud, on the other hand, thinks in Leads, Contacts, and Accounts—cleanly separated, interconnected, with clear responsibilities. And it’s precisely in this gap between a flat pool structure and a relational data model that context, speed, and ultimately revenue get lost.
This cookbook article shows you how to set up the Evalanche Salesforce integration using MARINI, the iPaaS platform for data integration and customer intelligence, so that the flat pool becomes a clean relational model. You’ll build Golden Contacts via email lookup, assign them to Salesforce Accounts, and aggregate marketing interactions at the company level. The result: better data quality, faster sales response times, and the foundation for true Account-Based Marketing.
What you need for the Evalanche Salesforce integration
Before we get started, here’s a brief overview of the data objects and MARINI features used in this cookbook article:
Data Objects:
- Evalanche Profiles (Pool): One-dimensional mixed entities from the Evalanche pool, without distinction between Leads, Contacts, and Accounts
- Salesforce Leads: Unqualified contacts in the Salesforce Sales Cloud
- Salesforce Contacts: Qualified contacts, linked to Accounts
- Salesforce Accounts: Company records with relations to Contacts and Opportunities
MARINI Features:
- MARINI DataEngine with Source Modules: Synchronize separate data sources from Evalanche and Salesforce into the DataEngine
- Golden Record / Golden Contact (Lookup): Deduplication and consolidation via email-based lookup from three Source Modules
- Account-Based Transformation: Assignment of Golden Contacts to Salesforce Accounts with aggregation of marketing interactions
- HubEngine Mapping: Visual field mapping between Evalanche profiles and Salesforce objects
- Monitoring and Logs: Monitoring of ongoing synchronization and transformation
Everything ready? Let’s get started.
Initial situation: Why a 1:1 sync doesn’t work
To understand why this integration needs more than simple field mapping, it’s worth looking at the two data models.
Evalanche works with a flat pool structure. Each profile sits in a pool, a kind of table. There’s no native distinction between a fresh newsletter subscriber and a long-standing customer. All information is stored in profile fields: email address, company, salutation, scoring values, campaign participation. But there are no relations, no hierarchy, no connection between people and companies.
The Salesforce Sales Cloud, on the other hand, is based on a relational data model with clearly separated objects:
| Evalanche | Salesforce Sales Cloud |
|---|---|
| Pool with profiles (one table) | Lead: Unqualified contact, not yet assigned to an Account |
| No distinction by qualification | Contact: Qualified contact, linked to an Account |
| No company level | Account: Company record, 1:n relation to Contacts |
| Company name as text field | Opportunity: Sales opportunity, linked to Account and Contact |
If you now try to simply push Evalanche profiles 1:1 to Salesforce, here’s what happens: Every profile becomes a Lead. Or every profile becomes a Contact without Account assignment. Or even worse: Existing Salesforce Contacts get duplicated as new Leads because the system doesn’t recognize that this person already exists.
This isn’t an integration problem. It’s a transformation problem. And that’s exactly what the MARINI DataEngine is built for.
Loading data into the MARINI DataEngine: Setting up three Source Modules
The first real step: You pull the data from both systems into the MARINI DataEngine. Not to store it there, but to understand it, combine it, and transform it there.
For this, you set up three separate Source Modules. Modules are data containers in the MARINI DataEngine where you temporarily store data from external systems to process it in further steps. Each data source gets its own module:
- Evalanche Profiles: All profiles from the relevant Evalanche pool. Via the Evalanche API, profile data with all relevant fields (email, company, scoring, campaign history) is synchronized into the first Source Module.
- Salesforce Leads: All existing Salesforce Leads, so the DataEngine can recognize which Evalanche profiles already exist as Leads in the CRM.
- Salesforce Contacts: All existing Salesforce Contacts, so the DataEngine can recognize which Evalanche profiles already exist as qualified Contacts in the CRM.
Why three modules and not one? Because you need to keep the data separate in order to intelligently merge it in the next step. The consolidation doesn’t happen during import, but during lookup.
Building the Golden Contact: Three sources, one lookup
Now comes the crucial step. You have three Source Modules with data from Evalanche and Salesforce. Each module contains records that partially describe the same person: once as an Evalanche profile, once as a Salesforce Lead, once as a Salesforce Contact. The question is: How do you recognize that anna.mueller@example.com is the same person across all three sources?
The answer: Via Lookup. A lookup is a query that merges records from different modules via a common field. In this case, the common field is the email address.
The process looks like this:
- You create a new module in the MARINI DataEngine for the Golden Record, the so-called Golden Contact.
- For each Evalanche profile, the lookup checks: Is there a record in the Source Module “Salesforce Contacts” with the same email address?
- If yes: The Evalanche profile is merged with the Salesforce Contact. The Golden Contact then contains data from both sources, the marketing data from Evalanche and the CRM data from Salesforce.
- If no: Is there a record in the Source Module “Salesforce Leads” with the same email address?
- If yes: The Evalanche profile is merged with the Salesforce Lead.
- If no: The Evalanche profile is a new contact. It’s created as a new Golden Contact and can be synchronized to Salesforce as a new Lead in the next step.
The order is deliberately chosen: Contacts take precedence over Leads. If a person already exists as a qualified Contact in the CRM, no new Lead should be created. This way you avoid duplicates from the start.
Prioritization and field rules for the Golden Contact
When merging, an important question arises: What happens when the same field has different values in multiple sources? When Evalanche delivers Company = "Example GmbH" and Salesforce has Account.Name = "Example Group GmbH"?
For this, you define field rules in the Golden Record Module:
| Field | Priority | Rationale |
|---|---|---|
| Email address | Evalanche | Marketing system has the most current opt-in status |
| Company name | Salesforce Account | CRM maintains the official company name |
| Phone number | Salesforce Contact | Sales maintains contact data directly |
| Lead score | Evalanche | Marketing scoring is Evalanche’s domain |
| Address data | Salesforce Account | Billing address from CRM is authoritative |
These rules ensure that the Golden Contact always has the best possible data quality, regardless of which system was updated last. It’s not the latest date that wins, but the system that has the highest authority for that specific field.
Account-Based Transformation: Assigning Golden Contacts to Accounts
Up to this point, you have deduplicated Golden Contacts. Each Golden Contact represents exactly one person, enriched with data from Evalanche and Salesforce. That’s good. But for Account-Based Marketing, it’s not enough.
Account-Based Marketing doesn’t think in individual people, but in companies. The question isn’t “Did Anna Mueller open our newsletter?”, but “How active is Example GmbH overall with our marketing activities?” And for that, you need to assign Golden Contacts to their Salesforce Accounts.
The assignment works via Relation Lookup:
- For each Golden Contact that already exists as a Salesforce Contact, the Account assignment via the
AccountIdfield is already present. This relation is directly adopted. - For Golden Contacts that originate from Evalanche profiles without a Salesforce counterpart, the company name (
Company) from the profile is matched against existing Salesforce Accounts. On a match, the assignment is created automatically. - If no matching Account exists, a new Account can optionally be created in Salesforce, depending on your business rules.
Once the assignment is in place, it gets really interesting: You can aggregate marketing interactions at the Account level.
Aggregating marketing interactions at the Account level
Imagine Example GmbH has five contacts in your Evalanche pool: The marketing manager has downloaded three whitepapers, the CTO has attended a webinar, and the purchasing manager has subscribed to the pricing newsletter. Viewed individually, these are moderate interactions. Viewed together, this is a highly active Account that should be contacted urgently.
The aggregation works via ETL pipelines in the MARINI DataEngine:
- Account Score: Sum of all individual lead scores of the assigned Golden Contacts
- Campaign participation: Number and type of campaigns in which at least one contact of the Account has participated
- Last interaction: Date of the most recent marketing activity across all contacts
- Interaction breadth: Number of active contacts per Account (an Account with five active contacts is more relevant than one with a single newsletter reader)
These aggregated values are stored as custom fields on the Salesforce Account. Sales can see at a glance how active a company is interacting with marketing, without having to click through individual contacts.
Setting up synchronization: From Golden Contact to Salesforce
The transformation in the DataEngine is the core. But the data also needs to flow back to Salesforce. For this, you set up integration plans in the MARINI HubEngine, the integration and synchronization engine.
You need separate plans for different scenarios, controlled via HubEngine Conditions:
Plan 1: Create new Leads
- Condition: Golden Contact has no match in Salesforce Leads and no match in Salesforce Contacts
- Action: Create new Lead in Salesforce
- Mapping: Evalanche profile fields are mapped to Salesforce Lead fields (Name, Email, Company, Score)
Plan 2: Update existing Leads
- Condition: Golden Contact has a match in Salesforce Leads
- Action: Update Lead data (Score, campaign status, last interaction)
Plan 3: Update existing Contacts
- Condition: Golden Contact has a match in Salesforce Contacts
- Action: Update Contact data, especially marketing interaction data
Plan 4: Sync back Account aggregations
- Action: Write aggregated values (Account Score, campaign participation, last interaction) to the Salesforce Account
In the HubEngine Mapping, you visually assign the fields for each plan. Golden Contact fields are on the left, Salesforce fields on the right. Drag and drop, no code.
Using the results: Account-Based Marketing and Lead-to-Sales
When everything is in place, you have an end-to-end data flow that turns Evalanche’s flat pool structure into a clean, relational model in Salesforce. But what do you do with it?
For sales:
- Each Salesforce Account shows at a glance how actively the company is interacting with marketing
- New Leads arrive with full context: not just name and email, but scoring, campaign history, and Account assignment
- No more manual research about whether a contact already exists or which company they belong to
For marketing:
- Account-Based campaigns in Evalanche based on Salesforce Account data: company-specific content, controlled by industry, company size, or Account Score
- Feedback loop: When a Lead is converted in the CRM, this information flows back to Evalanche. Marketing automation without CRM data is now a thing of the past.
- Closed-loop reporting: Which campaigns generate not just leads, but revenue?
For data quality:
- No more duplicates between Evalanche and Salesforce
- One Golden Record per person, automatically deduplicated and enriched
- Clear field authorities: Each data point has exactly one authoritative source
Summary and next steps
In this cookbook article, you learned how to close the structural gap between Evalanche’s flat pool structure and the relational data model of the Salesforce Sales Cloud. The steps in overview:
- Understanding data models: Why a 1:1 sync doesn’t work
- Setting up three Source Modules in the MARINI DataEngine: Evalanche Profiles, Salesforce Leads, Salesforce Contacts
- Building Golden Contacts via email lookup: Deduplication across three sources
- Assigning Golden Contacts to Salesforce Accounts and aggregating marketing interactions
- Setting up integration plans in the MARINI HubEngine for synchronization to Salesforce
Inspiration for next steps:
- Opportunity tracking back to marketing for true closed-loop reporting
- D&B firmographic data for Account enrichment: industry, employee count, revenue directly on the Account
- Lead Scoring based on aggregated Account interactions instead of just individual scores
- Connect additional marketing channels to the same Golden Contact, such as Inxmail or Oracle Eloqua
For a deeper look at the challenge of flat lead pools and their transformation, check out the blog post Lead Pool, CRM Data Model and ABM. And if you want to understand the basic lead-to-sales handover process with MARINI, take a look at the cookbook article Lead-to-Sales: From Marketing Lead to CRM Contact.
Further details about the platform can be found in the HubEngine Handbook and the DataEngine Quickstart.