
Build the empty campaign shell for a new client — correct targeting, correct settings, correct lead form — then hand it to the media buyer to fill in creatives and copy.
Owner: Hanif. New process as of 2026-07-27.
NOTE
Why this exists. Setup mistakes were being caught late — wrong location (targeting "St. Louis City" when the client services "St. Louis County"), automated settings left on, lead forms missing a question. These are small errors with large effects, and they need local market knowledge to catch. Splitting setup from optimization puts each job with the person best placed to do it.
| Step | Who | What |
|---|---|---|
| 1 | Griffin | Names the Facebook page, posts the client info + domain in the Discord channel |
| 2 | Hanif | Edits the page (Facebook Page Setup SOP) |
| 3 | Hanif | This page — skeleton campaign + lead form + GHL connection |
| 4 | Tasneem / Abdelhamed | Fill in creatives, copy, real budgets (Media Buyer Launch Playbook) |
You need three things in hand:
[clientname].directestimatepro.com/schedule-appointment.If the service area is unclear, tag Griffin. Do not guess on geography.
Start these before you touch Ads Manager. They take a few minutes each and you can let them run while you work.
Run them in this order (full instructions in New Launch Targeting Sequence, prompt text in Targeting Audit Workflow):
| Prompt | When | What you get |
|---|---|---|
| Prompt B — Messy Location → Radius | Only if the client gave a zip list, city list, or county list | A clean city + radius |
| Prompt A — Zip Exclusion Research | Always | Tier 1 / 2 / 3 zip codes to exclude |
| Prompt C — Location Qualifier | Always | The lead form's Question 1 text |
Which AI to use: ChatGPT (paid) is the default. Claude is better at checking its own work, but the usage limits make it a poor fit for a task you run on every launch. Do not use Gemini for these — output quality is not reliable enough for targeting.
Tell the tool if your ad account is set to kilometers instead of miles. It applies the same way, but it has to know.
Prompt A returns three tiers. How many you apply depends on the market's population:
| Market population | Apply |
|---|---|
| Over 1M | Tier 1 + Tier 2. Consider Tier 3. |
| 750K – 1M | Tier 1. Add the worst of Tier 2. |
| Under 750K | Tier 1 only. |
| Under 500K | Do not exclude. The audience is already small. |
The point of the exclusion is to remove roughly the bottom 10–20% of a market. In a smaller market, applying all three tiers shrinks the audience too far and the campaign starves.
WARNING
If Prompt A returns no zip codes at all, stop and check. In a lower-income metro (Cleveland is the usual example) the income thresholds can filter everything out, and in a higher-income metro (Phoenix) nothing may fall below them. An empty result is sometimes correct — but re-run it before you accept it.
Open Ads Manager → Create → objective Leads.
Name it:
[COMPANY ACRONYM]_Skeleton
Example: HAP_Skeleton
Set the daily budget to the lowest amount Facebook will accept:
1
This is a placeholder. The media buyer sets the real budget when they take over. You only need enough to let the campaign publish.
Nothing else at campaign level matters for the skeleton.
Facebook defaults this to Website and Instant forms. Change it to:
Instant forms
Then select the client's Facebook page, select the instant form, and accept the terms. If the page is brand new you will get an extra terms screen — that is normal, accept it.
WARNING
"Include people interested in this location" is ON by default and it is the single worst setting in the interface. Left on, someone living in New York who has shown interest in Tucson will see a Tucson HVAC ad. Turn it off on every ad set, every time.
An exclusion ring is a second radius you exclude, used to carve out a neighbouring metro or a territory boundary. Example: a Tucson radius will still pick up Phoenix traffic at the edge unless you exclude a ring around Phoenix.
WARNING
Order matters here. Once you add roughly 20+ zip codes, Facebook hides the map and tells you there are too many locations to display. You cannot draw a ring you cannot see. Build every ring first, then paste the zips.
Where the boundary is a whole state, exclude the state rather than drawing rings around it — one exclusion instead of 25.
| Setting | Value |
|---|---|
| Minimum age | 30 (drop to 25 only if the audience is under 500K — note it in the ad set name) |
| Maximum age | 65+ |
| Gender | All |
| Detailed targeting | Off — broad |
Name the audience:
[CompanyName]_[City]_1.0
This is a placeholder ad. It exists so the campaign can publish. The media buyer replaces the creative.
WARNING
Facebook adds ads you did not ask for. After you upload one image it will silently create two or three ad variations. Check the ad list before you continue and delete everything except the one you uploaded. Publishing without checking means running ads nobody approved.
Get Quote
Publish the campaign. As soon as it publishes, pause it.
Why both steps: - Publish — a campaign left in draft is only visible to the person who created it. The media buyers cannot see your work until it is published. - Pause — a published campaign spends money. Pause it the moment it goes live.
Do not leave it running while you go do something else. Publish and pause in the same sitting.
Follow Connect Facebook Page to GoHighLevel. This is part of the same job — do not hand it off half-finished.
Post in the client's Discord channel:
Skeleton campaign is published and paused. Lead form is built and mapped in GHL. Ready for creatives and copy.
DANGER
Never use AI browser automation in Facebook Ads Manager. Do not use Claude's browser control, Comet, or any other tool that drives the browser for you. Facebook reads it as bot activity and restricts or permanently bans the account. This has already happened twice to an account in our orbit. Using it to organise Google Drive folders is fine — Ads Manager is the hard line.
DANGER
Never log into Ads Manager from a country you do not normally work from. A sudden country change on the login is a restriction trigger, even with no automation involved. If you are travelling, say so in Discord before you log in.
Facebook's defaults are wrong for us in six places. This is the whole list:
| Where | Default | Change to |
|---|---|---|
| Ad set — conversion location | Website and Instant forms | Instant forms |
| Ad set — interested in this location | ON | OFF |
| Ad — Multi-advertiser ads | ON | OFF |
| Ad — Advantage+ creative | ON | OFF (translations especially) |
| Ad — auto-generated ad variations | Added silently | Delete them |
| Ad — call to action | Learn More / Visit Website | Get Quote |