Web Scraping & Lead Enrichment Specialist (Python) — Contractor Qualifier Connect (CQC)

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

TYPE OF WORK

Part Time

SALARY

$5/hour to start plus bonus

HOURS PER WEEK

20

DATE UPDATED

Sep 8, 2026

JOB OVERVIEW

US Client | Part-Time (20+ hrs/week) |
Part-Time (20+ hrs/week) | PH hours flexible | Pay: $5/hour to start + $1 bonus per qualified lead
Must work EST
About Contractor Qualifier Connect
Contractor Qualifier Connect (CQC) connects licensed contractor qualifiers with construction companies that need licensing coverage across multiple U.S. states. We run our own outreach engine — our own scrapers, our own enrichment process, our own send infrastructure — instead of renting a subscription tool and hoping it works.

The Role
This is not a "paste leads into a spreadsheet" job. You will build and run your own Python scrapers against state contractor licensing sites, then take that raw data through a full quality pipeline — auditing, company matching, email discovery, quality-grading, deduplication, and exclusion-checking — before it's ever allowed into an outreach send. You d ---------- what's usable, what needs enrichment, and what gets thrown out. You're the gatekeeper for lead quality on your assigned state.

What Your Week Actually Looks Like

Scrape: Pull raw contractor license records using a custom Python scraper you build (or adapt) for that state's public licensing/government data source.
Audit the raw list: Sort every lead into Usable (has email + full contact details), Needs Enrichment (complete but missing email), or Unusable (too incomplete to fix) — before spending a single enrichment credit.
Find the company: Run each usable lead through Apollo (or another enrichment tool) to resolve it to a verified company and domain, and confirm the match actually fits the license record (name, location, trade).
Find the email: Use enrichment tools to attach a real, deliverable email to that verified company — cheapest lookups first, escalating to paid steps only once a lead has already cleared the earlier checks.
Quality-check every match: Grade each result Confident, Needs Review, or Rejected. Needs Review means you do the manual lookup yourself to confirm before it moves forward — nothing gets waved through automatically.
Dedup: Check the new batch against itself and against everything already sent or queued, using spreadsheet tools, so no contact is ever hit twice.
Queue for sending: Cross-check against the exclusion list (already-signed qualifiers, unsubscribes) before a lead goes anywhere near a send list — then add it to that exclusion list yourself.
Hand off to sending: Import the finished list into QuickMail or Brevo, confirm the pacing/safeguards are set correctly, and monitor opens, replies, and sign-ups once it's live.
Report daily: Sync with the content/campaign coordinator on progress per state, so campaign copy and landing pages can be adjusted around what's actually converting.

Tools You'll Be Working In

Python (your own scrapers — one built per state/site structure)
Apollo or similar enrichment tools (company + email discovery)
Spreadsheets (auditing, dedup, exclusion-list tracking)
QuickMail and Brevo (sending, pacing, deliverability safeguards)
VS Code or similar (writing, testing, and debugging your scraping scripts)

What We're Looking For

At least 3 years of experience in lead prospecting, web scraping, or a related data/outreach role.
Solid coding ability in Python (or a comparable scripting language) — you can write a scraper from scratch, not just configure a no-code tool.
Comfortable in VS Code or similar: running scripts, managing files, using the terminal, basic Git.
Real experience building/maintaining scraping tools yourself — not solely dependent on paid AI scraping subscriptions.
Judgment: you can look at a messy record and d ---------- usable vs. needs-enrichment vs. unusable, and you don't wave through a shaky match just to hit a number.
Comfortable working state-by-state data compliance nuances (or genuinely willing to learn them).
Detail-oriented and resourceful when a data source changes, blocks you, or breaks your scraper.
Self-starter — able to run your pipeline independently and report progress clearly, daily.

What Would Set You Apart

Background in construction, contractor licensing, or B2B lead generation.
Hands-on experience with cold outreach tools (QuickMail, Brevo, Instantly, etc.).
Know-how getting past anti-scraping roadblocks — rate limits, proxies, headless browsers.
A GitHub or portfolio link showing a scraper you've built.

Why Join CQC

Fully remote, with a schedule that can be discussed and arranged.
You own your pipeline — your scrapers, your tooling choices, your quality bar.
Small, fast-moving team; direct access to the people making campaign decisions.

How to Apply
To help us filter for people who actually read this posting, please start your application with "Prospector Ready – [Your Name]" and include:

A short (2-3 sentence) description of a scraper you've built — what site/data source, what language, and one problem you had to solve when it broke or got blocked. A GitHub/code link is a plus.
Your available weekly hours and preferred working hours (PH time is fine — this is a remote-first, US client operation).
Your years of experience and the industries you've worked in.
Results you've hit with a past or current client — leads generated, conversion rate, or sign-ups, whatever numbers you can share.

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.0141
Total Execution Time  0.0159
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,511,248 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Web-Scraping-Lead-Enrichment-Specialist-Python-Contractor-Qualifier-Connect-CQC-1725979
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0061 seconds)  (Hide)
0.0011   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1725979
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 901987
 LIMIT 1 
0.0003   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1725979
AND `misc`.`id` IS NULL 
0.0005   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 = '1725979' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1725979 
0.0007   UPDATE employer_jobs SET hit_counts = '***Sep-08-2026=670***Sep-09-2026=51***Sep-10-2026=32***Sep-11-2026=21***Sep-12-2026=16***Sep-13-2026=10***Sep-14-2026=19***Sep-15-2026=4***Sep-16-2026=8***Sep-17-2026=4***Sep-18-2026=7***Sep-19-2026=5***Sep-20-2026=9***Sep-21-2026=2***Sep-22-2026=5***Sep-23-2026=2***Sep-24-2026=5***Sep-25-2026=1***Sep-26-2026=4***Sep-27-2026=5***Sep-28-2026=3***Sep-29-2026=3***Sep-30-2026=5***Oct-01-2026=4***Oct-02-2026=2***Oct-04-2026=2' WHERE job_id= '1725979'  
0.0006   UPDATE employer_jobs SET monthly_hits = '***Sep-2026=888***Oct-2026=8' WHERE job_id= '1725979'  
0.0003   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1725979' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1725979 
0.0005   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '901987'
AND `date_added` >= '2022-06-08' 
0.0003   select * from teasers 
0.0003   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)