# Lead generation

> Rules that hold a cost-per-lead target by comparing spend and lead volume in the same window, then pausing or resizing the campaigns that miss it.

Source: https://adops.id/use-cases/lead-generation/
Last updated: 2026-08-20
Publisher: AdOps (https://adops.id) — an independent product, not affiliated with Meta Platforms, Inc.

---

## Key facts

- **Comparison operators:** 6 (greater than, less than, greater than or equal, less than or equal, equal, not equal)
- **Executable actions:** 11, in 3 groups (General, Budget, and Name or text)
- **Reporting periods per condition:** 11, from Today to Lifetime
- **Pre-filter fields:** 3 (Campaign ID, Campaign Name, Campaign Status with values ACTIVE and PAUSED)
- **Shortest check interval:** 15 minutes (Up to 96 evaluations per rule per day)
- **Rule levels:** 2, Campaigns and Ad sets

**Who it is for:** A lead-gen advertiser with a cost-per-lead number the sales team agreed to, and a form that has to keep filling.

**The problem:** Cost per lead drifts past target for six hours before anyone notices, and a broken form or a dead pixel can burn a full day of budget while the campaign still reports healthy click volume.

**The outcome:** Spend and lead volume are checked together on the same interval, campaigns that break the ratio are paused and tagged in the campaign name, and campaigns that recover can be started again by a second rule.

## Playbook

### Stop paying above the target cost per lead

- **When:** Spend today is greater than Rp 1,500,000 AND Leads today is less than 10
- **Then:** Pause campaign, and Add to name in Append mode with the text `[CPL-OVER {date}]`
- **Why:** Rp 1,500,000 spread over fewer than 10 leads is a cost per lead above Rp 150,000, so the rule reads exactly the arithmetic the buyer does.

### Catch the broken form before it costs a day

- **When:** Link clicks today is greater than 300 AND Leads today is equal to 0
- **Then:** Pause campaign, and Add to name in Append mode with the text `[CHECK-FORM {time}]`
- **Why:** 300 link clicks with zero leads is usually a landing page or pixel problem, and the timestamp in the name says when delivery stopped converting.

### End the audition for a new campaign

- **When:** Hours since creation is less than 48 AND Spend over the campaign lifetime is greater than Rp 1,000,000 AND Leads over the campaign lifetime is less than 5
- **Then:** Pause campaign
- **Why:** Rp 1,000,000 for fewer than 5 leads in the first 48 hours is a result, not a warm-up period.

### Feed the campaign that is beating target

- **When:** Leads over the last 7 days is greater than 50 AND Spend over the last 7 days is less than Rp 5,000,000
- **Then:** Increase budget by 15 percent, with an action frequency of once every 12 hours
- **Why:** Under Rp 100,000 per lead across a full week is a campaign worth more money, and the 12-hour cooldown caps it at 2 raises a day.

### Re-open what recovered

- **When:** Pre-filtered to Campaign Status is PAUSED, then Leads over the last 7 days is greater than 20 AND Spend over the last 7 days is less than Rp 2,000,000
- **Then:** Start campaign, and Remove from name the text `[CPL-OVER]`
- **Why:** A campaign paused on one bad day should not stay off all week, and removing the tag keeps the campaign list honest.

AdOps defends a cost-per-lead target on Meta Ads by writing the target as a rule instead of a reminder. A rule pairs a Spend condition with a Leads condition over the same reporting period, and when the pair breaks, AdOps pauses the campaign and appends a tag to its name on the interval you set, as often as every 15 minutes.

## Why is cost per lead so easy to lose?

Lead volume and spend move at different speeds. Spend is continuous and lead delivery is lumpy, so a campaign can look fine at 10:00 and be 40 percent over target by 16:00 without a single alarming number appearing on any one screen. The gap is not knowledge, it is attention.

The second failure is quieter. A form that stops submitting, a pixel that stops firing, or a landing page that returns an error will not slow Meta down. Delivery continues, clicks keep arriving, and the only visible symptom is that leads stopped.

## How do you express a cost-per-lead ceiling in AdOps?

Write it as the arithmetic, not as the ratio. Spend today greater than Rp 1,500,000 combined with Leads today less than 10 is a cost per lead above Rp 150,000, and both halves are metrics the engine reads straight out of a batched Meta Insights call.

Writing it this way has a practical advantage: you choose the spend floor that makes the test meaningful. A campaign that has spent Rp 200,000 today has not earned a verdict yet, and the spend condition is what keeps the rule quiet until it has.

## Which metrics belong in a lead-gen rule?

The AdOps rule builder exposes 45 metrics over 11 reporting periods. For lead generation the working set is small: Spend, Leads, Leads value, Link clicks, Clicks, CTR (link clicks), CPC (link), Landing page views, Impressions and Hours since creation.

Landing page views deserve a place. Comparing Link clicks against Landing page views over the same period tells you whether people are arriving at all, which is a different failure from arriving and not converting.

| Symptom | Condition pair | Action |
| --- | --- | --- |
| Cost per lead over target | Spend today, Leads today | Pause campaign and tag the name |
| Form or pixel broken | Link clicks today, Leads today | Pause campaign and tag the name |
| New campaign never started | Hours since creation, Spend lifetime, Leads lifetime | Pause campaign |
| Beating target on volume | Leads last 7 days, Spend last 7 days | Increase budget by 15 percent |

## How do you stop a rule from over-reacting?

Three controls. The check interval sets how often the rule is evaluated, chosen from 10 values between 15 minutes and 72 hours. The action frequency sets a cooldown on the action itself, with 11 values from 15 minutes to once in a lifetime, available on Increase budget, Decrease budget, Set budget, Duplicate and Notify. The pre-filter sets which campaigns the rule may touch at all, using Campaign ID, Campaign Name or Campaign Status.

Campaign Name as a pre-filter is the one lead-gen teams underuse. If every campaign for one offer carries a shared prefix, a rule pre-filtered to campaigns whose name contains that prefix inherits the offer's own cost-per-lead target without anyone maintaining a list of campaign IDs.

## What happens after a campaign is paused?

The pause is not the end of the workflow. A second rule, pre-filtered to Campaign Status is PAUSED, can look at Leads and Spend over the last 7 days and start the campaigns that came back, then use Remove from name to clear the tag the first rule wrote. The shipped template library includes a Re-enable Paused Winners recipe built on that pattern, alongside Pause + Tag Failed and Stop and Label Campaign.

Each pass leaves evidence. AdOps writes a batch record and a per-campaign, per-task result, and the Rule Log Detail screen shows the badge, the parameters the action used, the execution time in seconds and the next scheduled execution.

## What this does not cover

AdOps evaluates what Meta reports. A lead that Meta counts but your CRM rejects is still a lead to the rule, so a rule can defend cost per lead but not lead quality. If your true target lives downstream, the custom metric feature can read a number you maintain in a Google Sheet and compare a live Meta metric against it. AdOps connects to Meta Ads only today.
