SwimdraftPricingSign inStart free

Lead qualification BPMN example

Lead qualification decides which enquiries deserve a salesperson's time and which should mature in a nurture campaign. Teams map it because the handover between marketing and sales is where most pipelines leak: leads sit unscored, discovery calls never get booked, and nobody agrees on what "qualified" means. A shared diagram turns those arguments into explicit gateway conditions.

This example models qualification as one pool with three lanes: Marketing, Sales development, and Account executive. Two exclusive gateways carry the logic, one for the automated score and one for the human judgement after discovery. Worth noticing: both rejection branches route into the same nurture task rather than a dead end, so no lead ever falls out of the process entirely.

Lead qualification: BPMN 2.0 diagram
Lead qualification process modelled as a BPMN 2.0 diagram

Standard BPMN 2.0 interchange XML: opens in Camunda Modeler, Signavio, Bizagi, and any other compliant tool.

The process at a glance

Starts when
Lead captured
Ends with
Lead nurtured · Opportunity created
Lanes
Marketing · Sales development · Account executive
Decisions
Score above threshold? · Fit confirmed?

How to read this diagram

Everything begins in the Marketing lane when a lead is captured from the website. A service task scores the lead automatically, and the gateway "Score above threshold?" makes the first cut. The No branch, marked as the default flow, adds the lead to a nurture campaign and closes at the "Lead nurtured" end event. The Yes branch drops into the Sales development lane, where the rep researches the account and books a discovery call.

Running the discovery call produces the evidence for the second decision. At "Fit confirmed?", the Yes branch hands the opportunity to the Account executive lane, where creating the opportunity record ends the process at "Opportunity created". The No branch, again the default, sends the lead back to the nurture task in Marketing. Two end events tell the reader that every lead finishes either as pipeline or as a nurture contact, never in limbo.

BPMN elements used

