Executive Summary
The Salesforce Sales Cloud ↔ Adobe Marketo Engage integration forms the backbone of modern B2B revenue operations, bridging CRM deal intelligence with marketing automation to create a closed-loop demand engine. Salesforce serves as the system of record for Accounts, Contacts, Opportunities, and pipeline data, while Marketo owns lead nurture, scoring, and campaign execution — the two platforms must stay in precise sync to avoid duplicate records, scoring drift, and broken attribution chains.
⚡ Accelerate your integration roadmap
Stop wrestling with API rate limits, undocumented endpoints, and unreliable webhooks. Our engineering team designs and deploys resilient, enterprise-grade integration architectures in days. Prefer to build it in-house? Leverage our recommended middleware platform.
This architecture uses OAuth 2.0 with JWT-bearer flow on the Salesforce side and Client Credentials (OAuth 2.0) on the Marketo side, with a stateless middleware layer (e.g., MuleSoft, Boomi, or a custom Node.js service) handling transformation, deduplication, and retry logic. Marketo’s published daily quota of 50,000 API calls (resettable) and a rate limit of 100 calls per 20 seconds are the primary throughput constraints that must be respected in bulk sync scenarios.
Logical Architecture & Data Flow
Architecture Component Breakdown
/services/data/vXX.X/sobjects/. Supports composite requests and bulk queries via SOQL./rest/v1/leads.json. Supports upsert by email or custom deduplication fields.Authentication Architecture
Salesforce uses OAuth 2.0 with the JWT Bearer Token flow for server-to-server integrations — the middleware signs a JWT with an RSA-256 private key, submits it to the Salesforce token endpoint at https://login.salesforce.com/services/oauth2/token, and receives a short-lived access token (no refresh token required in this flow). Scopes must include api and refresh_token if the Web Server flow is preferred instead. Marketo uses the OAuth 2.0 Client Credentials grant: the middleware calls https://<munchkin>.mktorest.com/identity/oauth/token?grant_type=client_credentials&client_id=<id>&client_secret=<secret> to obtain an access token valid for 3,600 seconds, which must be passed as an Authorization: Bearer <token> header on every subsequent call. Both tokens should be cached and refreshed proactively before expiry to avoid failed requests in high-throughput scenarios.
Data Flow Diagram
graph LR A["Salesforce\nSales Cloud"] -->|"Record Change"| B["Outbound Msg\n/ Polling"] B -->|"Transform"| C["Middleware\niPaaS"] C -->|"Upsert Lead"| D["Marketo\nLead DB API"] D -->|"Score / Activity"| E["Marketo\nAsset API"] E -->|"MQL Sync"| C C -->|"Update Contact"| A
Enterprise Use Cases
Use Case 1: Lead-to-Contact Promotion Sync
GET /services/data/v59.0/sobjects/Contact/<id> to retrieve the new Contact record, then issues a POST /rest/v1/leads.json upsert to Marketo with the updated sfdc_contact_id and lead_status fields, advancing the Marketo lifecycle stage from MQL to SQL and triggering downstream nurture suppression smart campaigns.Use Case 2: Marketo MQL Push to Salesforce
GET /rest/v1/leads.json?filterType=updatedAt&filterValues=<range> on a scheduled interval, identifies newly qualified leads, and calls POST /services/data/v59.0/sobjects/Lead/ to create or upsert the record in Salesforce with LeadSource, Lead_Score__c, and Last_Interesting_Moment__c populated. A Salesforce assignment rule then routes the lead to the appropriate SDR territory queue.Use Case 3: Opportunity Stage → Marketo Program Suppression
GET /services/data/v59.0/sobjects/Opportunity/<id> to retrieve the associated Contact ID, then issues a POST /rest/v1/leads/programs/members.json to remove the person from active acquisition programs in Marketo and enroll them in a post-sale or re-engagement track respectively, preventing revenue-harmful drip emails to existing customers.Use Case 4: Marketo Email Engagement Activity Writeback
GET /rest/v1/activities.json?activityTypeIds=1,2,3&nextPageToken=<token> (Marketo activity type IDs for email open, click, form fill) and maps each event to a Salesforce Task record via POST /services/data/v59.0/sobjects/Task/, setting WhoId to the associated Contact and Subject to the Marketo activity description. This gives AEs full marketing-touch visibility inside Salesforce without requiring a Marketo Sales Insight license for every rep.Use Case 5: Account-Level Firmographic Enrichment
GET /services/data/v59.0/sobjects/Account/<id> and calls Marketo’s POST /rest/v1/companies.json to create or update the Company record with annualRevenue, numberOfEmployees, industry, and billingCity. Marketo Smart Lists targeting specific firmographic segments then automatically include contacts belonging to the new account, enabling ABM program enrollment without manual segmentation updates.Standard API Field Mapping
| Entity | Salesforce Sales Cloud Field | Method | Adobe Marketo Engage Field | Method | Type |
|---|---|---|---|---|---|
| Lead / Person | Lead.Email |
GET | leads.email |
POST | string |
| Lead / Person | Lead.FirstName |
GET | leads.firstName |
POST | string |
| Lead / Person | Lead.LastName |
GET | leads.lastName |
POST | string |
| Lead / Person | Lead.Company |
GET | leads.company |
POST | string |
| Lead / Person | Lead.Status |
PATCH | leads.leadStatus |
PATCH | picklist |
| Contact | Contact.MobilePhone |
GET | leads.mobilePhone |
POST | string |
| Contact | Contact.AccountId |
GET | leads.sfdcAccountId |
PATCH | string (ID) |
| Opportunity | Opportunity.StageName |
GET | leads.sfdcOpptyStage |
PATCH | picklist |
| Account | Account.AnnualRevenue |
GET | companies.annualRevenue |
POST | currency |
| Account | Account.Industry |
GET | companies.industry |
POST | string |
| Activity | Task.Subject |
POST | activities.activityTypeId |
GET | integer |
| Lead / Person | Lead.Score__c (custom) |
PATCH | leads.leadScore |
GET | integer |
Limitations & Rate Limits
Salesforce Sales Cloud Rate Limits
| Constraint | Limit | Detail | Mitigation |
|---|---|---|---|
| API Request Limit (24h) | DATA_UNAVAILABLE | Varies by org edition and user licenses; check Setup → System Overview | Use Bulk API 2.0 for large datasets; monitor via API Usage event log |
| Concurrent API Requests | 25 long-running / unlimited short | Requests >20s count as long-running against the concurrent limit | Design queries to return in <20s; use async Bulk API for large payloads |
| SOQL Query Rows | 50,000 rows per query | Applies to synchronous SOQL; Bulk API supports up to 100M rows | Paginate with nextRecordsUrl; use Bulk API 2.0 for mass export |
| Outbound Message Delivery | DATA_UNAVAILABLE | Messages retried for 24h; no published per-second delivery cap | Ensure middleware endpoint responds with ACK within 30s to prevent retries |
Adobe Marketo Engage Rate Limits
| Constraint | Limit | Detail | Mitigation |
|---|---|---|---|
| Daily API Call Quota | 50,000 calls/day | Resets at 12:00 AM CST; extendable via account manager request | Batch upserts using multi-record /rest/v1/leads.json payloads (up to 300 records per call) |
| Rate Limit | 100 calls / 20 seconds | Per Marketo instance; applies across all API users combined | Implement token-bucket throttle in middleware; spread load across time windows |
| Concurrent Calls | 10 concurrent calls | Maximum simultaneous in-flight requests per instance | Use a semaphore/concurrency limiter in middleware; queue excess requests |
| Request Body Size | 1 MB (10 MB bulk) | Standard REST calls capped at 1MB URI + body; bulk import allows 10MB | Split large payloads; use Bulk Lead Import API for initial loads >5,000 records |
| Access Token TTL | 3,600 seconds | Tokens expire after 1 hour; no refresh token — re-authenticate via Client Credentials | Cache token with TTL timer; re-request at 55-minute mark proactively |
Critical Engineering Constraints
/rest/v1/leads.json?filterType=updatedAt or activity streams, introducing latency of minutes rather than seconds. Design SLAs accordingly.Official Documentation
Salesforce
Salesforce REST API Developer Guide
VIEW DOCS →
Adobe Marketo
Marketo REST API — Getting Started
VIEW DOCS →
Adobe Marketo
Lead Database API Reference (mapi)
VIEW DOCS →
Adobe Marketo
Asset API Reference
VIEW DOCS →
Salesforce
Connected Apps & OAuth 2.0 Configuration Guide
VIEW DOCS →
Adobe Marketo
REST API Error Codes Reference
VIEW DOCS →