Local PPC

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

TYPE OF WORK

Any

SALARY

N/A

HOURS PER WEEK

5

DATE UPDATED

Aug 23, 2026

JOB OVERVIEW

Read this part first

This role has an unusual constraint. Please do not apply until you have read it.

The practice is a healthcare provider, so patient privacy rules prevent us from running normal conversion tracking. Google Analytics on this site records no conversions at all, and it never will. We also cannot pass patient information back to ad platforms the way an ecommerce store would.

That means you cannot manage these campaigns the usual way. There is no tidy conversion column to optimize toward. You will have to build the measurement chain yourself using call tracking, form tracking, and data the practice records at the front desk when a patient books.

If your process depends on smart bidding against on-site conversion data, this role will frustrate you and you will not do well in it. If you have run accounts where you had to work out what was actually happening from imperfect signals, keep reading.

About the work

We manage marketing for a family dental practice in Gilbert, Arizona. Paid search already works here at a small scale and is profitable. We are not trying to rescue a failing account.

The opportunity is a shift in what we buy. General new patient volume is profitable but has almost no room to grow, because the cost per patient is already close to what a general patient is worth. Higher value treatments carry far more headroom, so the plan is to move budget toward searches from people who need bigger work.

We have already done the strategy. We know which patient segments to target, in what order, and which ones to deliberately avoid. What we need is someone to build, run and measure the campaigns properly.

What you will do

Build and run Google Ads campaigns

Build search campaigns for three defined patient segments, in a set sequence, starting with the lowest risk one
Write ad copy and build out keywords, negatives, and ad extensions
Manage budgets, bids, and pacing across a small account
Resolve an open Google Ads policy flag on phone numbers in ad text
Build and test landing pages in coordination with our team

Build the measurement chain (this is the hard part)

Set up call tracking with a separate tracked number per campaign, so we can see call volume and how many calls become booked appointments
Set up form and booking tracking through our online scheduler
Work with the practice so each campaign has its own entry in the front desk intake list, which lets us tie campaigns to actual treatment months later
Import offline conversion data back into Google Ads where we are permitted to

Report on what matters

Report on booked appointments and treatment value, not on clicks and leads. Lead counts alone will mislead us badly in this business and we will not accept them as a success measure
Group results by the month a patient first visited, because high value cases can take 30 to 90 days to complete
Watch the cost of the next patient, not the average across all of them
Weekly written update on what you changed, what happened, and what you recommend next
What we will NOT be buying

Please note these, because they are deliberate decisions based on our data, not oversights:

General cleaning and checkup volume
Emergency and same day pain searches
Pediatric and family checkups
Broad awareness or reach campaigns

If your proposal is to run broad awareness campaigns or scale general patient volume, we are not a fit.

What we need from you
3 or more years managing Google Ads for US-based businesses, with real budget responsibility
You have set up call tracking before (CallRail, WhatConverts, or similar) and understand why it matters
You have imported offline conversions into Google Ads, or you can clearly explain how you would
You are comfortable being measured on downstream revenue rather than lead volume
You can build and test landing pages, or work closely with someone who does
Clear written English. Your weekly reports are how we will know what is happening
Honest reporting. If a campaign is not working, we want to hear it in week two, not month four
Nice to have
Healthcare, dental, or other regulated industry experience
Familiarity with HIPAA constraints on advertising and tracking
Experience with high consideration purchases that take weeks to close
Google Ads certification

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0022
Controller Execution Time ( Jobseekers / Job )  0.0291
Total Execution Time  0.0322
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,510,640 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Local-PPC-1715155
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0153 seconds)  (Hide)
0.0013   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0013   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1715155
 LIMIT 1 
0.0017   SELECT *
FROM `employers`
WHERE `employer_id` = 625323
 LIMIT 1 
0.0016   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1715155
AND `misc`.`id` IS NULL 
0.0007   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-10-04',ej.date_added) duration_days, DATEDIFF('2026-10-04',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_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-10-04',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1715155' 
0.0016   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1715155 
0.0020   UPDATE employer_jobs SET hit_counts = '***Aug-23-2026=208***Aug-24-2026=185***Aug-25-2026=60***Aug-26-2026=11***Aug-27-2026=9***Aug-28-2026=7***Aug-29-2026=5***Aug-30-2026=5***Aug-31-2026=6***Sep-01-2026=4***Sep-02-2026=7***Sep-03-2026=3***Sep-04-2026=2***Sep-05-2026=3***Sep-07-2026=4***Sep-08-2026=2***Sep-09-2026=4***Sep-10-2026=2***Sep-11-2026=3***Sep-12-2026=1***Sep-13-2026=1***Sep-14-2026=2***Sep-15-2026=1***Sep-16-2026=1***Sep-17-2026=10***Sep-18-2026=4***Sep-19-2026=1***Sep-20-2026=1***Sep-21-2026=3***Sep-22-2026=1***Sep-23-2026=3***Sep-24-2026=1***Sep-25-2026=3***Sep-26-2026=2***Sep-27-2026=2***Sep-28-2026=1***Sep-29-2026=5***Sep-30-2026=2***Oct-01-2026=2***Oct-02-2026=2***Oct-03-2026=1***Oct-04-2026=2' WHERE job_id= '1715155'  
0.0008   UPDATE employer_jobs SET monthly_hits = '***Aug-2026=496***Sep-2026=79***Oct-2026=7' WHERE job_id= '1715155'  
0.0012   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1715155' AND status LIKE 'sent%' ORDER BY id DESC  
0.0007   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1715155 
0.0009   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '625323'
AND `date_added` >= '2022-06-08' 
0.0010   select * from teasers 
0.0005   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)