ElementCountIn this diagram
Start event1Lead captured
End event2Lead nurtured, Opportunity created
Task2Add lead to nurture campaign, Create opportunity record
User task2Research the account, Run discovery call
Service task1Score lead
Send task1Book discovery call
Exclusive gateway2Score above threshold?, Fit confirmed?
View the BPMN 2.0 XML for this diagram
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="swimdraft" exporterVersion="1.0">
  <bpmn2:collaboration id="Collaboration_1">
    <bpmn2:participant id="pool_lq" name="Lead qualification" processRef="Process_pool_lq" />
  </bpmn2:collaboration>
  <bpmn2:process id="Process_pool_lq" isExecutable="false">
    <bpmn2:laneSet id="LaneSet_pool_lq">
      <bpmn2:lane id="lane_lq_mkt" name="Marketing">
        <bpmn2:flowNodeRef>start_lq</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_lq_score</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_lq_score</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_lq_nurture</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_lq_nurture</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_lq_sdr" name="Sales development">
        <bpmn2:flowNodeRef>t_lq_research</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_lq_book</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_lq_call</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_lq_fit</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_lq_ae" name="Account executive">
        <bpmn2:flowNodeRef>t_lq_opp</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_lq_opp</bpmn2:flowNodeRef>
      </bpmn2:lane>
    </bpmn2:laneSet>
    <bpmn2:startEvent id="start_lq" name="Lead captured">
      <bpmn2:outgoing>flq1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:serviceTask id="t_lq_score" name="Score lead">
      <bpmn2:incoming>flq1</bpmn2:incoming>
      <bpmn2:outgoing>flq2</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:exclusiveGateway id="g_lq_score" name="Score above threshold?" default="flq4">
      <bpmn2:incoming>flq2</bpmn2:incoming>
      <bpmn2:outgoing>flq3</bpmn2:outgoing>
      <bpmn2:outgoing>flq4</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_lq_nurture" name="Add lead to nurture campaign">
      <bpmn2:incoming>flq4</bpmn2:incoming>
      <bpmn2:incoming>flq10</bpmn2:incoming>
      <bpmn2:outgoing>flq5</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:endEvent id="end_lq_nurture" name="Lead nurtured">
      <bpmn2:incoming>flq5</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:userTask id="t_lq_research" name="Research the account">
      <bpmn2:incoming>flq3</bpmn2:incoming>
      <bpmn2:outgoing>flq6</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:sendTask id="t_lq_book" name="Book discovery call">
      <bpmn2:incoming>flq6</bpmn2:incoming>
      <bpmn2:outgoing>flq7</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:userTask id="t_lq_call" name="Run discovery call">
      <bpmn2:incoming>flq7</bpmn2:incoming>
      <bpmn2:outgoing>flq8</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:exclusiveGateway id="g_lq_fit" name="Fit confirmed?" default="flq10">
      <bpmn2:incoming>flq8</bpmn2:incoming>
      <bpmn2:outgoing>flq9</bpmn2:outgoing>
      <bpmn2:outgoing>flq10</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_lq_opp" name="Create opportunity record">
      <bpmn2:incoming>flq9</bpmn2:incoming>
      <bpmn2:outgoing>flq11</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:endEvent id="end_lq_opp" name="Opportunity created">
      <bpmn2:incoming>flq11</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="flq1" sourceRef="start_lq" targetRef="t_lq_score" />
    <bpmn2:sequenceFlow id="flq2" sourceRef="t_lq_score" targetRef="g_lq_score" />
    <bpmn2:sequenceFlow id="flq3" name="Yes" sourceRef="g_lq_score" targetRef="t_lq_research">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="flq4" name="No" sourceRef="g_lq_score" targetRef="t_lq_nurture" />
    <bpmn2:sequenceFlow id="flq5" sourceRef="t_lq_nurture" targetRef="end_lq_nurture" />
    <bpmn2:sequenceFlow id="flq6" sourceRef="t_lq_research" targetRef="t_lq_book" />
    <bpmn2:sequenceFlow id="flq7" sourceRef="t_lq_book" targetRef="t_lq_call" />
    <bpmn2:sequenceFlow id="flq8" sourceRef="t_lq_call" targetRef="g_lq_fit" />
    <bpmn2:sequenceFlow id="flq9" name="Yes" sourceRef="g_lq_fit" targetRef="t_lq_opp">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="flq10" name="No" sourceRef="g_lq_fit" targetRef="t_lq_nurture" />
    <bpmn2:sequenceFlow id="flq11" sourceRef="t_lq_opp" targetRef="end_lq_opp" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
      <bpmndi:BPMNShape id="pool_lq_di" bpmnElement="pool_lq" isHorizontal="true">
        <dc:Bounds x="20" y="20" width="1420" height="390" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_lq_mkt_di" bpmnElement="lane_lq_mkt" isHorizontal="true">
        <dc:Bounds x="50" y="20" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_lq_sdr_di" bpmnElement="lane_lq_sdr" isHorizontal="true">
        <dc:Bounds x="50" y="150" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_lq_ae_di" bpmnElement="lane_lq_ae" isHorizontal="true">
        <dc:Bounds x="50" y="280" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="start_lq_di" bpmnElement="start_lq">
        <dc:Bounds x="112" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="94" y="101" width="73" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_score_di" bpmnElement="t_lq_score">
        <dc:Bounds x="230" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_lq_score_di" bpmnElement="g_lq_score">
        <dc:Bounds x="405" y="52" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="371" y="32" width="119" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_nurture_di" bpmnElement="t_lq_nurture">
        <dc:Bounds x="1130" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_lq_nurture_di" bpmnElement="end_lq_nurture">
        <dc:Bounds x="1312" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1295" y="101" width="71" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_research_di" bpmnElement="t_lq_research">
        <dc:Bounds x="530" y="167" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_book_di" bpmnElement="t_lq_book">
        <dc:Bounds x="680" y="167" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_call_di" bpmnElement="t_lq_call">
        <dc:Bounds x="830" y="167" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_lq_fit_di" bpmnElement="g_lq_fit">
        <dc:Bounds x="1005" y="182" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="994" y="162" width="72" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_lq_opp_di" bpmnElement="t_lq_opp">
        <dc:Bounds x="1130" y="297" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_lq_opp_di" bpmnElement="end_lq_opp">
        <dc:Bounds x="1312" y="319" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1281" y="361" width="99" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="flq1_di" bpmnElement="flq1">
        <di:waypoint x="148" y="77" />
        <di:waypoint x="230" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq2_di" bpmnElement="flq2">
        <di:waypoint x="330" y="77" />
        <di:waypoint x="405" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq3_di" bpmnElement="flq3">
        <di:waypoint x="455" y="77" />
        <di:waypoint x="510" y="77" />
        <di:waypoint x="510" y="207" />
        <di:waypoint x="530" y="207" />
        <bpmndi:BPMNLabel><dc:Bounds x="461" y="57" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq4_di" bpmnElement="flq4">
        <di:waypoint x="455" y="77" />
        <di:waypoint x="1130" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="461" y="83" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq5_di" bpmnElement="flq5">
        <di:waypoint x="1230" y="77" />
        <di:waypoint x="1312" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq6_di" bpmnElement="flq6">
        <di:waypoint x="630" y="207" />
        <di:waypoint x="680" y="207" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq7_di" bpmnElement="flq7">
        <di:waypoint x="780" y="207" />
        <di:waypoint x="830" y="207" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq8_di" bpmnElement="flq8">
        <di:waypoint x="930" y="207" />
        <di:waypoint x="1005" y="207" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq9_di" bpmnElement="flq9">
        <di:waypoint x="1055" y="207" />
        <di:waypoint x="1110" y="207" />
        <di:waypoint x="1110" y="337" />
        <di:waypoint x="1130" y="337" />
        <bpmndi:BPMNLabel><dc:Bounds x="1061" y="187" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq10_di" bpmnElement="flq10">
        <di:waypoint x="1055" y="207" />
        <di:waypoint x="1110" y="207" />
        <di:waypoint x="1110" y="77" />
        <di:waypoint x="1130" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="1061" y="213" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="flq11_di" bpmnElement="flq11">
        <di:waypoint x="1230" y="337" />
        <di:waypoint x="1312" y="337" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Frequently asked questions

Why are Marketing and Sales lanes in one pool rather than two pools?

Both teams work inside the same organisation on the same process instance, so lanes in a single pool are correct. Pools imply independent participants that communicate only by message flows. Splitting marketing and sales into pools would force artificial message flows for what is really a simple handover between colleagues.

Why do both No branches point at the same nurture task?

BPMN allows several sequence flows to target one activity, which acts as an implicit merge. Reusing the nurture task keeps the model compact and shows that a failed score and a failed discovery call have the same outcome. If the two rejection paths needed different treatment, you would split them into separate tasks.

How would I add a service level timer to this model?

Attach an intermediate timer event on the path before the discovery call, or a boundary timer on the "Book discovery call" task, set to your response target. When the timer fires you can route to an escalation task in the Sales development lane, which makes slow follow up visible instead of silently tolerated.

Related BPMN examples

Generate your own version of this diagram

Describe how the process works in your organisation: plain English, meeting notes, a transcript, or a spreadsheet. Swimdraft turns it into a spec-validated BPMN 2.0 diagram you can edit in the browser and export as .bpmn, SVG, or PNG.

Start free

No credit card required