Book a Demo
Pricing Demo
INTERNAL Facebook Lead Ads Setup Guide The Call Taker — Wallace only

Facebook Lead Ads — Setup Guide

Step-by-step instructions to launch your first Lead Ad campaign from your phone. Wave 1: HVAC, Dental, Plumbing.

$5/day per ad set Wave 1: 3 industries Webhook: port 5091 Leads auto-import to GHL
1
Before You Start
Everything you need in place before touching Ads Manager
Meta does NOT allow the word "AI" or "artificial intelligence" in ad copy. Use "professional phone answering" and "24/7 answering service" instead. Violating this gets your ad rejected and can get your account flagged.

Pre-Launch Checklist

  • Facebook Business Page exists for The Call Taker (or use personal page temporarily)
  • Meta Ads Manager account created at business.facebook.com
  • Payment method added to Ads Manager (debit/credit card)
  • Privacy policy URL ready: https://thecalltaker.com/privacy.html
  • Webhook server running on port 5091 (facebook-lead-webhook.py)
  • Webhook exposed via ngrok or reverse proxy at https://thecalltaker.com/api/facebook-leads
  • Facebook App created in Meta Developer portal with webhook subscription
  • FB_VERIFY_TOKEN and FB_APP_SECRET env vars set on server

2
Campaign Structure
One campaign, three ad sets, one ad per set to start

Architecture

LevelNameSetting
Campaign TCT — Lead Gen Wave 1 Objective: Lead Generation
Ad Set 1 TCT — HVAC Owners $5/day, HVAC targeting
Ad Set 2 TCT — Dental Owners $5/day, Dental targeting
Ad Set 3 TCT — Plumbing Owners $5/day, Plumbing targeting
Ads (3 total) One per ad set See creative copy below
$15
Daily spend (3 ad sets)
$5 per industry
$450
Monthly budget
Full month running
6-12
Est. leads/month
At $35-75 CPL
$497
First client closes
1 client pays for 1+ month

3
Step-by-Step: Creating the Campaign
Do this in Ads Manager from your phone or laptop

Step 1 of 8 — Create the Campaign

Go to Ads Manager

Open business.facebook.com on your phone. Tap the menu (3 lines) → Ads Manager → green "Create" button.

Choose objective: "Leads"

On the campaign objective screen, select Leads. This is what unlocks the instant lead form (so leads never leave Facebook).

Name your campaign

Name it exactly: TCT — Lead Gen Wave 1. Leave campaign budget optimization OFF — you'll set budget per ad set.

Tap "Next" to go to Ad Set level

You're now setting up Ad Set 1 (HVAC). You'll duplicate this for Dental and Plumbing after.

Step 2 of 8 — Ad Set Settings (Repeat for Each Industry)

Name the ad set

Name it: TCT — HVAC Owners (then repeat with Dental, Plumbing).

Lead method: "Instant Forms"

Select Instant Forms (not website). This keeps leads inside Facebook and gets better completion rates on mobile.

Budget: $5.00/day

Set daily budget to $5.00. Start date: today. End date: none (run until paused).

Audience — Locations

Set location to: United States. Optionally start with your top 5 cities (Nashville, Atlanta, Dallas, Houston, Phoenix) and expand when you have data.

Start broad. Meta's algorithm needs at least 50 conversions in 7 days to optimize. A narrow audience starves it.
Audience — Age & Gender

Age: 25–65. Gender: All. Don't exclude women — many HVAC/dental/plumbing businesses are owner-operated by women.

Audience — Detailed Targeting (see table below)

Enter the interests listed in Section 4 for each industry. Use "Narrow Audience" to layer small business owner interests on top.

Do NOT use "Advantage+ Audience" at this stage — you have no pixel data yet and it will waste spend. Use manual targeting.
Placements: Automatic

Leave placements on Automatic. Facebook and Instagram feed + Stories get the best lead volume at $5/day.

Step 3 of 8 — Targeting Reference Table

IndustryPrimary InterestsLayered (Narrow)
HVAC HVAC, Air conditioning, Heating, Ventilation, Home services, Contractors Small business owners, Self-employed, Business owner
Dental Dentistry, Dental care, Oral health, Dental practice management, Healthcare Small business owners, Private practice, Medical practice management
Plumbing Plumbing, Plumber, Home repair, Trade contractors, Construction Small business owners, Self-employed, Skilled trades

Step 4 of 8 — Create the Instant Lead Form

At the Ad level, tap "Create Form"

Choose Higher Intent form type (not Volume). Higher Intent adds a review screen which filters out accidental taps and improves lead quality.

Form intro — Headline and body

Headline: Stop Missing Business Calls
Body: "Find out how much revenue you're losing every time your phone goes to voicemail. Takes 30 seconds."

Questions — add these four fields

