Skip to main content
The MQL to SQL handoff is the step where marketing passes a qualified lead to sales and a rep decides whether to work it. Default runs the handoff as a workflow. When a lead reaches MQL in Salesforce or HubSpot, the workflow fills in missing data, picks a rep, writes the owner to the CRM, and tells the rep in Slack. The rep then accepts or rejects the lead on the CRM record.

MQL vs SQL

A marketing-qualified lead (MQL) is a lead that marketing judges ready for sales, based on fit and engagement criteria your teams agree on, such as a demo request or a lead score above a threshold. A sales-qualified lead (SQL) is a lead that a rep has reviewed and accepted as worth pursuing. Marketing sets the MQL status, usually automatically, and the rep sets the SQL status in the CRM.

The MQL handoff at a glance

Setup for the MQL handoff

Fire the workflow once per MQL

The Condition on CRM Record Updated checks the record as it is after each update. It has no “changed to” operator and does not remember the previous value, so a condition on the status alone matches every later update to that lead, including the owner this workflow writes. Use the second form. In the condition builder, Fields Updated is the list of fields the update changed, and the record’s own fields are under Object Fields. Together they mean “changed to MQL”.
  • A lead that returns to MQL runs again. A lead that leaves MQL, for example when a rep recycles it, and later reaches MQL again starts a new run.
  • Salesforce Leads created at MQL fire a different trigger. A Lead created with Lead Status already set to MQL fires CRM Record Created, not CRM Record Updated. If forms or imports create Leads at MQL, build a second workflow with the same nodes that starts from CRM Record Created, with the condition Lead Status equals MQL.

Build the MQL handoff workflow

This example hands every Salesforce Lead that changes to MQL to the next sales development rep (SDR) in a queue named Inbound SDRs, writes the SDR as the owner, and sends them a Slack message.
1

Add the trigger

In Workflows, create a workflow and add the CRM Record Updated trigger. Set CRM to Salesforce and Record to Lead.
2

Fire only when the status changes to MQL

Under Condition, add 2 conditions joined with And: Fields Updated contains any of Lead Status, and, from Object Fields, Lead Status equals MQL.
3

Fill gaps with enrichment

Add Enrich Data. Set Enrichment target to Both and choose a provider or waterfall in Enrichment source. Default takes the Lead’s email from the trigger, so you can leave Email / Domain (optional) empty.
4

Pick the rep

Add Round-Robin and set Queue to Inbound SDRs. The queue’s policy picks the rep and passes them to later nodes as Latest assigned user.
5

Write the owner

Add Update Record. Set Platform to Salesforce, Record Type to Lead, and Record to update to the Lead’s record ID from the trigger. Under Fields, set Owner ID to Latest assigned user.To mark the handoff, also set Lead Status to the value your team uses for a lead waiting on its rep, for example Assigned. That write changes the status, but not to MQL, so it does not start the workflow again.
6

Tell the rep

Add Send Slack Message. Set Recipients to Latest assigned user, and write a Message with the lead’s name, company, and enriched details. Type {{ to insert them. To keep a team record of handoffs, also pick a channel in Slack channels.
7

Add the lead to the rep's sequence (optional)

Add a sequencing node such as Add to Outreach Sequence, with Sending mailbox set to Latest assigned user. See Send routed leads to sales sequences.
8

Test and publish

Select Test and choose the trigger. In the sample, fill in the Email and Id of a test Lead, set Status to MQL, and add "Status" to fieldsUpdated. Select Run Test, then check the owner in Salesforce and the message in Slack. Then select Publish and check that the status next to the deployment switch reads Live. A new workflow goes live when you first publish it. If the status reads Paused, turn the switch on.
A test performs real actions. It updates the Lead in Salesforce, counts the routing assignment, sends the Slack message, and can enroll the lead in a sequence. Use a test Lead.
To route by territory, segment, or company size, use Rules of Engagement in place of Round-Robin and set Ruleset to your published ruleset. Keep it after Enrich Data so the rules can use the enriched company size. Connect Resolved to Update Record, and set Owner ID and Recipients to Latest resolved user. Resolved can arrive without a user when the matched queue has no active members, so check that Latest resolved user exists with a Multi-Branch node first. Send Else, which runs when no rule picks an owner, to a Round-Robin node on a catch-all queue, followed by its own Update Record and Send Slack Message that use Latest assigned user, because Latest resolved user is empty on that path. See What the workflow receives from Rules of Engagement.

Salesforce and HubSpot differences

In a HubSpot condition, the value list shows HubSpot’s internal names for lifecycle stages, so Marketing Qualified Lead appears as marketingqualifiedlead. In a HubSpot test sample, fill in email and hs_object_id, set lifecyclestage, and add "lifecyclestage" to fieldsUpdated.

Hand off leads that reach MQL by score

Many teams set MQL when a lead score crosses a threshold. Pick the path that matches where the score lives:
  • Your CRM keeps the score. Build a second, small workflow on CRM Record Updated with 3 conditions: Fields Updated contains any of your score field, the score is at least your threshold, for example 80, and the status is any of the values before MQL, such as Open - Not Contacted in Lead Status, or lead in a HubSpot Lifecycle Stage. Its only node is Update Record, which sets the status to your MQL value. That status change starts the handoff workflow above. The status condition stops later score changes from running it again once the lead has moved on.
  • Marketo keeps the score. A Marketo smart campaign calls a Default webhook when the score crosses your threshold, and the workflow starts from Incoming Webhook. See Route Marketo leads when they reach a lead score threshold.
  • Default computes the score. A workflow can score or tier the lead and write the result to a CRM field. In that same workflow, set the MQL status with Update Record, or route the lead right away. See Lead scoring with Default.

Where the rep accepts or rejects the lead

The SQL decision lives on the CRM record, so reports on MQL to SQL conversion use your CRM’s own data. The rep accepts or rejects the lead there: To act on a rejection, build another workflow on CRM Record Updated with Fields Updated contains any of Lead Status, and Lead Status equals your rejected value. For example, post the lead to your marketing operations channel with Send Slack Message, or add it to a nurture sequence. To follow up when the rep doesn’t act, add these nodes to the end of the Salesforce handoff workflow:
  1. Time Delay, set to your response window, for example 4 hours.
  2. Match Record with CRM set to Salesforce and Record set to Lead. Under Match Details, match Lead ID to the Lead’s record ID from the trigger, so the workflow reads the Lead’s current status.
  3. Multi-Branch with a branch where the matched Lead’s Lead Status still has the handoff value you set in Update Record, for example Assigned. On that branch, message the rep’s manager with Send Slack Message, or route again with Round-Robin and Update Record.
In HubSpot, match the Contact instead and check the property you set in Update Record.

Check that the handoff worked

  • Runs: open the workflow, select Runs, and open a run. Round-Robin shows the rep it picked, Update Record shows the fields it wrote, and Send Slack Message shows who received the message. See Run logs.
  • Assignments: in Routing, select Assignments, then Object assignments, to see each routing decision and the scores behind it. See Routing logs.
  • The CRM record: the Lead or Contact shows the new owner, and the handoff status if you wrote one.
An update that does not match the Condition starts no run, so it leaves nothing in Runs. To see which condition failed, test with a sample of that record: the test lists the failed conditions.

Troubleshoot the MQL handoff

Related: Lead routing software from Default