Ad Signal Pack
This pack shows you how to send booked and sold jobs back to Google and Meta, so your ads learn from the people who hire you.
SIGNAL
Send booked and sold jobs back to Google and Meta
Your ads learn from what your account counts as a win. In Google Ads, open Goals, then Summary, and see which actions are marked Primary. Those drive bidding. In Meta Ads Manager, read the ad set's performance goal. If either says form fill, the ads chase form fills.
Google: offline conversion import and enhanced conversions for leads
- Turn on auto-tagging. Save each lead's Google click ID (GCLID) from a hidden form field into your CRM.
- In Goals, then Settings, turn on enhanced conversions for leads and accept the customer data terms. Have your Google tag capture the form's email or phone.
- In Goals, then Summary, select + Create conversion action, then Conversions offline. Connect a source in Google Ads Data Manager, such as Google Sheets.
- Create "Booked job" and "Sold job" actions. Wait 4 to 6 hours, then upload booked and sold jobs daily, with the sale value on sold jobs.
| Conversion name | Conversion time | GCLID | Phone (with country code) | Value | Currency | |
|---|---|---|---|---|---|---|
Meta: Conversions API for CRM
Conversions API for CRM works with Meta instant form leads.
- In Events Manager, select Connect data sources, then CRM. Create a new dataset and pick your CRM's partner, or Manual code.
- Send each stage a lead reaches, junk included, with its Meta lead ID. Upload at least daily.
- Meta asks for 200 leads a month and a target stage that 1 to 40 percent of leads reach within 28 days.
- Duplicate your campaign and set the copy to the Conversion Leads goal. Published campaigns can't change goals.
Website leads go back through the regular Conversions API, with value and currency on sold jobs. If branches share an account, see BRANCH SPLIT.
What to check when last year's ads stopped working
[ ] Google Ads: Campaigns > Change history (shows the past 2 years).
Look for changes to the goal, audience, budget or bid strategy.
[ ] Meta Ads Manager: open the campaign's history and look for the same.
[ ] Was the campaign rebuilt from scratch? A new campaign starts
without the old one's learning.
[ ] Are booked jobs still uploading daily? Check the last upload date
in Google Ads Data Manager and Meta Events Manager.
[ ] Is "Booked job" still Primary in Google and still the goal in Meta?
[ ] Restore the booked-job signal, then duplicate the campaign that worked.
[ ] Give the copy 2 to 3 weeks before you judge it.VALUE
Send the sale amount back
A $400 repair and a $12,000 install look the same to your ads until you send the sale amount back. Once the ads know the amount, they can bid harder for people who look like your bigger jobs.
- Put the sold amount on each sold job in your CRM or field software.
- Google: add the value and currency to each "Sold job" upload.
- Meta: add value and currency (USD) to the sold-job event.
- Wait. Google says that when you've just started sending values, you should give it one to two conversion cycles before you switch. A conversion cycle is the time from a click to a sale.
- Google: in campaign settings, switch the bid strategy to Maximize conversion value. Check your daily budget first. Google warns this strategy tries to spend the full budget, so spend can jump if you've been running under it. You can add a target return on ad spend later.
- Meta: value-based bidding runs on the Sales objective, with events that carry value and currency. If your Meta leads come from instant forms on the Conversion Leads goal, keep that goal.
Use this row format for sold jobs:
| Conversion name | Conversion time | GCLID | Phone | Value | Currency | |
|---|---|---|---|---|---|---|
| Sold job | [date and time of sale] | [GCLID] | [email] | [phone] | 12000 | USD |
TEST
Run the booked-job version side by side
You don't have to switch an account that's run for years all at once. Leave the current campaign on and test the new version next to it for 30 days.
- Leave your current campaign running as it is.
- Google: build a new campaign and set its goal, in campaign settings, to one that holds only the "Booked job" action.
- Meta: duplicate your current campaign and set the copy to the booked-job goal. Meta won't let you change the goal on a published campaign.
- Give the new campaign its own daily budget. Pull that money from the old campaign so your total spend stays the same.
- Leave both alone for 30 days. Google says to judge a change over two conversion cycles or two weeks, whichever is longer. Meta puts its Conversion Leads learning phase at 2 to 4 weeks.
- At day 30, fill in the table from your calendar and CRM. Move money to whichever campaign books jobs cheaper.
| Campaign | Spend | Leads | Booked jobs | Cost per booked job | Sold jobs | Sold revenue |
|---|---|---|---|---|---|---|
| Current | ||||||
| Booked-job version |
BUDGET
The checklist before you raise any budget
If more money brought worse leads, look at what the account is learning from. An account trained on form fills buys more form fills when you add money. So go in order. Fix what you send back and test two new videos before you raise the budget.
Google says budget changes don't put a bid strategy back into learning, and they take effect right away. Google also says its Maximize strategies try to spend your full daily budget, so a raise gets spent fast. A raise only helps when the account already knows which leads turn into jobs. Before the money goes up, look at two weeks of cost per booked job from your own calendar, and make sure the number held steady. Run this list before each raise.
BEFORE YOU RAISE THE BUDGET [ ] Google: "Booked job" is a Primary action in the goal the campaign uses [ ] Meta: the campaign's goal is the booked-job stage [ ] Booked jobs have uploaded at least daily for the past two weeks [ ] Two new videos have run against your current ads [ ] The winning videos are live [ ] Cost per booked job has held steady for two straight weeks [ ] You've written down today's cost per booked job to compare against [ ] Raise in one step you can measure, then hold two weeks before the next
BRANCH SPLIT
Send each branch's results back on its own
When branches share one ad account and one signal, the ads learn a blend of customers who may have little in common. A multi-branch fence company we work with sends booked visits and sold jobs back to Meta and Google daily, branch by branch. That company's new branches get their own ad budget and accounts.
You can split it two ways. The cleanest is one Google Ads account and one Meta ad account per branch, each with its own uploads. If branches share an account, split the conversions instead.
- Add a Branch field to each lead in your CRM or field software. Fill it in at intake from the service address.
- Google: create one offline action per branch, such as "Booked job - [Branch]" and "Sold job - [Branch]". Set each branch's campaigns to a goal that holds only that branch's actions.
- Meta: Conversions API for CRM is tied to one dataset, and Meta says not to switch a finished setup to a different one. Give each branch with its own ad account its own CRM dataset.
- Each day, filter your export by branch and send each branch's file to its own actions or dataset.
- Check volume. Meta's guide asks for at least 200 leads a month for the Conversion Leads goal, and a small branch may fall below that.
| Date | Branch | Lead ID or GCLID | Phone | Stage | Value | |
|---|---|---|---|---|---|---|
Want this set up for you? Legacy builds it inside your accounts.
Chart a courseSources
- Set up offline conversions using Google Click ID (GCLID)
- About enhanced conversions for leads
- Set up enhanced conversions for leads with Google Tag Manager
- About conversion goals
- About Maximize conversion value bidding
- Duration of the learning period for campaigns and what affects it
- About change history
- Conversions API for CRM Integration
- Conversions API for CRM: Getting started with the integration
- Conversions API for CRM: Implementing the CRM integration
- Offline Conversions API
- Conversions API: value parameters
- Ads MCP server: activity logs