Senior Google Ads + Microsoft Ads Builder (DFW Roofing – High Competition)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Gig

SALARY

400

HOURS PER WEEK

16

DATE UPDATED

Apr 17, 2026

JOB OVERVIEW

DESCRIPTION:

I need a heavy-hitting Ads Specialist to build a complete inbound lead generation system for a roofing company in the Dallas–Fort Worth market.

This is a high-competition, high-CPC environment. I am not hiring beginners or generalists.

I need a proven operator who has already generated inbound calls for high-ticket service businesses (Roofing, HVAC, Solar, etc.) in major metro markets.

SCOPE OF WORK:

Structure:
Build a high-performance Google Ads Search campaign, then mirror it into Microsoft Ads (Bing).

Match Types:
Expert-level use of Exact and Phrase match. No wasted spend on broad junk.

Negatives:
Build and deploy a strong negative keyword list from Day 1.

Conversion Focus:
Campaign must be built for inbound calls and qualified leads, not just traffic.

Scheduling:
Ad scheduling must align strictly with live call-answering hours.

Tracking:
Full setup of call tracking and form tracking integrated into GoHighLevel (GHL).

Verification:
You will fully test and verify the lead flow before final handoff.

REQUIREMENTS:

Deep experience in high-CPC, competitive local service markets
Proven results with high-ticket services (roofing, HVAC, etc.)
Strong understanding of cost-per-lead control in competitive environments
Experience integrating directly with GHL
Ability to move from build to live launch quickly

ONGOING (OPTIONAL):

After the initial build, I am open to light weekly optimization:

performance review
negative keyword expansion
bid and budget adjustments

No long-term contract required.

HOW TO APPLY (MANDATORY FILTER):

Do not apply without proof.

To be considered, include:

Proof of Results:
Screenshots or data showing inbound calls/leads generated

Case Studies:
Brief examples from competitive local markets

Strategy (2 sentences max):
Explain how you prevent budget bleed in $20+ CPC environments

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0010
Controller Execution Time ( Jobseekers / Job )  0.0140
Total Execution Time  0.0158
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,485,488 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Google-Ads-Microsoft-Ads-Builder-DFW-Roofing-High-Competition-1625947
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0048 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1625947
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 890754
 LIMIT 1 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1625947
AND `misc`.`idIS NULL 
0.0005   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-04-19',ej.date_added) duration_daysDATEDIFF('2026-04-19',e.rebill_date) duration_rebillej.*, e.deactivate FROM employers eemployer_jobs ej WHERE e.employer_id ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-04-19',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1625947' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1625947 
0.0007   UPDATE employer_jobs SET hit_counts '***Apr-17-2026=218***Apr-18-2026=5***Apr-19-2026=2' WHERE job_id'1625947'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Apr-2026=225' WHERE job_id'1625947'  
0.0004   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1625947' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1625947 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '890754'
AND `date_added` >= '2022-06-08' 
0.0003   select from teasers 
0.0002   SELECT FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)