---
title: "Salesforce-connector"
description: "Volledige Salesforce CRM-integratiegids voor het synchroniseren van leads, contacten, accounts, opportunities en custom objects met Brevo via Tajo."
url: https://tajo.io/nl/docs/connectors/crm/salesforce/
markdown: https://tajo.io/nl/docs/connectors/crm/salesforce.md
lang: nl-NL
robots: noindex
---

Vraag vroegtijdige toegang aan

Vul je voornaam en je zakelijke e-mailadres in. We sturen je een link om je aanvraag voor toegang tot Tajo te bevestigen.

# Salesforce-connector

Connectorstatus: Gepland Nog niet gebouwd. Tajo draait deze connector vandaag niet.

| Bronveld | Doelveld | Voorbeeldwaarde |
| --- | --- | --- |
| `record.id` | `source_id` | `record_1042` |
| `record.updated_at` | `updated_at` | `2026-10-18T08:00:00Z` |
| `record.value` | `value` | `sample_value` |

Verbind je Salesforce CRM met Brevo via Tajo voor contactsynchronisatie op enterpriseniveau, leadmanagement, opportunitytracking en marketingautomatisering aangestuurd door je CRM-data.

## Overzicht

| Eigenschap | Waarde |
| --- | --- |
| **Platform** | Salesforce |
| **Categorie** | CRM |
| **Setupcomplexiteit** | Geavanceerd |
| **Officiële integratie** | Nee |
| **Gesynchroniseerde data** | Contacten, Leads, Accounts, Opportunities, Events |
| **API Base URL** | `https://yourInstance.salesforce.com/services/data/vXX.0` |

## Functies

- **Bidirectionele contact-/leadsynchronisatie** - Synchroniseer Salesforce-contacten en leads met Brevo-contactlijsten
- **Opportunity-tracking** - Map dealfases en bedragen voor omzetgebaseerde segmentatie
- **Accounthierarchie** - Synchroniseer bedrijfsaccounts voor account-based marketing in Brevo
- **Custom object-mapping** - Map Salesforce custom objects naar Brevo-attributen en -events
- **Campaign member-sync** - Synchroniseer Salesforce campaign members met Brevo-lijsten
- **Activiteitstracking** - Synchroniseer tasks, events en e-mailactiviteiten voor engagementscoring
- **Realtime streaming** - Gebruik de Salesforce Streaming API voor directe data-updates
- **SOQL query-ondersteuning** - Filter gesynchroniseerde data met custom SOQL queries

## Vereisten

Voordat je begint, zorg dat je beschikt over:

1. Een Salesforce-org (elke editie met API-toegang)
2. Een Connected App die is geconfigureerd in Salesforce Setup
3. API-toegang ingeschakeld voor je Salesforce-gebruikersprofiel
4. Een Brevo-account met API-toegang
5. Een Tajo-account

## Authenticatie

### OAuth 2.0 Web Server Flow (aanbevolen)

Het beste voor productie-integraties met gebruikersautorisatie.

```bash
# Step 1: Authorize
https://login.salesforce.com/services/oauth2/authorize?
  response_type=code&
  client_id={consumer_key}&
  redirect_uri={callback_url}

# Step 2: Exchange code for tokens
curl -X POST https://login.salesforce.com/services/oauth2/token \
  -d "grant_type=authorization_code" \
  -d "code={auth_code}" \
  -d "client_id={consumer_key}" \
  -d "client_secret={consumer_secret}" \
  -d "redirect_uri={callback_url}"
```

### Username-Password Flow

Voor server-naar-server-integraties zonder gebruikersinteractie.

```bash
curl -X POST https://login.salesforce.com/services/oauth2/token \
  -d "grant_type=password" \
  -d "client_id={consumer_key}" \
  -d "client_secret={consumer_secret}" \
  -d "username={username}" \
  -d "password={password}{security_token}"
```

Security Token

Salesforce vereist dat je je security token aan je wachtwoord toevoegt voor de username-password flow. Reset je token via Setup > My Personal Information > Reset My Security Token.

## Configuratie

### Basisinstelling

```yaml
connectors:
  salesforce:
    enabled: true
    instance_url: "https://yourorg.my.salesforce.com"
    api_version: "v59.0"
    auth:
      type: oauth2
      consumer_key: "${SF_CONSUMER_KEY}"
      consumer_secret: "${SF_CONSUMER_SECRET}"
      refresh_token: "${SF_REFRESH_TOKEN}"

    # Data sync options
    sync:
      contacts: true
      leads: true
      accounts: true
      opportunities: true
      campaigns: true

    # Sync direction
    direction: salesforce_to_brevo

    # Brevo list assignment
    lists:
      all_leads: 15
      qualified_leads: 16
      customers: 17
```

### Veldmapping

Map Salesforce-velden naar Brevo-contactattributen:

