Cornwall's Most Trusted Roofing & Roof Repair Experts | All Work Guaranteed
-
KM BUILDING & ROOFING LTD


ALL WORK GUARANTEED
KM BUILDING & ROOFING LTD
At KM Building and Roofing Ltd, we take pride in providing top-quality roofing solutions to protect your home or business. With years of experience, our skilled team delivers expert craftsmanship, durable materials, and reliable service for all your roofing needs.
ST AUSTELL, NEWQUAY, TRURO, FALMOUTH, ST IVES & SURROUNDING AREAS
TRUSTED EXPERTISE YOU CAN RELY ON
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>KM Building & Roofing — Lead Workflow</title>
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=DM+Sans:wght@300;400;500;600&family=JetBrains+Mono:wght@400;600&display=swap" rel="stylesheet">
<style>
:root {
--navy: #1F4E79;
--navy-dark: #142f4a;
--navy-light: #2563a0;
--steel: #2c3e50;
--red: #c0392b;
--orange: #d35400;
--yellow: #f39c12;
--green: #27ae60;
--blue: #2980b9;
--teal: #16a085;
--cream: #f8f5f0;
--warm-grey: #e8e4de;
--mid-grey: #9ca3af;
--dark-text: #1a1a1a;
--track: #d0cbc4;
}
- { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: ‘DM Sans’, sans-serif;
background: var(–cream);
color: var(–dark-text);
min-height: 100vh;
}
/* HEADER */
.header {
background: var(–navy);
color: white;
padding: 40px 60px 36px;
display: flex;
align-items: flex-end;
justify-content: space-between;
border-bottom: 4px solid var(–teal);
}
.header-logo {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 13px;
letter-spacing: 3px;
color: rgba(255,255,255,0.5);
margin-bottom: 6px;
}
.header-title {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 44px;
letter-spacing: 2px;
line-height: 1;
color: white;
}
.header-subtitle {
font-size: 13px;
color: rgba(255,255,255,0.6);
margin-top: 8px;
font-weight: 300;
letter-spacing: 0.5px;
}
.header-meta {
text-align: right;
font-family: ‘JetBrains Mono’, monospace;
font-size: 11px;
color: rgba(255,255,255,0.45);
line-height: 1.8;
}
.nfrc-badge {
display: inline-block;
border: 1px solid rgba(255,255,255,0.3);
padding: 4px 10px;
font-size: 10px;
letter-spacing: 2px;
margin-top: 6px;
color: rgba(255,255,255,0.6);
}
/* MAIN LAYOUT */
.page { padding: 0 60px 80px; }
/* SECTION LABEL */
.section-label {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 11px;
letter-spacing: 4px;
color: var(–navy);
padding: 40px 0 16px;
border-top: 1px solid var(–track);
margin-top: 40px;
opacity: 0.6;
}
.section-label:first-of-type { margin-top: 40px; }
/* ── STAGE PIPELINE ── */
.pipeline {
display: flex;
align-items: stretch;
gap: 0;
margin-bottom: 0;
position: relative;
}
.stage {
flex: 1;
background: white;
border: 1.5px solid var(–warm-grey);
border-right: none;
padding: 22px 18px 22px;
position: relative;
transition: transform 0.15s;
cursor: default;
}
.stage:last-child { border-right: 1.5px solid var(–warm-grey); }
.stage:hover { transform: translateY(-2px); z-index: 2; box-shadow: 0 8px 24px rgba(31,78,121,0.12); }
/* arrow connector */
.stage:not(:last-child)::after {
content: ‘’;
position: absolute;
right: -14px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
border-top: 14px solid transparent;
border-bottom: 14px solid transparent;
border-left: 14px solid white;
z-index: 3;
}
.stage:not(:last-child)::before {
content: ‘’;
position: absolute;
right: -16px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
border-top: 15px solid transparent;
border-bottom: 15px solid transparent;
border-left: 15px solid var(–warm-grey);
z-index: 2;
}
.stage-num {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 36px;
color: var(–warm-grey);
line-height: 1;
margin-bottom: 6px;
}
.stage-title {
font-weight: 600;
font-size: 13px;
color: var(–navy);
margin-bottom: 10px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.stage-detail {
font-size: 12px;
color: #555;
line-height: 1.6;
}
.stage-tag {
display: inline-block;
font-family: ‘JetBrains Mono’, monospace;
font-size: 9px;
padding: 2px 7px;
border-radius: 2px;
margin-top: 10px;
margin-right: 3px;
letter-spacing: 0.5px;
font-weight: 600;
}
.tag-checkatrade { background: #e8f4fd; color: #1a5276; }
.tag-web { background: #e8f8f5; color: #0e6655; }
.tag-fmb { background: #fef9e7; color: #7d6608; }
.tag-auto { background: var(–navy); color: white; }
.tag-manual { background: var(–steel); color: white; }
.tag-wa { background: #25d366; color: white; }
/* ── PRIORITY GRID ── */
.priority-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.priority-card {
border-left: 5px solid;
background: white;
padding: 20px 18px;
border-radius: 0 2px 2px 0;
border-top: 1px solid var(–warm-grey);
border-right: 1px solid var(–warm-grey);
border-bottom: 1px solid var(–warm-grey);
}
.priority-card.urgent { border-left-color: var(–red); }
.priority-card.high { border-left-color: var(–orange); }
.priority-card.medium { border-left-color: var(–yellow); }
.priority-card.when-ready { border-left-color: var(–green); }
.priority-emoji { font-size: 20px; margin-bottom: 8px; }
.priority-label {
font-weight: 600;
font-size: 13px;
text-transform: uppercase;
letter-spacing: 0.5px;
margin-bottom: 6px;
}
.priority-card.urgent .priority-label { color: var(–red); }
.priority-card.high .priority-label { color: var(–orange); }
.priority-card.medium .priority-label { color: var(–yellow); }
.priority-card.when-ready .priority-label { color: var(–green); }
.priority-timing {
font-family: ‘JetBrains Mono’, monospace;
font-size: 10px;
font-weight: 600;
color: var(–mid-grey);
letter-spacing: 0.5px;
margin-bottom: 10px;
}
.priority-detail { font-size: 12px; color: #555; line-height: 1.6; }
/* ── STATUS TRACKER ── */
.status-track {
display: flex;
align-items: center;
gap: 0;
background: white;
border: 1.5px solid var(–warm-grey);
padding: 24px 28px;
overflow: hidden;
}
.status-node {
display: flex;
flex-direction: column;
align-items: center;
flex: 1;
position: relative;
}
.status-node:not(:last-child)::after {
content: ‘→’;
position: absolute;
right: -10px;
top: 12px;
color: var(–track);
font-size: 18px;
font-weight: 300;
}
.status-dot {
width: 26px;
height: 26px;
border-radius: 50%;
border: 2px solid;
display: flex;
align-items: center;
justify-content: center;
font-size: 11px;
margin-bottom: 8px;
flex-shrink: 0;
}
.status-name {
font-size: 10px;
font-weight: 600;
text-align: center;
text-transform: uppercase;
letter-spacing: 0.4px;
line-height: 1.3;
}
.s-tocontact .status-dot { border-color: var(–mid-grey); background: #f9f9f9; color: var(–mid-grey); }
.s-tocontact .status-name { color: var(–mid-grey); }
.s-noanswer .status-dot { border-color: var(–orange); background: #fff3eb; color: var(–orange); }
.s-noanswer .status-name { color: var(–orange); }
.s-spoke .status-dot { border-color: var(–blue); background: #ebf5fb; color: var(–blue); }
.s-spoke .status-name { color: var(–blue); }
.s-quotesent .status-dot { border-color: var(–navy); background: #ebf2f9; color: var(–navy); }
.s-quotesent .status-name { color: var(–navy); }
.s-accepted .status-dot { border-color: var(–teal); background: #e8f8f5; color: var(–teal); }
.s-accepted .status-name { color: var(–teal); }
.s-won .status-dot { border-color: var(–green); background: #eafaf1; color: var(–green); }
.s-won .status-name { color: var(–green); }
.s-lost .status-dot { border-color: var(–red); background: #fdf0ef; color: var(–red); }
.s-lost .status-name { color: var(–red); }
/* ── SOURCE BREAKDOWN ── */
.source-row {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 16px;
}
.source-card {
background: white;
border: 1.5px solid var(–warm-grey);
padding: 20px 22px;
display: flex;
align-items: flex-start;
gap: 16px;
}
.source-icon {
font-size: 28px;
flex-shrink: 0;
margin-top: 2px;
}
.source-name {
font-weight: 600;
font-size: 14px;
color: var(–navy);
margin-bottom: 4px;
}
.source-count {
font-family: ‘JetBrains Mono’, monospace;
font-size: 22px;
font-weight: 600;
color: var(–navy);
line-height: 1;
margin-bottom: 6px;
}
.source-sub { font-size: 12px; color: #666; line-height: 1.5; }
/* ── WA WORKFLOW ── */
.wa-grid {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 16px;
}
.wa-card {
background: white;
border: 1.5px solid var(–warm-grey);
padding: 20px 18px;
}
.wa-step {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 11px;
letter-spacing: 3px;
color: #25d366;
margin-bottom: 8px;
}
.wa-title {
font-weight: 600;
font-size: 14px;
color: var(–navy);
margin-bottom: 8px;
}
.wa-detail { font-size: 12px; color: #555; line-height: 1.6; }
.wa-label {
display: inline-block;
font-family: ‘JetBrains Mono’, monospace;
font-size: 9px;
padding: 2px 7px;
margin-top: 10px;
margin-right: 3px;
font-weight: 700;
border-radius: 1px;
letter-spacing: 0.5px;
}
.lbl-urgent { background: var(–red); color: white; }
.lbl-live { background: var(–orange); color: white; }
.lbl-lead { background: var(–green); color: white; }
.lbl-followup { background: var(–blue); color: white; }
.lbl-quoteneeded { background: var(–navy); color: white; }
.lbl-done { background: #27ae60; color: white; }
/* ── DAILY OPS ── */
.ops-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 16px;
}
.ops-card {
background: white;
border: 1.5px solid var(–warm-grey);
padding: 22px 22px;
}
.ops-icon { font-size: 22px; margin-bottom: 10px; }
.ops-title {
font-weight: 600;
font-size: 14px;
color: var(–navy);
margin-bottom: 10px;
}
.ops-list {
list-style: none;
font-size: 12px;
color: #555;
line-height: 1.8;
}
.ops-list li::before { content: ’→ ’; color: var(–navy); font-weight: 600; }
/* ── KPI STRIP ── */
.kpi-strip {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 1px;
background: var(–warm-grey);
border: 1.5px solid var(–warm-grey);
margin-bottom: 0;
}
.kpi {
background: white;
padding: 18px 16px;
text-align: center;
}
.kpi-val {
font-family: ‘Bebas Neue’, sans-serif;
font-size: 36px;
color: var(–navy);
line-height: 1;
}
.kpi-label { font-size: 10px; color: var(–mid-grey); margin-top: 4px; text-transform: uppercase; letter-spacing: 0.5px; }
.kpi.alert .kpi-val { color: var(–red); }
.kpi.warn .kpi-val { color: var(–orange); }
/* ── FOOTER ── */
.footer {
background: var(–navy-dark);
color: rgba(255,255,255,0.4);
padding: 20px 60px;
font-family: ‘JetBrains Mono’, monospace;
font-size: 10px;
letter-spacing: 0.5px;
display: flex;
justify-content: space-between;
}
/* ── CONNECTOR LINES ── */
.connector {
display: flex;
align-items: center;
gap: 12px;
margin: 20px 0;
color: var(–mid-grey);
font-size: 11px;
}
.connector::before, .connector::after {
content: ‘’;
flex: 1;
height: 1px;
background: var(–track);
}
.connector-icon { font-size: 18px; }
.note-box {
background: #f0f4f9;
border-left: 4px solid var(–navy);
padding: 14px 18px;
font-size: 12px;
color: #334;
line-height: 1.7;
margin-top: 16px;
}
.note-box strong { color: var(–navy); }
@media print {
body { background: white; }
.stage:hover { transform: none; box-shadow: none; }
}
</style>
</head>
<body>
<!-- HEADER -->
<div class="header">
<div>
<div class="header-logo">KM BUILDING & ROOFING LTD</div>
<div class="header-title">Lead Workflow</div>
<div class="header-subtitle">Checkatrade · Website Form · FMB — End-to-End Pipeline</div>
</div>
<div class="header-meta">
<div>NFRC REG. NO. 5100014</div>
<div>Cornwall · Devon · Plymouth · Saltash</div>
<div class="nfrc-badge">ACCREDITED CONTRACTOR</div>
</div>
</div>
<div class="page">
<!-- KPI STRIP -->
<div class="section-label">LIVE PIPELINE SNAPSHOT</div>
<div class="kpi-strip">
<div class="kpi">
<div class="kpi-val">55</div>
<div class="kpi-label">Total Leads</div>
</div>
<div class="kpi alert">
<div class="kpi-val">32</div>
<div class="kpi-label">Overdue (7+ days)</div>
</div>
<div class="kpi warn">
<div class="kpi-val">15</div>
<div class="kpi-label">Missing Emails</div>
</div>
<div class="kpi">
<div class="kpi-val">27</div>
<div class="kpi-label">Checkatrade</div>
</div>
<div class="kpi">
<div class="kpi-val">25</div>
<div class="kpi-label">Website Form</div>
</div>
</div>
<!-- STAGE PIPELINE -->
<div class="section-label">LEAD JOURNEY — 7 STAGES</div>
<div class="pipeline">
```
<div class="stage">
<div class="stage-num">01</div>
<div class="stage-title">Lead Arrives</div>
<div class="stage-detail">Enquiry received from Checkatrade, Website Form, or FMB. Auto-logged to ALL LEADS tab with date, contact info, job type & message.</div>
<div>
<span class="stage-tag tag-checkatrade">CHECKATRADE</span>
<span class="stage-tag tag-web">WEBSITE</span>
<span class="stage-tag tag-fmb">FMB</span>
</div>
</div>
<div class="stage">
<div class="stage-num">02</div>
<div class="stage-title">Priority Set</div>
<div class="stage-detail">Assign priority based on urgency and job type: 🔴 Urgent, 🟠 High, 🟡 Medium, 🟢 When Ready. Triggers overdue counter at 7 days.</div>
<div>
<span class="stage-tag tag-manual">MANUAL</span>
</div>
</div>
<div class="stage">
<div class="stage-num">03</div>
<div class="stage-title">First Contact</div>
<div class="stage-detail">Pre-written follow-up message sent (auto-populated in spreadsheet). Update status: Called – No Answer or Called – Spoke.</div>
<div>
<span class="stage-tag tag-auto">AUTO-DRAFT</span>
<span class="stage-tag tag-wa">WHATSAPP</span>
</div>
</div>
<div class="stage">
<div class="stage-num">04</div>
<div class="stage-title">Site Visit & Quote</div>
<div class="stage-detail">Book appointment via Checkatrade or direct call. Survey the job. Build quote in Word (.docx) using KM template. Status → Quote Sent.</div>
<div>
<span class="stage-tag tag-manual">QUOTE DOC</span>
</div>
</div>
<div class="stage">
<div class="stage-num">05</div>
<div class="stage-title">Quote Follow-Up</div>
<div class="stage-detail">Chase quote acceptance. Answer queries. Negotiate if needed. Update status to Quote Accepted. Collect 50% deposit to confirm.</div>
<div>
<span class="stage-tag tag-wa">WHATSAPP</span>
</div>
</div>
<div class="stage">
<div class="stage-num">06</div>
<div class="stage-title">Live Job</div>
<div class="stage-detail">WhatsApp group created per job. Tagged LIVE JOB. Team assigned. Scaffold booked. Progress tracked via WhatsApp. Balance on completion.</div>
<div>
<span class="stage-tag tag-wa">LIVE JOB</span>
<span class="stage-tag tag-auto">WA GROUP</span>
</div>
</div>
<div class="stage">
<div class="stage-num">07</div>
<div class="stage-title">Won / Closed</div>
<div class="stage-detail">Job complete. Status updated to Won. Balance collected. 10-year workmanship guarantee issued. Request Checkatrade review.</div>
<div>
<span class="stage-tag tag-auto">REVIEW REQ.</span>
</div>
</div>
```
</div>
<!-- PRIORITY GUIDE -->
<div class="section-label">PRIORITY CLASSIFICATION</div>
<div class="priority-grid">
```
<div class="priority-card urgent">
<div class="priority-emoji">🔴</div>
<div class="priority-label">Urgent</div>
<div class="priority-timing">CONTACT SAME DAY</div>
<div class="priority-detail">Active leaks, water ingress, storm damage, 48-hour start requests. Multiple leads at this level. Treat as emergency.</div>
</div>
<div class="priority-card high">
<div class="priority-emoji">🟠</div>
<div class="priority-label">High</div>
<div class="priority-timing">CONTACT WITHIN 24–48 HRS</div>
<div class="priority-detail">Start within 2 weeks. Significant repairs needed, house sale deadlines, solar install coordination. 11 current leads.</div>
</div>
<div class="priority-card medium">
<div class="priority-emoji">🟡</div>
<div class="priority-label">Medium</div>
<div class="priority-timing">CONTACT WITHIN 1 WEEK</div>
<div class="priority-detail">Start within 1 month or flexible. Repairs that need attention but not emergency. 26 current leads — bulk of pipeline.</div>
</div>
<div class="priority-card when-ready">
<div class="priority-emoji">🟢</div>
<div class="priority-label">When Ready</div>
<div class="priority-timing">CONTACT WITHIN 2 WEEKS</div>
<div class="priority-detail">Customer planning / budgeting, or start is fully flexible. Nurture these leads — still send follow-up message. 17 leads.</div>
</div>
```
</div>
<!-- STATUS TRACKER -->
<div class="section-label">STATUS PROGRESSION</div>
<div class="status-track">
<div class="status-node s-tocontact">
<div class="status-dot">📋</div>
<div class="status-name">To<br>Contact</div>
</div>
<div class="status-node s-noanswer">
<div class="status-dot">📵</div>
<div class="status-name">Called –<br>No Answer</div>
</div>
<div class="status-node s-spoke">
<div class="status-dot">📞</div>
<div class="status-name">Called –<br>Spoke</div>
</div>
<div class="status-node s-quotesent">
<div class="status-dot">📄</div>
<div class="status-name">Quote<br>Sent</div>
</div>
<div class="status-node s-accepted">
<div class="status-dot">✓</div>
<div class="status-name">Quote<br>Accepted</div>
</div>
<div class="status-node s-won">
<div class="status-dot">🏆</div>
<div class="status-name">Won</div>
</div>
<div class="status-node s-lost">
<div class="status-dot">✕</div>
<div class="status-name">Lost /<br>No Job</div>
</div>
</div>
<div class="note-box">
<strong>Overdue Rule:</strong> Any lead sitting at "To Contact" for more than <strong>7 days</strong> is flagged as overdue on the Dashboard. Currently <strong>32 leads overdue</strong> — these need immediate attention. The Daily Summary email (sent at 06:15 each morning) highlights this figure.
</div>
<!-- LEAD SOURCES -->
<div class="section-label">LEAD SOURCES</div>
<div class="source-row">
<div class="source-card">
<div class="source-icon">🔧</div>
<div>
<div class="source-name">Checkatrade</div>
<div class="source-count">27</div>
<div class="source-sub">Leads arrive via the Checkatrade app. Auto-message drafts are pre-populated. Reply within the app first, then call. Missing emails are common — request before site visit.</div>
</div>
</div>
<div class="source-card">
<div class="source-icon">🌐</div>
<div>
<div class="source-name">Website Form</div>
<div class="source-count">25</div>
<div class="source-sub">Enquiries via kmbuildingroofing.co.uk. These arrive via email — add to ALL LEADS manually. Typically have full contact details including email.</div>
</div>
</div>
<div class="source-card">
<div class="source-icon">🏗️</div>
<div>
<div class="source-name">FMB</div>
<div class="source-count">3</div>
<div class="source-sub">Federation of Master Builders referrals. Lower volume but typically higher value, well-qualified leads. Treat same as Checkatrade for follow-up speed.</div>
</div>
</div>
</div>
<!-- WHATSAPP WORKFLOW -->
<div class="section-label">WHATSAPP JOB MANAGEMENT</div>
<div class="wa-grid">
```
<div class="wa-card">
<div class="wa-step">STEP 01 — LABELS</div>
<div class="wa-title">Chat Labelling System</div>
<div class="wa-detail">Every WhatsApp chat is labelled to reflect its current state. Multiple labels can apply to the same chat.</div>
<div>
<span class="wa-label lbl-urgent">URGENT</span>
<span class="wa-label lbl-live">LIVE JOB</span>
<span class="wa-label lbl-lead">LEAD</span>
<span class="wa-label lbl-followup">FOLLOW UP</span>
<span class="wa-label lbl-quoteneeded">QUOTE NEEDED</span>
</div>
</div>
<div class="wa-card">
<div class="wa-step">STEP 02 — GROUPS</div>
<div class="wa-title">Job Group Creation</div>
<div class="wa-detail">When a quote is accepted, create a WhatsApp group named by address (e.g. "9 Elphinstone Road P…"). Add the team members assigned. Tag LIVE JOB. Use group for all job communications, videos, and photos.</div>
</div>
<div class="wa-card">
<div class="wa-step">STEP 03 — TRACKING</div>
<div class="wa-title">ALL JOBS WA Sheet</div>
<div class="wa-detail">Each active WA job is tracked in the ALL JOBS WA tab: last message, tags, priority, action required, assigned team (KM/KMCG/KMWG). Status updated daily. 81 tasks currently outstanding.</div>
</div>
```
</div>
<!-- DAILY OPS -->
<div class="section-label">DAILY OPERATIONS</div>
<div class="ops-grid">
```
<div class="ops-card">
<div class="ops-icon">📧</div>
<div class="ops-title">Daily Summary Email — 06:15 every morning</div>
<ul class="ops-list">
<li>Total leads in pipeline</li>
<li>Overdue leads (7+ days without contact)</li>
<li>Oldest uncontacted lead date</li>
<li>Leads received in last 7 days</li>
<li>Missing emails count</li>
<li>WhatsApp tasks outstanding</li>
<li>Sent to: Ken, Edward, Halil + team</li>
</ul>
</div>
<div class="ops-card">
<div class="ops-icon">✅</div>
<div class="ops-title">Daily Actions Checklist</div>
<ul class="ops-list">
<li>Review Daily Summary email at start of day</li>
<li>Work through 🔴 Urgent leads first</li>
<li>Chase any overdue leads (32 currently)</li>
<li>Update ALL LEADS statuses after calls</li>
<li>Check ALL JOBS WA for outstanding tasks</li>
<li>Add new leads to pipeline same day</li>
<li>Request missing emails from new leads</li>
</ul>
</div>
```
</div>
<!-- QUOTE PROCESS -->
<div class="section-label">QUOTE PROCESS — KEY RULES</div>
<div class="ops-grid">
```
<div class="ops-card">
<div class="ops-icon">📄</div>
<div class="ops-title">Quote Document Format</div>
<ul class="ops-list">
<li>Produced as Word (.docx) — navy blue (1F4E79) colour scheme</li>
<li>Itemised scope in table rows — single total only, no line costs shown</li>
<li>Net total → VAT line → Gross total (inc. VAT)</li>
<li>50% deposit prior to commencement</li>
<li>Balance on completion</li>
<li>10-year workmanship guarantee included</li>
<li>Scaffold confirmed as included in scope</li>
<li>Optional extras in separate section (e.g. Velux)</li>
</ul>
</div>
<div class="ops-card">
<div class="ops-icon">🏷️</div>
<div class="ops-title">Job Types in Pipeline</div>
<ul class="ops-list">
<li>Roof Repair — 21 leads (largest category)</li>
<li>Pitched Roof Repair — 5 leads</li>
<li>Flat Roofing — 7 leads</li>
<li>Chimney Repair — 5 leads</li>
<li>New Roof — 2 leads</li>
<li>Pitched Roof Installation — 2 leads</li>
<li>Roof Inspection — 4 leads</li>
<li>Guttering / Soffits & Fascias / Dry Verge</li>
</ul>
</div>
```
</div>
</div>
<div class="footer">
<span>KM Building & Roofing Ltd · NFRC Reg. 5100014 · Cornwall · Devon · Plymouth · Saltash</span>
<span>Lead Workflow Document · Generated March 2026</span>
</div>
</body>
</html>

30+ YEARS OF EXPERIENCE

OVER 500 ROOFS COMPLETED

5* CUSTOMER REVIEWS

WHY choose KM Roofing Ltd for St Austell, Newquay, Truro, Falmouth, St Ives & Surrounding Areas
0+
PROJECTS
0+
NEW ROOFS
0+
ROOF REPAIRS

Roofing Experts in Plymouth Penzance St Austell, Newquay, Truro, Falmouth, St Ives & Surrounding Areas
Fully Licensed and Insured Roofing Specialists
Why Choose KM Roofing Ltd?
✔ Fully Licensed & Insured Local Roofers.
Your home is in safe hands with a qualified, fully insured roofing team. We deliver high-quality workmanship on every job, from minor roof repairs to full roof replacements.
✔ Roofing Experts in Plymouth, Devon & Cornwall
Based in Plymouth and working across Devon and Cornwall, we’re a trusted local roofing company providing reliable, long-lasting roofing solutions for homeowners and landlords throughout the South West.
✔ Complete Roofing Service for Your Home
From minor leak repairs and storm damage to new roofs, re-roofing and flat roofing systems, we cover all aspects of domestic roofing. We only use proven, high-performance materials for durability and weather resistance.
✔ Comprehensive Roof Warranty Protection
All our roofing work comes with a full warranty, giving you peace of mind that your investment is protected and that your roof will last.
✔ Highly Rated on MyBuilder & By Local Customers
As proud members of MyBuilder, we maintain excellent customer feedback through honest advice, transparent pricing and dependable service. Much of our work comes from repeat customers and recommendations.
✔ Quality Service From First Call to Final Clean-Up
We keep you informed at every stage of your roofing project – from the initial survey and quote to completion and clean-up – ensuring a smooth, stress-free experience and results that exceed expectations.

OUR SERVICES
From family homes to large commercial properties, we have the expertise to meet all specifications.
Roof Repair
Roofs in Plymouth, Devon and Cornwall face it all – driving rain, strong winds and sudden storms. Over time, this can lead to loose tiles, leaks and general wear and tear. Our roof repair service tackles issues early, helping to stop minor damage from turning into costly problems and protecting the structural integrity of your home.
New Roofs
Whether you’re building an extension, replacing a tired old roof or upgrading your property, we provide complete new roof installations for all roof types. From pitched slate and tile roofs to flat roofing systems, our experienced team will help you choose the right materials and design, then install your new roof to a high standard for long-lasting protection.
Flat Roofs
Flat roofs are a practical, cost-effective and low-maintenance roofing option, ideal for extensions, loft conversions, garages and outbuildings. Their versatility makes them a popular choice for both residential and commercial properties, providing a clean, modern finish and reliable weather protection.
Chimney Repairs
We carry out expert chimney repairs for homes across Plymouth, Devon and Cornwall. From repointing and rebuilding damaged stacks to fixing chimney leaks and flashing, our team ensures your chimney is secure, weatherproof and safe to use, protecting both your roof and your property.
Guttering Services
We specialise in the expert installation of high-quality gutters, fascias and soffits that both protect and enhance your property. Our low-maintenance, weather-resistant UPVC systems offer long-lasting durability and easy upkeep, helping to channel rainwater efficiently and keep your home protected from the elements.
General Roofing
Whether you’re a homeowner, landlord or commercial property owner, KM Roofing Ltd provides reliable, professional roofing services you can depend on. From minor repairs and maintenance to full roof replacements, our experienced team delivers quality workmanship and long-lasting results, keeping your property safe, dry and protected all year round.

WHY CHOOSE US
Why Choose KM ROOFING Ltd?
At KM Roofing Ltd, we take pride in delivering long-lasting roofing solutions for homes and businesses across Plymouth, Devon and Cornwall. From new roof installations to repairs and maintenance, we use quality materials and careful craftsmanship to keep your property weatherproof and protected year-round.

EXPERIENCED TRADESMAN
KM Roofing Ltd is a roofing company with many years of experience across a range of areas. We take pride in delivering the quality results which you deserve.

FREE QUOTES
KM Roofing Ltd are more than happy to offer FREE, no-obligation quotes. We are here to work closely with you on any projects.

ALL ROOFING SERVICES
From new roofs and guttering to roof tiling and repairs, KM Roofing Ltd's expertise spans across many fields and is on hand to cover you for all of your roofing needs.

SKILLED TEAM
KM Roofing Ltd’s experience is second to none, combined with extensive knowledge and skills. We can offer advice and guidance for all projects.

ALL ROOFING SERVICES
We always endeavour to leave our customers satisfied with our high-quality work, including causing as little disruption as possible and leaving your property clean and tidy.

WIDE COVERAGE
KM Roofing Ltd cover St Austell, Newquay, Truro, Falmouth, St Ives & Surrounding Areas. Please get in touch to find out how we can help you.

KM BUILDING & ROOFING
AREAS COVERED
Welcome to KM Roofing Ltd
Reliable, long-lasting roofing solutions across Plymouth, Devon & Cornwall
At KM Roofing Ltd, we take pride in protecting homes and businesses with durable, high-quality roofing.
Whether you need a new roof installation, professional repairs, or ongoing maintenance, our experienced team delivers workmanship you can trust—using quality materials designed to withstand the region’s weather year-round.
We’re committed to keeping your property safe, weatherproof and looking its best, providing a friendly, dependable service from start to finish.
Your roof, built to last. Your peace of mind, guaranteed.









































