WhatsApp Lead Qualification Flow Template

A two-screen flow that asks what the prospect needs, their budget band, timeline and role in the decision, then collects name, email, company and how they want to be contacted. Your sales team gets a scored, sortable lead instead of a "hi, how much?" message.

2 screens 8 fields returned Flow JSON 7.2 Lead generation Agencies, Consultants, B2B services, Aesthetics clinics

Use Try it to fill the flow and see the exact response_json it returns.

lead-qualification.json Open in Flow Builder
{
  "version": "7.2",
  "screens": [
    {
      "id": "QUALIFY",
      "title": "About your project",
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_qualify",
            "children": [
              {
                "type": "TextHeading",
                "text": "What can we help you with?"
              },
              {
                "type": "TextBody",
                "text": "A few quick answers help us match you with the right specialist and a proposal that fits."
              },
              {
                "type": "RadioButtonsGroup",
                "name": "need",
                "label": "What do you need?",
                "data-source": [
                  {
                    "id": "website_build",
                    "title": "New website or redesign",
                    "description": "Design, build and launch, including copy and hosting setup"
                  },
                  {
                    "id": "paid_ads",
                    "title": "Paid ads management",
                    "description": "Meta, Google or LinkedIn campaigns with monthly reporting"
                  },
                  {
                    "id": "seo_content",
                    "title": "SEO and content",
                    "description": "Technical audit, keyword plan and ongoing articles"
                  },
                  {
                    "id": "automation",
                    "title": "Sales automation",
                    "description": "CRM setup, WhatsApp and email workflows, lead routing"
                  },
                  {
                    "id": "other_need",
                    "title": "Something else",
                    "description": "Tell us more on the call"
                  }
                ],
                "required": true
              },
              {
                "type": "RadioButtonsGroup",
                "name": "budget_range",
                "label": "Budget range",
                "data-source": [
                  {
                    "id": "budget_under_2k",
                    "title": "Under $2,000"
                  },
                  {
                    "id": "budget_2k_10k",
                    "title": "$2,000 - $10,000"
                  },
                  {
                    "id": "budget_10k_25k",
                    "title": "$10,000 - $25,000"
                  },
                  {
                    "id": "budget_25k_plus",
                    "title": "$25,000 or more"
                  },
                  {
                    "id": "budget_unsure",
                    "title": "Not sure yet"
                  }
                ],
                "required": true
              },
              {
                "type": "RadioButtonsGroup",
                "name": "timeline",
                "label": "When do you want to start?",
                "data-source": [
                  {
                    "id": "timeline_this_month",
                    "title": "This month"
                  },
                  {
                    "id": "timeline_1_3_months",
                    "title": "In 1 to 3 months"
                  },
                  {
                    "id": "timeline_later",
                    "title": "Later than 3 months"
                  },
                  {
                    "id": "timeline_researching",
                    "title": "Just researching"
                  }
                ],
                "required": true
              },
              {
                "type": "Dropdown",
                "name": "decision_role",
                "label": "Your role in the decision",
                "data-source": [
                  {
                    "id": "role_decision_maker",
                    "title": "I make the final decision"
                  },
                  {
                    "id": "role_influencer",
                    "title": "I recommend to others"
                  },
                  {
                    "id": "role_researcher",
                    "title": "I am gathering information"
                  }
                ],
                "required": true
              },
              {
                "type": "Footer",
                "label": "Continue",
                "on-click-action": {
                  "name": "navigate",
                  "next": {
                    "type": "screen",
                    "name": "CONTACT"
                  },
                  "payload": {}
                }
              }
            ]
          }
        ]
      }
    },
    {
      "id": "CONTACT",
      "title": "How to reach you",
      "terminal": true,
      "data": {},
      "layout": {
        "type": "SingleColumnLayout",
        "children": [
          {
            "type": "Form",
            "name": "form_contact",
            "children": [
              {
                "type": "TextSubheading",
                "text": "Who should we get back to?"
              },
              {
                "type": "TextInput",
                "name": "full_name",
                "label": "Full name",
                "input-type": "text",
                "required": true
              },
              {
                "type": "TextInput",
                "name": "work_email",
                "label": "Work email",
                "input-type": "email",
                "required": true,
                "helper-text": "We send the proposal and case studies here"
              },
              {
                "type": "TextInput",
                "name": "company_name",
                "label": "Company",
                "input-type": "text"
              },
              {
                "type": "RadioButtonsGroup",
                "name": "contact_method",
                "label": "Best way to follow up",
                "data-source": [
                  {
                    "id": "contact_whatsapp",
                    "title": "WhatsApp message"
                  },
                  {
                    "id": "contact_phone_call",
                    "title": "Phone call"
                  },
                  {
                    "id": "contact_video_call",
                    "title": "Video call"
                  },
                  {
                    "id": "contact_email",
                    "title": "Email"
                  }
                ],
                "required": true
              },
              {
                "type": "TextCaption",
                "text": "A specialist will reply within one business day."
              },
              {
                "type": "Footer",
                "label": "Submit",
                "on-click-action": {
                  "name": "complete",
                  "payload": {
                    "need": "${screen.QUALIFY.form.need}",
                    "budget_range": "${screen.QUALIFY.form.budget_range}",
                    "timeline": "${screen.QUALIFY.form.timeline}",
                    "decision_role": "${screen.QUALIFY.form.decision_role}",
                    "full_name": "${form.full_name}",
                    "work_email": "${form.work_email}",
                    "company_name": "${form.company_name}",
                    "contact_method": "${form.contact_method}"
                  }
                }
              }
            ]
          }
        ]
      }
    }
  ]
}

Raw JSON for scripts: curl -s https://whautomate.com/whatsapp-flow-templates/lead-qualification.json

Import in 60 seconds
  1. Copy the JSON above (or edit it first in the Flow Builder).
  2. In WhatsApp Manager, open Account tools > Flows, create a flow and choose Lead generation as the category.
  3. Paste into the JSON editor, check the preview, then Publish.
  4. Send it with the Flow ID, as an interactive message or through a template's Flow button.

Not technical? Skip the JSON and send it from Whautomate with a drag-and-drop editor.

About this lead qualification flow

Inbound WhatsApp enquiries for high-ticket services usually open with "how much does it cost?". Answering that well depends on scope, budget, urgency and who is asking, and a sales rep can spend a day of back-and-forth finding out that the lead is a student researching for a class project. This flow asks the four BANT-style questions up front, so every conversation your team picks up already has context.

The first screen is the qualification: the need as a radio list with plain-language descriptions, a budget band, a timeline and the person's role in the buying decision. Every answer returns a stable item id, which makes it trivial to score leads in your webhook, for example budget_25k_plus plus timeline_this_month plus role_decision_maker goes straight to a senior closer. The second screen captures name, work email, an optional company and a preferred contact method.

Budget ranges are phrased as bands rather than an open number field on purpose. People skip or fudge an exact figure, but most will tap a band, and bands map cleanly onto your pricing tiers. Adjust the currency and thresholds to your market before you publish.

Fields this flow returns

When the customer taps the final button, the complete action sends these keys back in response_json. Fields from earlier screens are pulled in with global references (${screen.SCREEN_ID.form.field}), so nothing is lost between screens.

KeyComponentScreenRequiredReturnsExample
need
website_build, paid_ads, seo_content, automation, other_need
RadioButtonsGroup QUALIFY Yes item id "paid_ads"
budget_range
budget_under_2k, budget_2k_10k, budget_10k_25k, budget_25k_plus, budget_unsure
RadioButtonsGroup QUALIFY Yes item id "budget_10k_25k"
timeline
timeline_this_month, timeline_1_3_months, timeline_later, timeline_researching
RadioButtonsGroup QUALIFY Yes item id "timeline_this_month"
decision_role
role_decision_maker, role_influencer, role_researcher
Dropdown QUALIFY Yes item id "role_decision_maker"
full_name TextInput CONTACT Yes string "Jordan Reyes"
work_email TextInput (email) CONTACT Yes string "[email protected]"
company_name TextInput CONTACT No string "Brightlane Outdoor"
contact_method
contact_whatsapp, contact_phone_call, contact_video_call, contact_email
RadioButtonsGroup CONTACT Yes item id "contact_video_call"

Optional fields the customer leaves empty may be missing from response_json or arrive empty. Treat every optional key as nullable in your handler.

No developer needed

Send the Lead Qualification flow without touching code

You do not need to be technical to use WhatsApp Flows. Connect your WhatsApp number, set the flow up in our drag-and-drop editor and send it to customers in a few clicks. No JSON, no API calls, no WhatsApp Manager.