See the Lead Form Fields section below for exact field configuration.

Privacy Policy URL

Required by Meta. Enter: https://thecalltaker.com/privacy.html

Thank you screen

Headline: We'll be in touch within 24 hours
Description: "In the meantime, call (615) 784-5747 to hear your future AI receptionist right now."
CTA button: "Call Now" → tel:(615) 784-5747

Step 5 of 8 — Connect the Webhook

Go to Meta for Developers

Visit developers.facebook.com → My Apps → Create App → Business type → name it "The Call Taker Lead Handler".

Add the Leads product

In your app dashboard, find "Webhooks" product → Add. Subscribe to the leadgen field on your Page.

Set the webhook callback URL

Callback URL: the webhook URL below. Verify token: match your FB_VERIFY_TOKEN env var exactly.

POST https://thecalltaker.com/api/facebook-leads
Get your Page Access Token

In your Meta App → Tools → Graph API Explorer → select your Page → generate a long-lived Page Access Token. Set as FB_PAGE_ACCESS_TOKEN env var on your server.

Long-lived tokens expire in 60 days. Set a calendar reminder to refresh it.
Test the webhook

Meta provides a "Send Test" button after subscribing. Tap it — you should see the lead appear in your GHL contacts within 30 seconds and receive an ntfy URGENT alert.

Step 6 of 8 — Add Ad Creative

Ad format: Single Image

Use a single 1080x1080 image to start. Canva works fine from your phone. Keep it simple: dark background, large white text, The Call Taker logo/name bottom-left.

Image text

Keep text under 20% of the image area or Meta will reduce reach. One line: "24/7 Phone Answering for [Industry] Businesses" in white on dark background.

Paste ad copy from Section 5 below

Copy the Primary Text, Headline, and Description for the matching industry. These are already Meta-compliant.

Step 7 of 8 — Duplicate for Dental and Plumbing

Duplicate the HVAC ad set twice

In Ads Manager, tap the HVAC ad set → Duplicate (2 copies). Rename to "TCT — Dental Owners" and "TCT — Plumbing Owners".

Update targeting and creative per industry

Swap in the targeting interests from Section 4 and the ad copy from Section 5 for each industry. Create a separate lead form for each so you know which industry each lead came from.

Step 8 of 8 — Publish and Monitor

Review and publish

Meta reviews new ads within 24 hours. If rejected, check for: "AI" mentions (not allowed), pricing claims, before/after claims, misleading text. See the Meta policy alert at the top of this guide.

Check after 48 hours

You need at least 2-3 days of data before making changes. Look at: cost per lead, lead quality (do they answer?), which industry performs best.

Kill underperformers after 7 days

Pause any ad set with 0 leads after 7 days and shift budget to the winner. At $5/day you should see at least 1 lead per week per ad set if targeting is right.


4
Lead Form Fields
Four fields — keep it short, more fields = lower completion rate

Form Configuration

🏢
Business Name Custom question — Short answer — "What is your business name?"
Required
📞
Phone Number Pre-fill field (Meta auto-fills from their profile) — Phone number type
Required
🔧
Industry Custom question — Multiple choice — options: HVAC / Plumbing / Electrical / Dental / Other
Required
✉️
Email Address Pre-fill field (Meta auto-fills from their profile) — Email type
Required
Use Meta's pre-fill fields for Phone and Email — they auto-populate from the user's Facebook profile, which dramatically increases completion rates on mobile.

5
Ad Creative Copy — Wave 1
Copy-paste ready. No "AI" language — Meta compliant.
Do NOT use: "AI", "artificial intelligence", "machine learning", "automated AI", or any AI-related terms. Meta will reject the ad. Use "professional phone answering", "24/7 answering service", "live receptionist service" instead.
Ad Set 1 — HVAC
Every time your HVAC business sends a caller to voicemail, you lose a job.

The Call Taker answers your phone 24/7 — nights, weekends, and busy season. It books the appointment, captures the details, and texts you a summary.

No missed calls. No lost jobs. Less than one service call per month in cost.

See how much you're losing right now.
Never Miss an HVAC Call Again
24/7 phone answering for HVAC companies. Books appointments. No contracts.
Get Quote
Ad Set 2 — Dental
A new patient calls your dental practice after hours and gets voicemail.

They call the next practice. You just lost a patient worth $800-$2,000 a year.

The Call Taker answers for your practice 24/7 — evenings, weekends, holidays. It schedules appointments and sends you the details instantly.

Find out how many patients you're losing.
Stop Losing New Dental Patients
24/7 answering for dental practices. Schedules appointments. No contracts.
Get Quote
Ad Set 3 — Plumbing
Burst pipe at 11pm. Homeowner calls you — voicemail. They call the next plumber and pay $400-$800 for an emergency job you could have had.

