Meta Value Optimization for Lead Generation - The Complete Guide
Alon Oszmann
24 September 2026
Meta is very good at finding people who will fill in your form. Whether they ever buy is a question it cannot answer unless you tell it.
If your Meta ad sets optimize for leads, every form submission counts the same. A homeowner ready to spend $20,000 and someone checking prices out of curiosity are one lead each, and Meta's delivery system learns to find more of whoever fills in the form most cheaply. That is often not the person you wanted.
Value optimization changes the objective. You send Meta a value with each lead, and once it has enough of them, Meta can bid for the people most likely to be worth the most rather than the people most likely to fill in a form.
For lead generation, Meta's rules make this harder than it sounds. The value that steers bidding has to arrive with the lead, because there is no ordinary way to revise it. The goal that bids on it has a volume bar most lead-gen accounts do not clear on day one. The goal built for lead quality is listed for instant forms. And the event carrying your value can be silently discarded if it is set up the obvious way. This guide covers each of those, in the order they matter.
Cheap leads can be expensive customers
Consider a home improvement company advertising three services on Meta.
Illustrative figures only.
| Lead | Close rate | Average job | Expected value per lead |
|---|---|---|---|
| Bathroom remodel, starting within three months | 18% | $14,000 | $2,520 |
| Window replacement, starting this month | 30% | $6,000 | $1,800 |
| Price check, no timeline given | 4% | $5,000 | $200 |
On a lead-count objective, all three are one conversion. Priced, the first is worth more than twelve times the third. If price-check leads are the cheapest to generate, and they usually are, an ad set optimizing for lead count will drift toward them.
The expected value, close rate multiplied by what a won job is worth, is what you send. It is an estimate of what a lead is likely to bring, made the moment it arrives, from how similar leads turned out before.
This may not be for you
Value optimization needs three things:
- Real differences in value between leads, visible in fields you capture when the lead arrives: the service requested, a timeline, a company size, a product line.
- Enough history to measure those differences: won and lost deals, with amounts on the won ones. There is no magic number; we use twenty-five closed deals as the floor below which we will not price a group, and a hundred or more is where differences between groups usually stop being noise. Small groups within a large file still deserve caution.
- Enough volume for Meta to bid on value, which on Meta is a higher bar than most lead-gen advertisers expect (below).
If every lead is genuinely worth about the same, a value adds nothing that a lead count does not already say. And if the only fields that predict a sale are filled in by your sales team a week later, there is nothing to price a new lead on yet. The fix for that is upstream: one or two questions on the form that your best customers answer differently. What your CRM export needs lists the rest of the bar.
Three ways to optimize, and which your account can use
Meta offers three different things an ad set can optimize toward with CRM data behind it. Which one you can use depends on where your leads come from and how many valued events you send.
| Your leads come from | Optimize on | What Meta learns from |
|---|---|---|
| Website forms or quiz flows, below Meta's value bar | Maximize number of conversions, on your valued lead event | Which people become leads. The values travel with every event and build the history Meta needs, but do not yet change who it bids for. |
| Website forms or quiz flows, above the bar | Maximize value of conversions | Which people become valuable leads. This is value optimization proper. |
| Instant forms (Meta's own lead forms) | Conversion Leads | Which leads reach a stage in your CRM, such as qualified or sold. Listed by Meta for instant forms at the time of writing; see below. |
The value bar. Meta offers "Maximize value of conversions" for a non-purchase event once it has seen at least 100 attributed conversions from ads optimizing for that event, with at least five distinct values, in the past 14 days. For purchases the figure is 30. Meta's requirements for Maximize value of conversions.
A hundred in fourteen days is a little over two hundred valued leads a month. Plenty of lead-gen accounts are below that, and the honest plan for them is to start sending values now, move ad sets onto the valued event as a count, and switch when Meta offers the goal. One detail decides how fast that happens: Meta counts attributed conversions from ad sets optimizing for that event. Valued events that arrive while your ad sets still optimize for the pixel's Lead event build your own history and show in Events Manager, but they do not count toward the bar. The count step is what starts the clock.
The five distinct values are rarely the problem. Two fields with three levels each already give nine combinations, and a real model usually gives far more. A single flat value does not qualify, and should not: it tells Meta nothing a count does not.
Conversion Leads is Meta's goal for lead quality, and it works differently. Instead of a value, it learns from the pipeline stages your CRM reports back. Meta's guidance is to pick a stage that between 1% and 40% of leads reach, within 28 days of the lead. Meta's help centre lists the goal as available for instant forms only at the time of writing, matched on the lead ID Meta attaches to each instant-form lead, so that ID has to be stored in your CRM. Meta has been widening what its CRM integration covers, so check the performance goals offered on your website ad sets; if Conversion Leads appears there, the same CRM stages serve it. Meta's performance goals for lead ads, Meta's Conversions API for CRM integration, configuring the sales funnel.
An advertiser running both instant forms and website forms can use both routes: Conversion Leads on the instant-form ad sets, the valued event on the website ones. Where Meta offers Conversion Leads on a website ad set, it is a fair alternative to the count route below the value bar, and the stage events already flowing serve it.
One value, sent once, on day zero
This is the rule that shapes everything else.
Meta has no general way to restate a value after it arrives. Two events with the same name and event ID inside 48 hours are treated as one, and Meta keeps whichever arrived first, so a second copy with a corrected value is discarded. Meta on handling duplicate events. The one documented exception is narrow: Meta's guidance for predicted lifetime value describes an AppendValue event that adds a value to a recent conversion within about seven days, written for subscription and app businesses predicting the worth of a new customer. Meta's predicted lifetime value guidance. It is not a way to keep revising a lead's value, and nothing in this guide depends on it. For practical purposes, the value you send with a lead is the value Meta has.
Two clocks are easy to confuse here, and keeping them apart settles most questions:
- How old an event can be when you send it. Meta rejects a website event sent more than seven days after the time it says it happened. A sale that closes six weeks after the lead can still be sent, as its own event, dated when it closed, as long as it goes within seven days of closing.
- How long after the ad click Meta credits an event to the ad. The attribution window, seven days after the click by default. A sale six weeks later is outside it, so Meta reports it but does not attribute it to the ad, and it cannot steer bidding.
So the sale can be sent and is worth sending, for reporting and for the refit. What it cannot do is replace the value on the lead, or reach back and change what Meta optimized on. The value that influences bidding has to exist when the lead arrives.
What this means in practice is a day-0 value: an estimate made the moment the lead arrives, from fields the lead itself carries, priced from how similar leads turned out in your history. Late outcomes still matter. They are how you check the estimates and refit the model, so tomorrow's leads are priced on what yesterday's became. They just never reach back and change a value already sent.
Estimate value from your own history
The calculation is the same one any lead-value model makes:
Expected value per lead = historical close rate × average won deal, for leads like this one
Three rules keep it honest.
- Use only what is known on arrival. The service requested, a timeline, a company size, a region. A lost reason, a final contract amount or a stage your team sets later cannot price a new lead, because a new lead does not have one yet.
- Include the leads that did not close. A file of won deals reads every close rate as 100%. The lost deals are half of the calculation.
- Cap the outliers. One exceptional deal can move an average a long way, and Meta's delivery chases the largest values it sees. Counting any deal above a set multiple of your median at that cap keeps one outlier from teaching Meta to hunt its lookalikes. The multiple is a modelling choice: three times the median is our default, and it understates a service that genuinely closes at several times your typical deal, so the cap should be visible, adjustable, and the deals it clips listed. Value caps.
Keep sensitive information out entirely. Health, financial circumstances, age, and similar characteristics do not belong in an advertising signal, Meta's terms restrict sending them through its business tools, and if your ads fall under one of Meta's Special Ad Categories, targeting on them is off the table anyway.
The fuller treatment of what to check in the underlying data, including stage timestamps that were backfilled and source fields that were overwritten, is in Is your CRM data ready for value-based bidding?
Getting the value to Meta: the Conversions API
The route in is the Conversions API, sending events from a server to your Dataset (the thing Events Manager used to call a pixel). The older Offline Conversions API, with its offline event sets and file uploads, was retired in May 2025; offline and CRM events now go to a Dataset through the same Conversions API. About the Offline Conversions API, sending offline events with the Conversions API.
Four details decide whether the value is used or quietly lost.
Give the valued event its own name
The obvious setup is to send your value on the same "Lead" event your pixel already fires. In the usual arrangement, that loses the value. The pixel fires in the browser the moment the form is submitted, before any value exists. Your server event, carrying the value, arrives after it. If the two share an event name and ID, Meta treats them as duplicates and keeps the first one received: the pixel's, without the value. If they do not share an ID, Meta counts the lead twice.
The setup this guide uses avoids both: the valued event goes under its own name, such as ValuedLead, sent only from your server, and the pixel keeps firing its own Lead event as it does today. The two never collide. In Events Manager, create a custom conversion on the valued event so ad sets can optimize for it.
It is not the only workable arrangement. A browser event that already carries the value, or a Lead event sent from the server alone with no pixel copy, can work too. Whichever you choose, test it: send a lead through with a test event code and confirm in Events Manager which copy Meta kept and that the value is on it.
Send it as a website event, with the browser details
For an ad set whose conversion location is your website, the event it optimizes on is a website event. From a server, that means an action_source of website, and Meta then requires two more fields: the visitor's browser user agent and the URL of the page the form was on. Meta's Conversions API parameters.
Your server does not have those unless the form captured them. A small script on the page can put them in hidden fields beside the lead, so they travel into the CRM and back out with the event.
Send it within seven days
Meta rejects a website event sent more than seven days after its event_time. Day-0 values are sent within minutes or hours of the lead, so this only bites when a pipeline is exported in weekly batches. It is one more reason the value has to exist at arrival.
Stage events are CRM events
Pipeline stages, qualified, quoted, sold, go as events of their own, without a value, in Meta's CRM integration format: action_source of system_generated, with the CRM named as the event source. On instant-form ad sets they are what Conversion Leads learns from. On website ad sets they show in Events Manager and in your reports, and they are the check on whether the values were right. Meta's CRM integration payload.
A stage only helps optimization if it arrives while Meta can still credit the ad: within your attribution window for website leads (seven days after the click under Meta's default setting), within 28 days for Conversion Leads.
Matching: Meta leans on contact details
A value that Meta cannot connect to a person attaches to nothing. Meta matches a server event on the customer information it carries, and scores each event's matching from 0 to 10 as Event Match Quality. About Event Match Quality.
In rough order of weight:
- Email and phone, normalized and hashed with SHA-256 before they leave your systems. Phone numbers need the country code. These carry the most weight.
- Meta's own cookies:
_fbc, which records the ad click, and_fbp, which identifies the browser. They are set by the pixel, so the pixel has to stay on the site, and your form has to capture them into hidden fields for your server to send them. A rawfbclidstored in the CRM can be turned into the click value at send time;_fbpcannot be rebuilt later and has to be captured at the form. What an fbclid is. - The browser user agent and the page URL, which a website event needs anyway.
If you already collect a phone number, send it: a lead with an email, a phone and both cookies matches far more often than one with an email alone. If you do not, weigh a new required field against the submissions it costs. Which identifier is worth adding depends on what your leads are actually missing, and Event Match Quality in Events Manager shows that per event.
If you sell to businesses, read coverage by address type as well as in total. Meta may connect a personal address to an account more readily than a work one, so a healthy overall score can rest mostly on signups from personal addresses, often the leads a business seller values least, while the company addresses behind your best prospects fare worse. Split your leads by domain type in the CRM and compare the two before taking the overall figure as good news.
Keep the two measurements apart: the share of your leads carrying these identifiers, which you can count in your CRM, and the match quality Meta reports after the events arrive. A successful reply from the Conversions API tells you how many events Meta took in, and nothing about whether they were processed or tied to a person, so check in Events Manager that the events appear with their values before counting a send as working.
Before you switch: volume and structure
Meta learns per ad set, and an ad set leaves the learning phase at about 50 optimization events in a week. Below that, delivery stays in "Learning limited" and results stay noisy. About the learning phase.
Two consequences for lead generation:
- Fewer ad sets, not more. Spreading two hundred leads a month across six ad sets gives each one about eight a week, and none of them will ever leave learning. Consolidating into one or two ad sets per goal gives each enough to learn from, and gets you to the value bar sooner.
- Broad targeting. Once the value on each lead tells Meta who is worth more, narrow interest targeting mostly gets in its way. Broad targeting or Advantage+ audience gives it the room to act on the values. Advantage+.
The budget calculator works out the spend an ad set needs to reach Meta's weekly figure at your cost per lead.
Switching over, in order
Each step changes one thing, so that when results move you know why.
- Wire the events and test them. Send the valued event and the stage events to your Dataset with a test event code, and confirm they land in Events Manager's Test events tab with the value and the identifiers you expect. Check Event Match Quality once real events are flowing.
- Start sending values on every lead. Nothing changes in your ad sets yet. The values accumulate, and you can see in Events Manager how many distinct values you are sending and how many valued events a fortnight.
- Move website ad sets onto the valued event. Optimize for the valued event's custom conversion, on Maximize number of conversions. This is still a lead count, but a count of leads you can price, and it is the event the value goal will need. Changing the optimization event restarts learning, so do it once, in a consolidated ad set, rather than edit several.
- Switch to Maximize value of conversions when Meta offers it. Start on the Highest value bid strategy, which spends the budget while maximizing value, rather than a minimum ROAS. About Highest value.
- Hold steady through learning. Meta restarts learning after a significant edit, and it lists the audience, the optimization event, the bid strategy, the creative and a large budget change among them. Not every edit counts, and Meta does not publish a threshold for budget. Make changes rarely and in batches, and check the ad set's Delivery column after any edit: if it reads Learning again, the edit was significant.
- Add a minimum ROAS only once results settle, and set it from the return the ad set has actually achieved on the new values, not the return you want. A control set too high stops delivery rather than improving it. Meta enters the control as a decimal: 1.500 means $1.50 of value for each $1 spent. About minimum ROAS.
For instant forms the order is shorter: store Meta's lead ID in your CRM, connect the CRM stages through the Conversions API, pick the stage in Events Manager's CRM setup, and switch those ad sets to Conversion Leads.
Value rules: useful, and not a substitute
Meta's value rules let you raise or lower bids for segments of people, from +1,000% down to -90%, by criteria such as location, placement or device, and more recently custom audiences, without restarting learning. Meta notes that cost per result can rise when you use them.
They are worth knowing about, and they do a different job. A value rule adjusts bids for people Meta can put in a segment before they arrive. A lead's value comes from what the lead tells you when it arrives: the service it wants, its timeline, its size. For a prospect Meta has never seen convert, only the second is available, and only the Conversions API carries it. If your ads fall under a Special Ad Category, the segments available to value rules are narrower still.
Measure business results, not reported value
The conversion value Meta reports after the switch is the value you sent, repeated back. It will rise if Meta finds more of the leads your model prices highly, whether or not those leads turn into more revenue. It cannot be the measure of success.
Measure in your CRM instead:
- Closed revenue per lead, and cost per won deal, for leads that came from Meta, before and after the switch.
- A comparison group. Leads from your other channels, over the same period, show what changed for reasons that have nothing to do with Meta: seasonality, demand, a change in sales follow-up. They are a baseline, not a randomized control group: they were never split from the Meta leads by chance, so they rule out the shared explanations rather than prove the cause.
- Enough time. A comparison is only readable once the leads on both sides have had time to close. About one and a half sales cycles after the switch is a sensible minimum; last week's leads have not failed, they have not finished.
Where you can, run it as a test. Meta's Experiments tool splits the audience at random between an ad set on the value goal and one on lead count; join each group's leads to their outcomes in your CRM, wait for both to mature, and compare closed revenue. That is the closest thing to proof available. Meta's A/B tests.
Keep everything else steady while you measure. A new value model, a new goal, a new landing page and a new budget in the same month make it impossible to say which one worked.
Common questions
Can Meta optimize for the value of a lead that has not closed yet? Yes, and that is the point. The value is an estimate made when the lead arrives, from how similar leads turned out. Meta never needs the final sale; it needs a value that reflects what the lead is likely to be worth, sent while the lead is new.
We are below 100 valued events in 14 days. Is there any point starting? Yes. Send the values now and move your ad sets onto the valued event as a count. Meta counts attributed conversions from ad sets optimizing for that event, so that move is what starts building toward the bar; you can watch your volume and distinct values in Events Manager, and when Meta offers the value goal the history is already there.
Why not put the value on the pixel's Lead event? Because the pixel fires before the value exists. If the browser and server events share a name and ID, Meta keeps the one that arrived first, which is the browser's, without the value. A separately named event sent only from the server avoids both the lost value and the double count.
Can we send the real deal amount when it closes instead? You can send it, and it is worth sending: as its own event, dated when the deal closed, within seven days of closing. What it cannot do is steer bidding. Under Meta's default seven-day click window a sale weeks after the lead is not attributed to the ad, and it does not replace the value already sent on the lead. So send it for reporting, and use it to refit the model that prices new leads.
Does Conversion Leads work with website forms? Meta's help centre lists it for instant forms only as of this writing, and Meta has been widening its CRM integration, so check what your website ad sets are offered. Where it is not offered, website forms get the valued event, optimized as a count and then on value. Stage events from website leads are still worth sending, for reporting, for checking the model, and for Conversion Leads if it appears.
Should we send revenue or profit? Whichever your business runs on. If margins differ sharply between services, profit stops Meta chasing the large invoice over the profitable one. Either way, keep the basis consistent across every lead, and remember the value is an expectation, not a promise.
How do we know it worked? Not from Meta's reported conversion value, which repeats what you sent. Compare closed revenue per lead and cost per won deal in your CRM, before and after, with leads from your other channels as a baseline, once about one and a half sales cycles have passed. A randomized A/B test in Meta's Experiments, with both groups joined to their CRM outcomes, is the stronger evidence.
Find out what your leads are worth
Before any of this, it is worth knowing whether your leads differ in value at all, and by how much.
ValueBasedBidding.com reads your CRM export or HubSpot in your browser, works out what each lead is worth from your own closed deals, tells you which of Meta's three goals your volume and form type put you in, and sends the day-0 value and the stage events to your Dataset through the Conversions API. Start with the sample dataset to see the whole route, then run it on your own history.
The goal is simple to state: teach Meta to find the people who become customers, then check in your CRM that it did.
Meta