#### Standaardmappings

| Parameter | Type | Description |
| --- | --- | --- |
| `Email` required | string | E-mail van contact/lead (unieke identifier voor Brevo) |
| `FirstName` optional | string | Mapt naar FIRSTNAME-attribuut in Brevo |
| `LastName` optional | string | Mapt naar LASTNAME-attribuut in Brevo |
| `Phone` optional | string | Mapt naar SMS-attribuut voor WhatsApp/SMS-berichten |
| `Account.Name` optional | string | Gekoppelde account-/bedrijfsnaam |
| `LeadSource` optional | string | Leadacquisitiebron |
| `StageName` optional | string | Opportunityfase voor dealtracking |
| `OwnerId` optional | string | Toegewezen sales rep voor routing |

#### Custom field-mapping

```yaml
field_mapping:
  # Standard fields
  Email: email
  FirstName: FIRSTNAME
  LastName: LASTNAME
  Phone: SMS

  # CRM fields
  LeadSource: LEAD_SOURCE
  Lead_Score__c: LEAD_SCORE
  Account.Name: COMPANY_NAME
  Account.Industry: INDUSTRY

  # Opportunity fields
  Amount: DEAL_VALUE
  StageName: DEAL_STAGE
  CloseDate: EXPECTED_CLOSE_DATE

  # Custom fields
  Preferred_Channel__c: PREFERRED_CHANNEL
  Customer_Tier__c: VIP_TIER
```

## API-endpoints

### REST API-resources

| Method | Endpoint | Beschrijving |
| --- | --- | --- |
| `GET` | `/services/data/vXX.0/sobjects/Contact` | Query contacten |
| `POST` | `/services/data/vXX.0/sobjects/Contact` | Maak een contact aan |
| `PATCH` | `/services/data/vXX.0/sobjects/Contact/{id}` | Werk een contact bij |
| `GET` | `/services/data/vXX.0/sobjects/Lead` | Query leads |
| `GET` | `/services/data/vXX.0/sobjects/Account` | Query accounts |
| `GET` | `/services/data/vXX.0/sobjects/Opportunity` | Query opportunities |
| `GET` | `/services/data/vXX.0/query?q={SOQL}` | Voer SOQL query uit |
| `POST` | `/services/data/vXX.0/composite/sobjects` | Batch aanmaken/bijwerken |

### Bulk API

| Method | Endpoint | Beschrijving |
| --- | --- | --- |
| `POST` | `/services/data/vXX.0/jobs/ingest` | Maak bulk ingest-job |
| `PUT` | `/services/data/vXX.0/jobs/ingest/{jobId}/batches` | Upload batchdata |
| `GET` | `/services/data/vXX.0/jobs/ingest/{jobId}` | Controleer jobstatus |

### Streaming API

| Endpoint | Beschrijving |
| --- | --- |
| `/cometd/XX.0` | CometD long-polling voor realtime-events |
| PushTopic | Abonneer op recordwijzigingen via SOQL-gebaseerde topics |
| Change Data Capture | Stream gedetailleerde wijzigingen op veldniveau |
| Platform Events | Eigen event-driven architectuur |

## Events

### Record-events (Change Data Capture)

| Event | Trigger | Use case |
| --- | --- | --- |
| `ContactChangeEvent` | Contact aangemaakt/bijgewerkt/verwijderd | Realtime contactsynchronisatie |
| `LeadChangeEvent` | Lead aangemaakt/bijgewerkt/geconverteerd | Lead lifecycle-tracking |
| `OpportunityChangeEvent` | Opportunityfase gewijzigd | Dealpipeline-automatisering |
| `AccountChangeEvent` | Accountrecord gewijzigd | Bedrijfsdatasynchronisatie |

### Platform Events

| Event | Trigger | Use case |
| --- | --- | --- |
| `Lead_Converted__e` | Lead geconverteerd naar contact | Nurture na conversie |
| `Deal_Won__e` | Opportunity closed-won | Onboardingflow voor klanten |
| `Deal_Lost__e` | Opportunity closed-lost | Win-back-campagnes |

## Codevoorbeelden

### Connector initialiseren

```javascript
import { TajoClient } from '@tajo/sdk';

const tajo = new TajoClient({
  apiKey: process.env.TAJO_API_KEY,
  brevoApiKey: process.env.BREVO_API_KEY
});

// Connect Salesforce
await tajo.connectors.connect('salesforce', {
  instanceUrl: 'https://yourorg.my.salesforce.com',
  consumerKey: process.env.SF_CONSUMER_KEY,
  consumerSecret: process.env.SF_CONSUMER_SECRET,
  refreshToken: process.env.SF_REFRESH_TOKEN
});
```

### Contacten synchroniseren met SOQL-filter

