Skip to content

Instantly share code, notes, and snippets.

@jalehman
Created February 26, 2026 06:14
Show Gist options
  • Select an option

  • Save jalehman/65b2a53d86e582e31f8bafe9bb25c006 to your computer and use it in GitHub Desktop.

Select an option

Save jalehman/65b2a53d86e582e31f8bafe9bb25c006 to your computer and use it in GitHub Desktop.
Chico Home Services Lead List #pagedrop
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Chico Home Services — Lead List</title>
<style>
:root {
--bg: #0f1117;
--card: #1a1d27;
--border: #2a2d3a;
--text: #e4e4e7;
--muted: #9ca3af;
--accent: #60a5fa;
--green: #4ade80;
--orange: #fb923c;
--purple: #a78bfa;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: 'Space Grotesk', -apple-system, BlinkMacSystemFont, sans-serif;
background: var(--bg);
color: var(--text);
padding: 2rem;
line-height: 1.5;
}
@import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&display=swap');
h1 { font-size: 1.8rem; font-weight: 700; margin-bottom: 0.25rem; }
.subtitle { color: var(--muted); margin-bottom: 1.5rem; font-size: 0.95rem; }
.stats {
display: flex; gap: 1.5rem; margin-bottom: 2rem; flex-wrap: wrap;
}
.stat {
background: var(--card); border: 1px solid var(--border);
border-radius: 8px; padding: 1rem 1.25rem;
}
.stat-num { font-size: 1.6rem; font-weight: 700; color: var(--accent); }
.stat-label { font-size: 0.8rem; color: var(--muted); text-transform: uppercase; letter-spacing: 0.05em; }
.filters {
display: flex; gap: 0.5rem; margin-bottom: 1.5rem; flex-wrap: wrap;
}
.filter-btn {
background: var(--card); border: 1px solid var(--border);
color: var(--muted); padding: 0.4rem 0.8rem; border-radius: 6px;
cursor: pointer; font-size: 0.82rem; font-family: inherit;
transition: all 0.15s;
}
.filter-btn:hover, .filter-btn.active {
border-color: var(--accent); color: var(--accent);
}
table {
width: 100%; border-collapse: collapse;
font-size: 0.85rem;
}
thead th {
text-align: left; padding: 0.6rem 0.75rem;
border-bottom: 2px solid var(--border);
color: var(--muted); font-weight: 600;
text-transform: uppercase; font-size: 0.72rem;
letter-spacing: 0.05em;
position: sticky; top: 0; background: var(--bg);
}
tbody td {
padding: 0.6rem 0.75rem;
border-bottom: 1px solid var(--border);
vertical-align: top;
}
tbody tr:hover { background: rgba(96, 165, 250, 0.05); }
.badge {
display: inline-block; padding: 0.15rem 0.5rem;
border-radius: 4px; font-size: 0.72rem; font-weight: 500;
white-space: nowrap;
}
.badge-hvac { background: rgba(251, 146, 60, 0.15); color: var(--orange); }
.badge-electrical { background: rgba(96, 165, 250, 0.15); color: var(--accent); }
.badge-roofing { background: rgba(167, 139, 250, 0.15); color: var(--purple); }
.badge-plumbing { background: rgba(45, 212, 191, 0.15); color: #2dd4bf; }
.badge-gc { background: rgba(244, 114, 182, 0.15); color: #f472b6; }
.badge-landscaping { background: rgba(74, 222, 128, 0.15); color: var(--green); }
.badge-pest { background: rgba(251, 191, 36, 0.15); color: #fbbf24; }
.badge-painting { background: rgba(248, 113, 113, 0.15); color: #f87171; }
.badge-pool { background: rgba(56, 189, 248, 0.15); color: #38bdf8; }
.badge-garage { background: rgba(156, 163, 175, 0.15); color: var(--muted); }
.badge-cleaning { background: rgba(192, 132, 252, 0.15); color: #c084fc; }
.badge-flooring { background: rgba(217, 119, 6, 0.15); color: #d97706; }
.badge-multi { background: rgba(251, 146, 60, 0.2); color: var(--orange); border: 1px solid rgba(251, 146, 60, 0.3); }
.badge-handyman { background: rgba(156, 163, 175, 0.15); color: var(--muted); }
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
.notes { color: var(--muted); font-size: 0.78rem; }
.strong-pick { border-left: 3px solid var(--green); }
.strong-pick td:first-child::before {
content: '★'; color: var(--green); margin-right: 0.4rem;
}
.count { color: var(--muted); font-size: 0.78rem; margin-left: 0.3rem; }
@media (max-width: 768px) {
body { padding: 1rem; }
table { font-size: 0.78rem; }
.stats { gap: 0.75rem; }
}
</style>
</head>
<body>
<h1>🔧 Chico Home Services — Lead List</h1>
<p class="subtitle">66 local/owner-operated businesses across 13 sub-verticals · Desk research, Feb 2026 · National chains excluded</p>
<div class="stats">
<div class="stat"><div class="stat-num">66</div><div class="stat-label">Total Leads</div></div>
<div class="stat"><div class="stat-num">13</div><div class="stat-label">Sub-verticals</div></div>
<div class="stat"><div class="stat-num">4</div><div class="stat-label">Strong First-Contact</div></div>
</div>
<div class="filters">
<button class="filter-btn active" onclick="filterAll()">All</button>
<button class="filter-btn" onclick="filterBy('hvac')">HVAC<span class="count">9</span></button>
<button class="filter-btn" onclick="filterBy('electrical')">Electrical<span class="count">6</span></button>
<button class="filter-btn" onclick="filterBy('roofing')">Roofing<span class="count">5</span></button>
<button class="filter-btn" onclick="filterBy('plumbing')">Plumbing<span class="count">2</span></button>
<button class="filter-btn" onclick="filterBy('gc')">General Contractor<span class="count">3</span></button>
<button class="filter-btn" onclick="filterBy('landscaping')">Landscaping<span class="count">5</span></button>
<button class="filter-btn" onclick="filterBy('pest')">Pest Control<span class="count">6</span></button>
<button class="filter-btn" onclick="filterBy('painting')">Painting<span class="count">6</span></button>
<button class="filter-btn" onclick="filterBy('pool')">Pool Service<span class="count">6</span></button>
<button class="filter-btn" onclick="filterBy('cleaning')">Cleaning<span class="count">7</span></button>
<button class="filter-btn" onclick="filterBy('flooring')">Flooring<span class="count">5</span></button>
<button class="filter-btn" onclick="filterBy('other')">Other<span class="count">6</span></button>
</div>
<table>
<thead>
<tr>
<th>Business</th>
<th>Sub-vertical</th>
<th>Phone</th>
<th>Contact</th>
<th>Website</th>
<th>Notes</th>
</tr>
</thead>
<tbody id="leads">
</tbody>
</table>
<script>
const leads = [
{name:"Experts In Your Home",vert:"Multi-trade (HVAC/Plumbing/Electrical)",cat:"multi",phone:"(530) 924-5564",contact:"",url:"https://www.expertsinyourhome.com",notes:"Multi-trade; high volume; ideal for dispatch/booking automation",strong:true},
{name:"Pioneer Engineering & Construction",vert:"Multi-trade",cat:"multi",phone:"(530) 591-1215",contact:"",url:"https://www.pioneereandc.com",notes:"Est. 1997; GC + HVAC + plumbing + electrical"},
{name:"Huft Home Services",vert:"Multi-trade",cat:"multi",phone:"",contact:"",url:"https://www.hufthomeservices.com",notes:"HVAC + electrical + plumbing + insulation"},
{name:"McClelland Air Conditioning",vert:"HVAC",cat:"hvac",phone:"",contact:"",url:"https://www.mcclellandair.com",notes:"AC, heater, furnace install & repair"},
{name:"Climate & Energy Solutions",vert:"HVAC/Solar/Electrical",cat:"hvac",phone:"",contact:"",url:"https://www.caeschico.com",notes:"HVAC + solar + electrical"},
{name:"Jessee Heating & Air",vert:"HVAC",cat:"hvac",phone:"",contact:"",url:"https://www.jesseeheatingandair.com",notes:"NATE Certified; sheet metal ops"},
{name:"Air-Art Heating & Air",vert:"HVAC",cat:"hvac",phone:"(530) 895-1420",contact:"",url:"https://airartco.com",notes:"Fast reliable HVAC in Chico area"},
{name:"Royal Aire Heating AC & Solar",vert:"HVAC/Solar",cat:"hvac",phone:"(530) 899-9999",contact:"",url:"https://www.wecareroyalaire.com",notes:"AC, heating, insulation, water treatment, solar"},
{name:"Alternative Heating & Air",vert:"HVAC",cat:"hvac",phone:"",contact:"",url:"https://www.alternativeheatingandair.com",notes:"AC & heating repair/replacement/install"},
{name:"Story Heating & Air",vert:"HVAC",cat:"hvac",phone:"",contact:"",url:"https://storyheatingair.com",notes:"Serves Chico, Forest Ranch, Oroville, Paradise"},
{name:"Chico Air Heating & Cooling",vert:"HVAC",cat:"hvac",phone:"",contact:"",url:"https://chicoairheatingcooling.com",notes:"25+ years serving Chico area"},
{name:"Cascade Electric",vert:"Electrical",cat:"electrical",phone:"",contact:"",url:"https://cascadeelectricchico.com",notes:"30+ years; residential & commercial"},
{name:"Egan Electric",vert:"Electrical",cat:"electrical",phone:"",contact:"",url:"https://www.eganelectric.com",notes:"Since 1991; full-service licensed"},
{name:"On Call Electrical",vert:"Electrical",cat:"electrical",phone:"(530) 507-0001",contact:"",url:"https://www.imbeerman.com",notes:"Repairs, install; free estimates"},
{name:"Reed Electric",vert:"Electrical",cat:"electrical",phone:"",contact:"",url:"",notes:"Top Yelp-rated electrician in Chico"},
{name:"Captain Todd's Lighting & Electrical",vert:"Electrical",cat:"electrical",phone:"(530) 685-5429",contact:"",url:"https://www.captaintoddselectrical.com",notes:"Electrician, contractor, wiring"},
{name:"Chico Electric",vert:"Electrical/Solar",cat:"electrical",phone:"",contact:"",url:"https://www.chicoelectric.com",notes:"Electrical contracting & solar energy"},
{name:"Sac River Electric",vert:"Electrical",cat:"electrical",phone:"",contact:"",url:"",notes:"Licensed and certified; serves Chico"},
{name:"Baird Roofing",vert:"Roofing",cat:"roofing",phone:"(530) 342-1631",contact:"",url:"https://www.bairdroofingco.com",notes:"30+ years; free estimates"},
{name:"Steele's Roofing",vert:"Roofing",cat:"roofing",phone:"(530) 895-8970",contact:"",url:"https://steelesroofing.com",notes:"Claims 24/7 availability"},
{name:"Powell Roofing Inc.",vert:"Roofing",cat:"roofing",phone:"",contact:"",url:"https://www.powellroofinginc.com",notes:"Since 2005; 35+ years experience"},
{name:"Thurman Roofing & Construction",vert:"Roofing",cat:"roofing",phone:"",contact:"",url:"https://www.thurmanrcinc.com",notes:"Family-owned; since 2012"},
{name:"Nor-Cal Roofing",vert:"Roofing",cat:"roofing",phone:"",contact:"",url:"https://nor-calroofing.com",notes:"Locally owned; 14+ years"},
{name:"Atlas Plumbing & Mechanical",vert:"Plumbing",cat:"plumbing",phone:"",contact:"",url:"",notes:"Plumbing specialist"},
{name:"Earl's Performance Plumbing",vert:"Plumbing",cat:"plumbing",phone:"",contact:"",url:"",notes:"Plumbing specialist"},
{name:"Airehart Construction",vert:"General Contractor",cat:"gc",phone:"",contact:"Brian Airehart",url:"https://www.airehartinc.com",notes:"25+ years; high-end custom residential; design/build"},
{name:"Gilmore Construction",vert:"General Contractor/Remodeling",cat:"gc",phone:"",contact:"John Gilmore",url:"https://www.gilmoreconstructionca.com",notes:"Remodeling specialist"},
{name:"Contreras Construction",vert:"General Contractor",cat:"gc",phone:"",contact:"",url:"",notes:"Top Yelp-rated GC in Chico"},
{name:"Morris Homes",vert:"General Contractor",cat:"gc",phone:"",contact:"",url:"",notes:"30+ years; new & custom homes"},
{name:"Sal Rodriguez Landscapes",vert:"Landscaping",cat:"landscaping",phone:"(530) 532-9303",contact:"",url:"https://www.rodriguezlandscapes.net",notes:"Nursery + custom residential/commercial"},
{name:"Chop Chop Landscaping",vert:"Landscaping",cat:"landscaping",phone:"",contact:"",url:"https://www.landscapingchicoca.com",notes:"Irrigation, drought-tolerant, hardscape"},
{name:"Mike's Yard Care",vert:"Landscaping/Lawn Care",cat:"landscaping",phone:"(530) 638-5469",contact:"",url:"https://mikes-yardcare.com",notes:"Maintenance, irrigation, hardscape"},
{name:"Blue Oak Landscaping",vert:"Landscaping",cat:"landscaping",phone:"",contact:"",url:"https://www.blueoaklandscaping.com",notes:"Custom residential; pools, bocce, patio covers"},
{name:"Inside Out Landscaping & Janitorial",vert:"Landscaping/Cleaning",cat:"landscaping",phone:"",contact:"",url:"https://insideoutlandscapingandjanitorial.com",notes:"Dual service lines across Butte County",strong:true},
{name:"Hobbs Pest Solutions",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://hobbspestsolutions.com",notes:"Full-service; Chico + Yuba/Sutter counties"},
{name:"House Detective Termite Control",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://www.hdetective.com",notes:"Termite specialist; residential & commercial"},
{name:"Dave Brown's Pest Control",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://www.davebrownspestcontrolinc.com",notes:"Licensed; competitive prices"},
{name:"EcoGuard Pest Management",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://www.ecoguardpestmanagement.com",notes:"Licensed, bonded, insured"},
{name:"Advanced IPM",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://advancedipm.com",notes:"Ant control to termite removal"},
{name:"Big Time Pest Control",vert:"Pest Control",cat:"pest",phone:"",contact:"",url:"https://www.bigtimepestcontrol.com",notes:"Local; ants, wasps, rodents, fleas"},
{name:"Chico Painting",vert:"Painting",cat:"painting",phone:"",contact:"",url:"https://www.chicopainting.com",notes:"Residential and commercial"},
{name:"Joe Shaw Painting",vert:"Painting",cat:"painting",phone:"",contact:"",url:"https://www.joeshawpaintingchico.com",notes:"Est. 1975; Chico/Paradise/Durham/Capay",strong:true},
{name:"SGB Custom Painting",vert:"Painting",cat:"painting",phone:"",contact:"",url:"https://www.sgbpainting.com",notes:"Premier contractor; prep work focus"},
{name:"SM Painting",vert:"Painting",cat:"painting",phone:"",contact:"Sergio",url:"https://smpaintingchico.com",notes:"Highly rated; big & small jobs"},
{name:"Royal Painting Contractor",vert:"Painting",cat:"painting",phone:"",contact:"Nick Salerno III",url:"https://www.royalpainting.co",notes:"10 years; interior/exterior"},
{name:"Steve Caperello Painting",vert:"Painting",cat:"painting",phone:"(530) 828-1821",contact:"",url:"https://www.stevecaperellopainting.com",notes:"Professional painting; free estimates"},
{name:"Clear Choice Pool Service",vert:"Pool Service",cat:"pool",phone:"",contact:"",url:"https://www.clearchoiceps.com",notes:"Cleaning & repair; Chico focused"},
{name:"Chico Pools",vert:"Pool Service",cat:"pool",phone:"",contact:"",url:"https://chicopools.com",notes:"~20 years serving greater Chico"},
{name:"Perfection Pools & Spas",vert:"Pool Service/Construction",cat:"pool",phone:"",contact:"",url:"https://www.perfectionpoolsandspas.com",notes:"Since 1981; most experienced in area",strong:true},
{name:"The Pool Pro",vert:"Pool Service",cat:"pool",phone:"",contact:"",url:"https://thepoolprochico.com",notes:"Full-service; chemistry, maintenance, repair"},
{name:"Sierra Pools",vert:"Pool Construction/Service",cat:"pool",phone:"",contact:"",url:"https://www.sierrapoolsinc.com",notes:"#1 pool company Butte County 2023 & 2024"},
{name:"Holiday Pools & Spa",vert:"Pool Supply/Service",cat:"pool",phone:"(530) 343-8245",contact:"",url:"https://www.holidaypools.com",notes:"936 Mangrove Ave; retail + service"},
{name:"The Door Company",vert:"Garage Door",cat:"other",phone:"(530) 345-5555",contact:"Mark",url:"https://www.thedoorco.net",notes:"Garage door + gate automation; 31 Yelp reviews"},
{name:"Chico Repair Pros",vert:"Handyman",cat:"other",phone:"",contact:"",url:"https://chicorepairpros.com",notes:"Home repair, appliance install, deck/fence"},
{name:"Sanitorial Janitorial Service",vert:"Commercial Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://www.sanitorialjanitorial.com",notes:"Full-service residential/commercial"},
{name:"Chico Commercial Cleaning",vert:"Commercial Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://www.chicocommercialcleaning.com",notes:"Professional janitorial services"},
{name:"T2B Cleaning",vert:"Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://cleaningserviceschico.com",notes:"15+ years; commercial & residential"},
{name:"Coogan Cleaning",vert:"Commercial Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://coogancleaning.com",notes:"Tailored janitorial & toiletry solutions"},
{name:"Clean Master",vert:"Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://cleanmasterservices.com",notes:"30 years; residential & commercial"},
{name:"DirtyWork Commercial Cleaning",vert:"Commercial Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://www.dirtywork.site",notes:"Top-rated; eco-friendly; locally owned"},
{name:"White Janitorial",vert:"Commercial Cleaning",cat:"cleaning",phone:"",contact:"",url:"https://www.whitejanitorialllc.com",notes:"Office, carpet, floor care; flexible plans"},
{name:"Wood Brothers Carpet & Flooring",vert:"Flooring",cat:"flooring",phone:"",contact:"",url:"https://www.woodbrotherscarpet.com",notes:"Since 1973; family-operated"},
{name:"Hughes Hardwoods",vert:"Flooring",cat:"flooring",phone:"(530) 343-8746",contact:"",url:"https://www.hugheshardwoodschico.com",notes:"Hometown flooring store"},
{name:"Towne Flooring Center",vert:"Flooring",cat:"flooring",phone:"",contact:"",url:"https://townecarpet.com",notes:"Quality flooring from top brands"},
{name:"Chico Carpet One",vert:"Flooring",cat:"flooring",phone:"",contact:"",url:"https://www.carpetonechico.com",notes:"Carpet and flooring store"},
{name:"Moore Flooring",vert:"Flooring",cat:"flooring",phone:"",contact:"",url:"",notes:"Hardwood retailer & installation; Chico & Paradise"},
];
const badgeClass = c => {
const map = {multi:'multi',hvac:'hvac',electrical:'electrical',roofing:'roofing',plumbing:'plumbing',gc:'gc',landscaping:'landscaping',pest:'pest',painting:'painting',pool:'pool',cleaning:'cleaning',flooring:'flooring',other:'handyman'};
return 'badge badge-'+(map[c]||'handyman');
};
function render(filter) {
const tbody = document.getElementById('leads');
const filtered = filter ? leads.filter(l => l.cat === filter || (filter === 'other' && !['hvac','electrical','roofing','plumbing','gc','landscaping','pest','painting','pool','cleaning','flooring'].includes(l.cat) && l.cat !== 'multi')) : leads;
tbody.innerHTML = filtered.map(l => `
<tr class="${l.strong?'strong-pick':''}">
<td><strong>${l.name}</strong></td>
<td><span class="${badgeClass(l.cat)}">${l.vert}</span></td>
<td>${l.phone||'—'}</td>
<td>${l.contact||'—'}</td>
<td>${l.url?`<a href="${l.url}" target="_blank">${new URL(l.url).hostname.replace('www.','')}</a>`:'—'}</td>
<td class="notes">${l.notes||''}</td>
</tr>
`).join('');
}
function filterAll() {
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
document.querySelector('.filter-btn').classList.add('active');
render(null);
}
function filterBy(cat) {
document.querySelectorAll('.filter-btn').forEach(b => b.classList.remove('active'));
event.target.closest('.filter-btn').classList.add('active');
render(cat);
}
render(null);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment