> ## Documentation Index
> Fetch the complete documentation index at: https://docs.granvl.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Lead validation

> Filter bots, burner numbers, and junk emails before they reach your CRM.

On paid traffic, a share of every form fill is worthless: bots, typo'd numbers, throwaway inboxes. [Qualification](/guides/qualification) tells you whether a real lead was a *good* lead. Validation stops the fake ones getting through at all.

The controls live in the funnel's settings under **Validation**, and they're independent, so you can run one, all, or none.

## The four controls, cheapest friction first

| Control                    | What it does                                                                                          | Cost to the visitor                           |
| -------------------------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------- |
| **Validate phone numbers** | A silent line-type lookup at submit. Fake numbers get an inline field error                           | None. No extra step                           |
| **Validate emails**        | A silent mailbox check at submit. Same inline error                                                   | None                                          |
| **Work emails only**       | Rejects free providers (gmail, outlook, yahoo, icloud, and so on) with "Please enter a company email" | None, unless they're using a personal address |
| **2FA phone verification** | Texts a 6-digit code and only lets the lead through once the phone is verified                        | An extra step. The strongest filter           |

The first three are silent: the visitor sees nothing unless what they typed fails, in which case they get a quiet inline note under the field rather than a banner.

<Warning>
  Every validation path **fails open**. A missing vendor key, an outage, or an exhausted credit balance lets the lead through unvalidated rather than blocking it. Validation can cost you accuracy; it will never cost you a lead.
</Warning>

## 2FA phone verification

Enabled per variant, so it's A/B testable like anything else: run one arm with verification and one without, and read the difference in qualified rate against the drop in raw submissions.

* 1 credit per successful verification. Every workspace gets **100 free**, then prepaid packs at 10 cents each from **Settings → Billing**.
* Out of credits means verification fails open, and the leads keep flowing unverified.
* The sender name in the text is derived from your funnel's domain and brand on first enable.
* Skipped on [test-drive links](/concepts/variants-and-testing#testing-on-a-live-page-without-junk-leads), so test it with a real visit.

Your agent toggles it with `set_sms_verification`, which returns the credit balance so it can warn you when the pool is low.

<Frame caption="The variant table carries the SMS 2FA toggle next to the traffic split">
  <img src="https://mintcdn.com/granvl/8y4JEMis0B4o4RIh/images/guides/variant-split.jpg?fit=max&auto=format&n=8y4JEMis0B4o4RIh&q=85&s=876cf2c6691c1ca854782f60551497a7" alt="Variant table showing a 70/30 traffic split and per-variant SMS 2FA toggles" width="1345" height="305" data-path="images/guides/variant-split.jpg" />
</Frame>

## Work emails only

Set per variant too, and bulk-settable for the whole funnel. Worth turning on for B2B offers where a personal address usually means an unqualified lead, and worth leaving off for consumer offers where it just costs you conversions.

## TrustedForm certification

For funnels selling leads onward, **TrustedForm** (ActiveProspect) certification can be switched on per funnel. granvl injects the official snippet, which records the capture session and drops the certificate URL into the form as a hidden field. It fans out to your destinations like any other field, and the buyer claims the certificate on their own ActiveProspect account.

## Where this sits in the pipeline

```
Visitor submits
  ↓  validation      fake phone / email / free provider  →  inline error, never sent
  ↓  2FA             unverified phone                    →  inline code step
  ↓  qualification   real but not a fit                  →  delivered, recorded unqualified
  ↓  your CRM
```

Validation and qualification answer different questions and stack cleanly. Validation asks *is this real*. Qualification asks *is this worth your time*. Only qualification data feeds [CPQL](/guides/dashboard#the-metrics-and-what-they-actually-measure); validation just stops the noise before it counts.

<Note>
  Zero-PII holds throughout. Checks run at submit time against the value in the browser or a bounded server-side call; granvl records whether the check passed, never the phone number or the address. See [How zero-PII works](/concepts/zero-pii).
</Note>