```javascript
// Sync only qualified leads from Salesforce
await tajo.connectors.sync('salesforce', {
  type: 'filtered',
  resources: ['leads'],
  filter: "SELECT Id, Email, FirstName, LastName, LeadScore__c FROM Lead WHERE Status = 'Qualified' AND Email != null",
  brevoListId: 16
});

// Check sync status
const status = await tajo.connectors.status('salesforce');
console.log(status);
// {
//   connected: true,
//   lastSync: '2024-01-15T10:30:00Z',
//   contactsSynced: 18400,
//   leadsSynced: 7200,
//   opportunitiesSynced: 3100
// }
```

### Realtime streaming

```javascript
// Subscribe to Salesforce Change Data Capture
await tajo.connectors.stream('salesforce', {
  channels: [
    '/data/ContactChangeEvent',
    '/data/LeadChangeEvent',
    '/data/OpportunityChangeEvent'
  ],
  handler: async (event) => {
    console.log(`Change detected: ${event.entity} ${event.changeType}`);
    // Automatically synced to Brevo by Tajo
  }
});
```

## Rate limits

Salesforce REST API-limieten zijn afhankelijk van je editie en aantal licenties:

| Editie | API-requests per 24 uur |
| --- | --- |
| Developer | 15.000 |
| Enterprise | 1.000 per user license (min. 15.000) |
| Unlimited | 5.000 per user license (min. 15.000) |
| Performance | 5.000 per user license (min. 15.000) |

Aanvullende limieten:

- **Concurrent API-limiet**: 25 long-running requests
- **Bulk API**: 15.000 batches per 24 uur
- **Streaming API**: 2.000 events per dag (kan worden verhoogd)
- **Composite API**: 25 subrequests per composite request

API-gebruik monitoren

Monitor je API-gebruik in Salesforce Setup > System Overview. Tajo gebruikt de Bulk API voor grote syncs om je API-limieten te sparen.

## Probleemoplossing

### Veelvoorkomende problemen

| Probleem | Oorzaak | Oplossing |
| --- | --- | --- |
| INVALID\_SESSION\_ID | Token verlopen | Ververs het OAuth-token automatisch |
| REQUEST\_LIMIT\_EXCEEDED | Daglimiet voor API bereikt | Gebruik de Bulk API of verlaag de syncfrequentie |
| FIELD\_INTEGRITY\_EXCEPTION | Verplicht veld ontbreekt | Map alle verplichte velden in de configuratie |
| DUPLICATES\_DETECTED | Duplicate rules actief | Configureer de gewenste afhandeling van duplicaten |
| INSUFFICIENT\_ACCESS | Ontbrekende objectpermissies | Geef API-toegang in het Salesforce-profiel |

### Debugmodus

Zet uitgebreide logging aan:

```yaml
connectors:
  salesforce:
    debug: true
    log_level: verbose
    log_api_calls: true
```

### Verbinding testen

```bash
tajo connectors test salesforce
# ✓ OAuth token valid
# ✓ Contacts accessible
# ✓ Leads accessible
# ✓ Accounts accessible
# ✓ Opportunities accessible
# ✓ Bulk API enabled
```

## Best practices

1. **Gebruik de Bulk API voor grote syncs** - Schakel over naar Bulk API 2.0 voor datasets van meer dan 2.000 records
2. **Implementeer Change Data Capture** - Gebruik CDC voor realtime-sync in plaats van polling
3. **Map alleen nodige velden** - Beperk API-gebruik door alleen vereiste velden te synchroniseren
4. **Handel tokenverversing af** - Implementeer automatische OAuth-tokenrefresh-logica
5. **Gebruik composite requests** - Combineer gerelateerde API-calls om het aantal requests te verminderen
6. **Test eerst in een sandbox** - Gebruik een Salesforce-sandbox-org voordat je naar productie gaat

## Beveiliging

- **OAuth 2.0** - Industriestandaard-autorisatie met meerdere grant types
- **IP-beperkingen** - Salesforce ondersteunt login-IP-ranges en trusted IP-instellingen
- **TLS 1.2+** - Alle API-communicatie is versleuteld met minimaal TLS 1.2
- **Field-level security** - Granulaire veldtoegangscontrole per profiel
- **Sessiebeheer** - Configureerbare sessie-timeout en limieten op gelijktijdige sessies

## Gerelateerde bronnen

- [Salesforce REST API-documentatie](https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm)
- [Salesforce Bulk API 2.0 Guide](https://developer.salesforce.com/docs/atlas.en-us.api_asynch.meta/api_asynch/asynch_api_intro.htm)
- [HubSpot-connector](https://tajo.io/nl/docs/connectors/crm/hubspot)
- [Customer Sync Skill](https://tajo.io/nl/docs/skills/data-sync/customer-sync)
- [Brevo Contacts API](https://tajo.io/nl/docs/contact-management)
