Marketo ⇄ Salesforce Integration Playbook: MQL→SQL Handoff, Program/Campaign Sync, and Revenue Guardrails
Published by Bles Software, a custom software and AI company based in Yehud-Monoson, Israel, building web apps, AI agents and API integrations for clients in Israel, the US, the UK and the EU.
A well‑run Marketo ⇄ Salesforce integration is the backbone of B2B demand engines. When Program membership and Campaign history are coherent, SDRs see the right context, AEs trust pipeline sources, and marketing can defend budget with pipeline and revenue—not clicks. This playbook lays out a practical blueprint for data contracts, MQL→SQL handoff, Program/Campaign sync, activity capture, and the guardrails that keep your revenue data clean over time.
Outcomes and Non‑Goals
Outcomes:
- A single, documented definition of MQL, SAL, and SQL with clear system authority by stage.
- Consistent Marketo Program ⇄ Salesforce Campaign sync with reliable member statuses and timestamps.
- Predictable task creation and routing that meets SLA without duplicate or stale tasks.
Non‑goals:
- Replicating every field across systems.
- Pushing granular web analytics into Salesforce (keep that in Marketo/GA4/BI).
Operating Model and Environments
- Ownership: Marketing Ops administers Marketo; Sales Ops administers Salesforce; RevOps owns the integration policy.
- Environments: Use a Salesforce sandbox and a Marketo test workspace when possible. If a second Marketo instance isn’t available, create test Programs and static lists for safe trials.
- Change control: Use a weekly change window; document mappings, workflows, and Campaign hierarchy updates. Track every change that touches mapped fields.
Data Contract: Objects and Keys
Objects and match keys:
- Person: Marketo Lead ⇄ Salesforce Lead/Contact. Primary key: canonical lowercase email; secondary: Salesforce ID when back‑synced; maintain a Marketo Person GUID as a persistent synthetic key.
- Company/Account: Match on normalized domain; fallback to Company Name + Country. Avoid auto‑merge on name alone.
- Opportunity: Created in Salesforce; optionally mirrored in Marketo with a one‑way sync of key fields (Stage, Amount, Close Date, Primary Campaign Source).
Email is a powerful but imperfect natural key. Support aliasing (e.g., plus‑addressing) via normalization and store secondary emails without using them as automatic merge triggers.
Lifecycle, Qualification, and Handoff
Define lifecycle stages with explicit owners and triggers:
- MQL (Marketo authoritative): achieved when score + fit + intent criteria are met. Stamp MQL Date, MQL Reason, and Routing Hint fields. Create or update a Salesforce Lead with mapped fields and create an SLA Task.
- SAL (Salesforce authoritative): SDR acknowledges and begins work; Lead Status transitions to Accepted/Working. Marketo mirrors via mapped field.
- SQL (Salesforce authoritative): Opportunity created. Marketo receives Opportunity fields to align downstream nurture and cohort analytics.
Document recycling: if a Lead is not progressed within SLA or is disqualified, set Recycled/Disqualified fields with reasons; Marketo resumes nurture with a cooling‑off period.
Field Mapping and Directionality
Group fields by category and specify directionality:
- Identity: Email (Marketo → SFDC), Marketo GUID (Marketo → SFDC), SFDC ID (SFDC → Marketo).
- Routing: Territory, SDR Owner, Segment (SFDC → Marketo except during initial creation when Marketo proposes; Salesforce has final authority).
- Qualification: Score, MQL Reason (Marketo → SFDC); Lead Status (SFDC → Marketo).
- Consent: Do Not Email, Unsubscribe Reason (Marketo → SFDC); Do Not Call (SFDC → Marketo).
- Attribution: First Touch, Last Touch, UTMs (Marketo → SFDC mirrored fields for reporting; don’t edit in SFDC).
Two‑way fields should be rare (phone, title) and defined with conflict winners (e.g., SFDC wins for Title).
Program ⇄ Campaign Sync
Program/Campaign alignment is where many stacks succeed or fail. Implement the following:
- One‑to‑one mapping: For each Marketo Program that represents a marketable tactic (webinar, event, content syndication), create a corresponding Salesforce Campaign with a matching name and parent hierarchy.
- Member statuses: Define a tight list of statuses (e.g., Sent/Invited, Registered, Attended, No‑Show, Engaged). Keep the list short and reusable. Mirror exactly in Salesforce Campaign Member Statuses.
- Timestamps: Capture First Responded Date and Last Responded Date; ensure Marketo writes meaningful Responded flags that match your definition (e.g., Registered counts as Responded for webinars).
- Primary Campaign Source: When Opportunities are created, set Primary Campaign Source based on the most meaningful Responded Program within a lookback window, not simply the last touch.
Keep Campaign hierarchies simple: a Year → Channel → Program structure often provides the best roll‑up without exploding counts.
Activity Capture and Sales Context
SDRs and AEs need context without noise:
- Email/engagement: Sync meaningful Marketo activities into Salesforce as Tasks with succinct subjects (e.g., “Engaged: Webinar – Data Quality 101”). Avoid syncing every click.
- Interesting moments: Use concise, human‑readable descriptions (e.g., “Viewed pricing page”); set a cap on daily writes to prevent flooding.
- UTMs: Store original and latest UTM values on the person; write to SFDC mirrored fields for analytics.
Routing, Tasking, and SLAs
On MQL, Marketo should propose ownership and create a Salesforce Task for SDRs with due dates aligned to your SLA (e.g., 24 hours). Salesforce rules finalize owner and territory. Avoid creating duplicate tasks on incremental updates; use idempotent external IDs on Task creation if possible.
Deduplication and Conversion
- Person merge: Use email as primary key; when a Salesforce Contact already exists, suppress creation of a new Lead. Instead, associate Program responses to the existing Contact and, optionally, create a Task for the owner.
- Lead conversion: Codify when Leads convert to Contacts (e.g., SQL or Account identified). Ensure conversion preserves Campaign history and ownership.
- Company merge: Never auto‑merge companies by name; use domain and explicit human review for corner cases.
Opportunity Influence and Attribution
Marketo can calculate multi‑touch program influence; Salesforce can store Primary Campaign Source and Campaign Influence models. Choose one place to calculate multi‑touch to avoid conflicting reports. If you use Marketo’s RCE/Measure (or a BI model), keep Salesforce focused on operational attribution (Primary Campaign Source + auto influence). Publish a standard report pack so finance and marketing agree on numbers.
Testing, Cutover, and Monitoring
Testing steps:
- Seed: Load test people and run through key scenarios (event registration, content download, demo request, recycled lead, disqualify). Validate Program and Campaign statuses.
- Pilot: Enable sync for a single segment; verify Task creation, SLA adherence, and Campaign membership.
- Cutover: Freeze Campaign hierarchy edits during cutover; backfill recent Program responses.
Monitoring:
- Sync errors: Track error rate and top failing fields. Alert when errors spike.
- Campaign drift: Weekly check that Program/Campaign status dictionaries still match.
- SLA adherence: Measure time‑to‑first‑touch for MQLs and surface violations.
Guardrails and Change Management
- Contract first: Update the field mapping contract before implementing changes.
- Least privilege: Limit who can create Campaign Statuses in Salesforce.
- Backfill controls: Large Program backfills should be queued in batches to avoid hitting API limits.
- Documentation: Keep Program naming conventions and hierarchy rules in a shared handbook.
FAQ
How many Program statuses are too many?
Four to six reusable statuses per channel is a healthy ceiling. More than that usually indicates status semantics doing reporting work that should be handled in analytics, not in the CRM.
Should we sync every Marketo activity to Salesforce?
No. Sync only meaningful milestones—form submissions, event registrations, attended, and explicit “interesting moments.” Leave clicks/opens in Marketo; bring context to sales, not noise.
Where should MQL logic live—Marketo or Salesforce?
Marketo should calculate MQL using fit and intent with a timestamp and reason. Salesforce should accept and enforce SLAs via routing and tasks. Duplicating MQL logic in both systems creates drift.
Who should own Primary Campaign Source on Opportunities?
Salesforce. Marketo can propose a candidate based on Responded Programs, but Salesforce should set Primary Campaign Source at creation (or within a defined window) to keep reporting consistent.
How do we prevent duplicate tasks for the same MQL?
Use idempotent external IDs or derive a composite key (person ID + event). Before creating a Task, check if an open MQL task exists for that person.
What’s the best approach to recycled leads?
Stamp Recycled Date and Reason, remove from SDR queues, and resume nurture with suppression windows. Don’t erase the first MQL date; attribute separately for re‑MQl events.
More RevOps Playbooks from Bles Software
- Attribution & Pipeline Reporting Setup | Bles Software
- Data Mapping Checklist (Leads/Contacts/Opportunities) | Bles Software
- Field Governance & Picklists | Bles Software
- Sync Rules: Deduping, Owners, Lifecycle | Bles Software
- HubSpot ↔ QuickBooks Integration Playbook | Bles Software
- Errors & Retries: Top Fixes | Bles Software
- HubSpot ↔ Salesforce Integration: Executive Guide | Bles Software
- HubSpot ↔ Salesforce: Cost & Timeline Drivers | Bles Software
- Daily AI Roundup: AI agent, model and enterprise AI news