*Gap samples / Gap 4 - Integrations*

# Salesforce: setup decisions, and what to check when records don't appear

Connecting Salesforce takes four steps. The failures come later, from five decisions nobody made on purpose: whose permissions EULER inherits, how partners are identified, how deals point to partners, which referral flow you use, and how your duplicate rules treat an API. Make them before go-live, then use the table at the end when something goes missing.

**Gap:** 4 of 13 · **Reader:** Salesforce admin, RevOps · **Builds on:** Salesforce Integration: Data Flow

## Why this page needs to exist

Salesforce has three articles: [Salesforce](https://support.eulerapp.com/en/c/integrations/salesforce/salesforce), [Connecting Salesforce to Euler (ECA)](https://support.eulerapp.com/en/c/integrations/salesforce/connecting-salesforce-to-euler-eca), and [Salesforce Integration: Data Flow](https://support.eulerapp.com/en/c/integrations/salesforce/salesforce-integration-data-flow), which says what EULER reads and that it writes through Forms. What is still missing is the consequence of each setup choice, and a fix path. The Salesforce-specific rules that cause failed approvals are inside [Potential Duplicate](https://support.eulerapp.com/en/c/integrations/potential-duplicate), where an admin looking at a missing partner will not think to look.

---

*Sample documentation starts here*

## How EULER sees your Salesforce

- **Permissions:** EULER connects through OAuth and inherits the permissions of the user who authorizes it. Anything that user cannot see, EULER cannot see.
- **Reads:** the partner object (usually Account, sometimes a custom object), partner Contacts linked by Account ID, and Opportunities linked to partners through a partner lookup field.
- **Writes:** through EULER Forms only. Each question writes to the field named in its API Value, and add-ins set default values no question asks for, such as Type = Partner.

## Five decisions to make before go-live

1. **Choose the connecting user**

   You **should** connect with a dedicated integration user whose profile can see every partner Account, Contact and Opportunity. A personal account limits EULER to that person's visibility, and the sync stops if the person leaves.

   **Check:** logged in as that user, you can open a partner Account, its Contacts, and an Opportunity owned by someone else.
2. **Decide how EULER recognizes a partner**

   On the Account object, EULER identifies partners by a record type ID or by a picklist value such as `Type = Partner`. You **shall** pick one, apply it to every existing partner, and set the same value as an add-in on your Partner Registration form, so new partners are classified the same way.

   **Check:** a list view filtered on your rule shows every partner you expect, and nothing else.
3. **Give Opportunities a partner lookup field**

   EULER links an Opportunity to a partner through a partner lookup field. A deal with that field empty is invisible to partner reporting and commissions. You **shall** have the field, and your team **should** fill it on deals created outside EULER.

   **Check:** pick three partner deals created by reps. All three have the lookup filled.
4. **Choose the referral flow**

   An approved referral either creates a **Contact, Account and Opportunity**, or creates a **Lead**. The two behave differently on duplicates (next step). Choose the one your sales process already uses.

   **Check:** your referral form's mappings write to the objects of the flow you chose, and its Test passes.
5. **Check your duplicate rules against API behavior**

   Salesforce lets a person override a duplicate warning in the UI, but not an API (see Salesforce's [DuplicateRule](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_duplicaterule.htm) reference). Two rules follow, from [Potential Duplicate](https://support.eulerapp.com/en/c/integrations/potential-duplicate):

   - If a **Lead** has the same email as a partner applicant, convert that Lead to a Contact **before** accepting the application, or Salesforce returns a duplicate error and partner creation fails.
   - In the **Lead** referral flow, **Proceed with Creation** works only if your duplicate rule allows duplicates. Otherwise create the Lead by hand and choose **Mark as Approved**.

   **Check:** you know which of your duplicate rules apply to Leads, and whether they block or alert.

**CRM-only partner creation**

A Salesforce Partner Registration form can create partners in Salesforce only. Then approving an application creates the Salesforce record and nothing in EULER. The partner appears in EULER when the sync brings the record back, and the application may show `creating` or `approved` without a partner in the meantime. Tell your support team which mode you use: a missing partner means opposite things in the two modes.

## What wrong looks like

**WRONG - FORM MAPPING**

```
Question "Company size"  API Value: Company_Size
Field on the Account:   Company_Size__c

Why it fails: the API Value must exactly match a real field
on the object. Custom fields in Salesforce end in __c, so
this answer has nowhere to go and the form's CRM sync fails.
Use the field's API name, Company_Size__c, and run Test.
```

## When a record doesn't appear

| Symptom | Likely cause | Fix |
| --- | --- | --- |
| Partner approved, in Salesforce, not in EULER | CRM-only creation mode. The sync has not returned the record yet. | Confirm the mode, wait for the sync, then check again. If it never arrives, check the record matches your partner rule (decision 2). |
| Partner approval failed with a duplicate error | A Lead has the applicant's email. | Convert the Lead to a Contact, then accept again. |
| Referral approved, no Lead created | Your duplicate rule blocked the API. | Create the Lead by hand and choose Mark as Approved, or relax the rule for the integration user. |
| Status shows `error writing to crm` | An API Value that does not match a field, or a required field the form does not fill. | Open the form, fix the mapping, run Test, then retry. |
| Deal in Salesforce, not in the partner's view | The partner lookup field is empty. | Fill the lookup. The deal syncs with the partner attached. |
| Some partners or deals never appear | The connecting user cannot see them. | Widen that user's access, or reconnect as an integration user. |

## Confirm with engineering

1. The CRM-only option is set on the Partner Registration form, at [setting]. Correct me.
2. EULER reads Salesforce every [interval]. Correct me.
3. "error writing to crm" is the status shown when a mapped write fails. Yes / no / correct me.
4. Filling the partner lookup on an existing deal attaches it to the partner at the next sync. Yes / no / correct me.
5. The ECA connection in "Connecting Salesforce to Euler (ECA)" replaces the OAuth steps in "Salesforce", or applies to [case]. Correct me.

### Related documentation

- [Salesforce](https://support.eulerapp.com/en/c/integrations/salesforce/salesforce)
- [Connecting Salesforce to Euler (ECA)](https://support.eulerapp.com/en/c/integrations/salesforce/connecting-salesforce-to-euler-eca)
- [Salesforce Integration: Data Flow](https://support.eulerapp.com/en/c/integrations/salesforce/salesforce-integration-data-flow)
- [Potential Duplicate](https://support.eulerapp.com/en/c/integrations/potential-duplicate)
- [Forms 2.0](https://support.eulerapp.com/en/c/core-euler-features/customization-content/forms-2-0)
- [DuplicateRule](https://developer.salesforce.com/docs/atlas.en-us.api_meta.meta/api_meta/meta_duplicaterule.htm) (Salesforce developer docs)

### Sources for this page

- Salesforce, and Salesforce Integration: Data Flow: OAuth, inherited permissions, objects read, record type or Type picklist, partner lookup field, Forms writes and add-ins.
- Potential Duplicate: Lead conversion rule, the two referral flows, duplicate rules and the API.
- Forms 2.0: API Value must match a real field; Test. API Reference: referral statuses include "error writing to crm". MCP reference: CRM-only partner creation and the "creating" status.

### Next

- Gap 8: [Referral statuses](09-statuses.md). Every status, in every CRM, and what to do.
- Gap 3: [Pipedrive data flow](04-pipedrive.md). The same page type, before engineering fills it.

---

*Independent writing sample by Bachtiar Widyantoro (bachwidy.site), November 2026. Not published or endorsed by EULER. Free to reuse and edit. Customer names in examples are fictional. Anything marked [VALIDATE ...] or [CONFIRM ...] is not settled by a public source and needs checking before publishing.*