The Call Taker answers your phone around the clock — including evenings and weekends. It captures every emergency, books the job, and sends you a text summary.

Stop giving emergency work to your competitors.
Answer Every Plumbing Emergency
24/7 answering for plumbing companies. Captures emergencies. No contracts.
Sign Up

6
Webhook Integration
Where Facebook sends leads and what happens next

Webhook URL (n8n or direct)

Enter this URL in your Meta App webhook configuration and in the Facebook Lead Ads test tool.

POST https://thecalltaker.com/api/facebook-leads
GET https://thecalltaker.com/api/facebook-leads?hub.mode=subscribe&hub.verify_token=YOUR_TOKEN&hub.challenge=CHALLENGE

The GET request is Facebook's verification challenge. Your webhook server responds with the hub.challenge value to prove ownership.

What Happens When a Lead Comes In

1
Facebook POSTs lead data to webhook server

Payload includes: lead ID, form ID, page ID, field_data (business name, phone, industry, email).

2
Webhook verifies signature using App Secret

HMAC-SHA256 of the raw payload body against FB_APP_SECRET. Rejects tampered requests.

3
GHL contact created with tags

Tags applied: facebook-lead, hot-lead, pilot-candidate, and the industry tag (e.g., hvac). Note added: "Source: Facebook Lead Ad - [industry]".

4
ntfy URGENT alert fires

You get a push notification: "[CRITICAL] Facebook Lead: [name] from [company] - [industry]". Checked by Donny speed-to-lead system within 10 minutes.

5
Immediate SMS sent to the lead

"Hey [name]! Thanks for your interest. We help [industry] businesses like [company] never miss another call. Want to hear your receptionist live? Call (615) 784-5747 or reply YES for a free 14-day pilot."

Environment Variables Required on Server

FB_VERIFY_TOKEN=your_chosen_verify_token_here
FB_APP_SECRET=from_meta_developer_app_settings
FB_PAGE_ACCESS_TOKEN=long_lived_page_token
TCT_GHL_API_KEY=pit-771d5b3f-847e-4cbe-8707-77ddc0f24b35
TCT_GHL_LOCATION_ID=tQb9YmrGDrdVUJYPKrsY
FB_VERIFY_TOKEN is a string YOU choose — it can be anything. Set it in your env vars, then enter the exact same string in the Meta webhook configuration screen. This proves to Meta that you own the server.

7
Running the Webhook Server
Port 5091 — runs alongside the Stripe webhook on 5090

Start / Test Commands

# Start the webhook server
python3 ~/thecalltaker/ops/facebook-lead-webhook.py

# Test the verification handshake (should return the challenge value)
curl "http://localhost:5091/webhook/facebook-leads?hub.mode=subscribe&hub.verify_token=YOUR_TOKEN&hub.challenge=test123"

# Check server status
python3 ~/thecalltaker/ops/facebook-lead-webhook.py status

# View recent leads
python3 ~/thecalltaker/ops/facebook-lead-webhook.py leads

launchd Plist (for 24/7 auto-start)

Save this as ~/Library/LaunchAgents/com.thecalltaker.ops.facebook-webhook.plist and load it with launchctl.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist ...>
<plist version="1.0">
<dict>
  <key>Label</key><string>com.thecalltaker.ops.facebook-webhook</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/python3</string>
    <string>/Users/moneymaker99/thecalltaker/ops/facebook-lead-webhook.py</string>
  </array>
  <key>RunAtLoad</key><true/>
  <key>KeepAlive</key><true/>
  <key>StandardOutPath</key><string>/Users/moneymaker99/thecalltaker-ops/logs/fb-webhook-stdout.log</string>
  <key>StandardErrorPath</key><string>/Users/moneymaker99/thecalltaker-ops/logs/fb-webhook-stderr.log</string>
</dict>
</plist>

8
What to Watch
Key metrics and when to act

First 14 Days — What Good Looks Like

MetricTargetAction if Below
Cost per lead < $75 Test new ad copy. Check audience size (aim 500K-2M).
Lead form open rate > 10% Rewrite headline — it's the first thing they see.
Lead form completion > 50% Reduce form fields. Make Business Name optional.
SMS reply rate > 20% Rewrite the welcome SMS. Test "YES" keyword CTA.
Demo booked rate > 10% of leads Follow up faster. Speed-to-lead under 5 minutes matters most.
Rule: Respond to every Facebook lead within 5 minutes. Donny's speed-to-lead system fires an ntfy URGENT alert the moment the contact is created. Don't let it sit. These leads are warm — they just filled out a form.

Want us to call you?

Our AI will call you in under 30 seconds.

Before you go

Get a free missed call audit

We'll call your business after hours and tell you exactly what your customers are hearing. Free. No strings.

Or hear the AI right now: (615) 784-5747

Hear AI Live Book Demo