1

Connect your number

Log in with Facebook and connect your WhatsApp number in a few minutes. No API keys or servers to set up.

2

Set up the flow

Start from a ready-made form or import this one, then drag fields in, change the wording and try it on a live phone preview. Click Publish when it looks right.

3

Send it anywhere

Send it from any chat in the Team Inbox, on web or mobile, send it automatically from an automation, or broadcast it to a list.

4

Get the answers

Every answer is saved on the customer's profile and chat, and your team can be notified the moment a form comes in.

7-day free trial, no credit card required.

Sample webhook payload (nfm_reply)

This is what your webhook receives when a customer submits the flow. response_json is a JSON string: parse it, then match flow_token to the record you created when you sent the message. The customer's WhatsApp number is in messages[0].from.

response_json (parsed)
{
  "flow_token": "bk_8f2c41",
  "need": "paid_ads",
  "budget_range": "budget_10k_25k",
  "timeline": "timeline_this_month",
  "decision_role": "role_decision_maker",
  "full_name": "Jordan Reyes",
  "work_email": "[email protected]",
  "company_name": "Brightlane Outdoor",
  "contact_method": "contact_video_call"
}
POST your-webhook (full event)
{
  "object": "whatsapp_business_account",
  "entry": [
    {
      "id": "WHATSAPP_BUSINESS_ACCOUNT_ID",
      "changes": [
        {
          "field": "messages",
          "value": {
            "messaging_product": "whatsapp",
            "metadata": {
              "display_phone_number": "15550001234",
              "phone_number_id": "PHONE_NUMBER_ID"
            },
            "contacts": [
              {
                "profile": {
                  "name": "Alex Morgan"
                },
                "wa_id": "14155550123"
              }
            ],
            "messages": [
              {
                "context": {
                  "from": "15550001234",
                  "id": "wamid.SENT_FLOW_MESSAGE_ID"
                },
                "from": "14155550123",
                "id": "wamid.INCOMING_MESSAGE_ID",
                "timestamp": "1760000000",
                "type": "interactive",
                "interactive": {
                  "type": "nfm_reply",
                  "nfm_reply": {
                    "name": "flow",
                    "body": "Sent",
                    "response_json": "{\"flow_token\":\"bk_8f2c41\",\"need\":\"paid_ads\",\"budget_range\":\"budget_10k_25k\",\"timeline\":\"timeline_this_month\",\"decision_role\":\"role_decision_maker\",\"full_name\":\"Jordan Reyes\",\"work_email\":\"[email protected]\",\"company_name\":\"Brightlane Outdoor\",\"contact_method\":\"contact_video_call\"}"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  ]
}

Deploy with the WhatsApp Cloud API

Prefer code over WhatsApp Manager? Save the template as lead-qualification.json and run these calls with a system user token that has whatsapp_business_management and whatsapp_business_messaging permissions.

1. Create the flow

bash
curl -X POST 'https://graph.facebook.com/v23.0/{WABA_ID}/flows' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d '{"name": "lead_qualification", "categories": ["LEAD_GENERATION"]}'
# => {"id": "{FLOW_ID}"}

2. Upload the Flow JSON

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/assets' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -F '[email protected];type=application/json' \
  -F 'name=flow.json' \
  -F 'asset_type=FLOW_JSON'
# => {"success": true, "validation_errors": []}

3. Publish it

bash
curl -X POST 'https://graph.facebook.com/v23.0/{FLOW_ID}/publish' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}'

Publishing is permanent: a published flow cannot be edited. To change it later, create a new flow (or clone it with clone_flow_id) and publish the new version.

4. Send it to a customer

Inside the 24-hour customer service window, send an interactive flow message. Outside it, create a message template with a Flow button that points to this flow, and send the template instead.

send-lead-qualification.json
{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "14155550123",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Let us point you to the right person"
    },
    "body": {
      "text": "Four quick questions about your project help us send you to the right specialist with a relevant proposal. It takes about a minute."
    },
    "footer": {
      "text": "Your answers go only to our team"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_token": "bk_8f2c41",
        "flow_id": "YOUR_FLOW_ID",
        "flow_cta": "Tell us about your project",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "QUALIFY"
        }
      }
    }
  }
}
bash
curl -X POST 'https://graph.facebook.com/v23.0/{PHONE_NUMBER_ID}/messages' \
  -H 'Authorization: Bearer {ACCESS_TOKEN}' \
  -H 'Content-Type: application/json' \
  -d @send-lead-qualification.json

When to send it

Pricing questions

When a new contact asks "price?", "rates" or "how much", reply with this flow first. You can then answer with the tier that actually fits their budget band instead of a generic price list.

Click-to-WhatsApp campaigns

Paid traffic from B2B or aesthetics ads is expensive. Sending the qualifier as the first reply separates ready buyers from browsers before a rep spends time on them.

Webinar or event follow-up

Send it through a Flow-button template to attendees the day after a webinar, while intent is high, so reps know who wants a call this month.

Reviving cold leads

Broadcast it to contacts who enquired more than 90 days ago. Anyone who answers "within a month" is worth a same-day call.

How to customise this template

  • Rename the need ids (website_build, paid_ads, seo_content, automation, other_need) to match your service lines. Your scoring logic keys on these ids, so version them rather than renaming them after launch.
  • Set budget bands around your real price tiers. If your cheapest package is $5k, a "Under $2k" band still helps: it tells you to send a self-serve option instead of booking a call.
  • For aesthetics clinics, swap the decision-role question for "Have you had this treatment before?" and the need list for treatment families such as injectables, laser or body contouring.
  • Keep company optional for consumer-facing businesses. Making it required on a B2C lead form causes drop-offs from people who have no company to enter.
  • Add an EmbeddedLink to your case studies page on the first screen if prospects often ask for examples before sharing a budget.

Open this template in the Flow Builder to make these changes visually. The builder keeps field names unique and regenerates the completion payload for you.

Common mistakes to avoid

  • Do not add a phone number field. The submission arrives from the prospect's WhatsApp number (wa_id), and a second phone field just creates mismatched records.
  • Budget labels are shown to the prospect, so avoid wording that sounds like a filter such as "Too small". Neutral bands keep completion high.
  • Radio item titles are capped at 30 characters. "$10,000 - $25,000 per project" is 29 characters; adding "USD" pushes it over and Meta rejects the upload.
  • Score on item ids, never on titles. Titles get translated or reworded, ids stay fixed, and a renamed title silently breaks string matching in your CRM sync.

Turn submissions into conversations your team can close

In Whautomate, import this flow into the built-in flow editor, adjust it with drag and drop and click Publish. Send it from any open chat in the Team Inbox, from an automation, or as a broadcast with a Flow-button template. Each submission is saved as a response, creates or updates the client, and can trigger an automation that tags the lead, assigns the chat and notifies the right person.

  • Build and publish in the app, no JSON or API calls
  • Send from the Team Inbox, automations or broadcasts
  • Submissions notify, tag and assign automatically

7-day free trial, no credit card required.

Frequently asked questions

Parse the response_json string in the nfm_reply message. It includes need, budget_range, timeline and decision_role as item ids. Assign points per id (for example 3 for budget_25k_plus, 2 for timeline_this_month, 2 for role_decision_maker) and route anything above your threshold to a senior rep.
A researcher, an influencer and a budget holder need different follow-ups. Knowing the role before the first call lets the rep send a one-pager to a researcher and book a proposal meeting with a decision maker.
Not in a static flow. Conditional screens or questions need either If components tied to form state or a data_exchange endpoint. This template keeps one path so it runs with no server; handle the branching in your follow-up instead.
Put a campaign reference in the flow_token when you send the flow, such as lq_meta_ads_oct. It comes back unchanged in response_json, so you can attribute the lead without adding a "How did you hear about us?" field.
If you send the flow from a Whautomate chatbot step or a Flow-button template, the submitted answers show on the contact's chat in the shared team inbox, where a rep can pick it up and reply in the same thread.

The Complete Omnichannel Customer Engagement Platform

Go beyond free tools. Automate conversations, build AI chatbots, send broadcast campaigns, book appointments, sell products, and manage every messaging channel from one powerful platform. Trusted by thousands of businesses worldwide.

  • WhatsApp, Instagram, Messenger, Telegram & Live Chat
  • AI chatbots & no-code automation
  • Broadcast campaigns & analytics
  • Appointment & class booking
  • E-commerce, Shopify & WooCommerce integration
  • CRM, invoicing & payment collection

No credit card required. Free 7-day trial. Visit our pricing page for plans.