Senior Media Buyer

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

TYPE OF WORK

Full Time

SALARY

1500

HOURS PER WEEK

40

DATE UPDATED

Aug 6, 2026

JOB OVERVIEW

We are a US digital marketing agency working exclusively with roofing and home services contractors. We run paid ads, SEO, and websites for contractors who depend on us for their phone to ring. When campaigns slow down, our clients feel it that same week.

The role

You would own the paid media for 40+ active client accounts across Meta and Google, and build 2 to 3 brand new client accounts from zero every month.

That volume is the most important thing to understand. You are not going deep on five accounts. You are keeping forty-plus healthy, catching problems fast, and knowing which handful need real attention this week versus which are running fine and should be left alone. Triage is as much the skill here as optimization.

Our clients are contractors spending between $1,500 and $10,000 a month. They buy leads, not impressions, and they notice within days when the phone goes quiet. If a form breaks on a Tuesday, we cannot find out about it on Friday.

There is no junior buyer under you and no one else checking your work. You are the person who knows why every account did what it did last week.

What your week looks like

Every morning, 45 to 60 minutes. A health sweep across every account. Google MCC sorted by yesterday's spend, Meta billing view. You are hunting for zeros, declined cards, disapprovals, suspensions, and spend limits. Then the watchlist: any client underperforming, at risk, recovering, or newly launched gets looked at every single day.

Monday, Wednesday, Friday, 2 to 3 hours. Last 7 days versus prior 7 for every client. Leads, spend, cost per lead. Most are fine and you move on in seconds. Flag anything down 25% on leads, up 30% on cost per lead, or at zero for 48 hours. Then diagnose in order: tracking, delivery, auction, creative fatigue, market, lead quality. You do not touch a campaign before ruling out a broken form.

Throughout the week. Optimization passes. Search terms and negatives, cutting keywords burning budget with no conversions, rotating RSAs, pausing dead ad sets, requesting creative before frequency climbs, watching budget pacing. You are also the paid ads answer desk for our account managers, who are the ones on client calls.

New builds, 2 to 3 a month. Roughly a day and a half of real work each. Account creation, billing, full tracking setup, creative briefs, campaign build on both platforms, pre-launch QA, then close monitoring for the first 72 hours.

Friday. A written report covering every account and what you changed.

What we need from you

Volume experience. You have managed 20+ accounts at once. This is our biggest filter. Running three large accounts well is a different job than running forty small ones.

Deep Google Search skill. Most of our spend and lead volume comes from Search, so this is where we will probe hardest. Account structure, match type strategy, negatives, bid strategy selection, RSA testing. We want optimizations that move cost per lead, not bid nudges and copy tweaks that fill a log without changing a number. You should also be current on what Google ships, not running a playbook from two years ago.

Strong Meta creative analysis. On Meta the algorithm handles most of the targeting, so your value is reading creative data properly. Judging at the ad level rather than the ad set. Using hook rate, hold rate, CTR, and frequency as diagnostics while cost per lead makes the actual decision. Knowing when you have enough data to call a winner and when you are looking at noise. And telling our designers why an ad won, not just which one won.

Tracking you can build yourself. Meta Pixel and Conversions API with proper deduplication, Google conversion actions for forms and calls, Google Tag Manager, call tracking. You verify by submitting a real test lead and following it all the way to the CRM, not by checking that a tag says active.

Clear written English. You will explain lead drops, write weekly reports we can act on, and answer account manager questions in a way they can pass straight to a client.

Also: 3+ years on Meta and Google for lead generation, experience in local or home services, comfort in Business Manager with dozens of accounts and billing profiles, working knowledge of Zapier, and reliable power and internet.

Nice to have: roofing, HVAC, plumbing, or restoration experience. You do not need experience with our specific CRM or reporting tools. We will train you on those.

Not a fit if

You have only run ecommerce or brand campaigns. You need someone to tell you what to check when performance drops. You have only worked on a handful of accounts. You want to spend a full day inside one account. You are juggling other clients or agencies.

Details

Full time, fully remote. Starting at $1,500 USD per month with room to grow based on performance. Minimum 4 hours of daily overlap with 9am to 5pm US Eastern.

To apply

Reply with three things:

The most accounts you have personally managed at once, and the total monthly spend
One Google Search optimization that moved cost per lead, with before and after numbers
How you d ---------- a Meta ad is a winner worth scaling

VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0007
Controller Execution Time ( Jobseekers / Job )  0.0125
Total Execution Time  0.0139
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,509,968 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Media-Buyer-1704293
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0077 seconds)  (Hide)
0.0003   SELECT *
                                
FROM exrates
                                WHERE rate_name 
'USD-PHP' 
0.0003   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1704293
 LIMIT 1 
0.0007   SELECT *
FROM `employers`
WHERE `employer_id` = 593655
 LIMIT 1 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `miscON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1704293
AND `misc`.`idIS NULL 
0.0004   SELECT e.business_namee.logoe.websitee.rebill_datee.date_added member_datehitsDATEDIFF('2026-08-11',ej.date_added) duration_daysDATEDIFF('2026-08-11',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-08-11',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != AND ej.deleted AND job_id '1704293' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `scON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1704293 
0.0018   UPDATE employer_jobs SET hit_counts '***Aug-06-2026=417***Aug-07-2026=137***Aug-08-2026=80***Aug-11-2026=1' WHERE job_id'1704293'  
0.0006   UPDATE employer_jobs SET monthly_hits '***Aug-2026=635' WHERE job_id'1704293'  
0.0008   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id '' AND job_id '1704293' 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` = 1704293 
0.0008   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '593655'
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)