With over 35 years of expertise, Tegula Stone transforms renovations from stressful to seamless. Get an instant AI-powered quote, then receive confirmed rates from vetted specialists — without lifting a finger.
Faster and simpler than any contractor you've worked with. No waiting, no callbacks, no guessing.
Chat with our AI, describe your project, upload photos. Get a Good / Better / Best estimate instantly in any language. No forms, no waiting.
Happy with the estimate? Submit your full details and photos. Our AI validates everything and auto-sends to vetted specialists matched to your ZIP code.
Vetted contractors accept, counteroffer, or pass. You get notified with real confirmed rates. You choose. Tegula manages everything after.
From a single backsplash to a full commercial buildout — we handle everything so you never lift a finger.
Every renovation involves a tradeoff. Toggle your 2 priorities and we price accordingly — no games, no surprises. You can only have 2 of 3.
The Iron Triangle is a universal law of construction. We are one of the only contractors in LA honest enough to price it into every quote.
Tegula Stone delivers complete renovation management for homeowners who want a seamless, stress-free upgrade. Whatever your project — roofing, construction, tiling, or beyond — we've got you covered.
We handle everything from concept and design to material selection and coordination with licensed specialists, so you never have to lift a finger. Acting as your single point of contact, we keep your project on time and within budget — with up to a 15-year guarantee.
Book your complimentary consultation, request a quote, or send us your project details — all in just a few clicks. Serving LA County and surrounding areas.
Fill in your details. Our AI validates everything, then auto-sends to matched specialists in your area.
🔒 Price-locked 30 days · No spam · Unsubscribe anytime
Expert articles, guides, and tips for homeowners, investors, and property owners across Los Angeles County — your complete renovation resource hub.
Get an instant AI-powered quote in seconds — no waiting, no callbacks.
Powered by Stripe. SSL encrypted. Cancel anytime.
Enter your details and you'll be removed immediately. No questions asked.
You can resubscribe anytime by submitting a new quote request.
function doPost(e){
var ss=SpreadsheetApp.openById(
'1hc2BLG1fkPshWcqTEyjcFsog7N-DHC6nzMkO9UjqHs0');
var sh=ss.getSheetByName('Tegula Quotes')
||ss.getSheets()[0];
var d=JSON.parse(e.postData.contents);
if(sh.getLastRow()===0){
sh.appendRow(['Status','Time','ID','Name',
'Email','Phone','ZIP','Service','Sqft',
'Budget','Timeline','Contact',
'Priorities','Score']);
sh.getRange(1,1,1,14)
.setBackground('#2C2C2C')
.setFontColor('#FFFFFF')
.setFontWeight('bold');
sh.getRange(1,1).setBackground('#1A3358');
}
var status=d.status||'New';
var nr=sh.appendRow([status,new Date(),
d.id,d.name,d.email,d.phone,d.zip,
d.svc,d.sqft,d.budget,d.timeline,
d.contact,d.priorities,d.score])
.getLastRow();
var row=sh.getLastRow();
sh.getRange(row,1)
.setBackground(
status==='hot'?'#FAE8E8':
status==='warm'?'#FFF8E1':'#E6EFF8')
.setFontColor(
status==='hot'?'#7A1C1C':
status==='warm'?'#7A5800':'#1A3358')
.setFontWeight('bold');
return ContentService.createTextOutput('OK');
}
// Friday 7PM auto-clean: remove blanks
function weeklyClean(){
var ss=SpreadsheetApp.openById(
'1hc2BLG1fkPshWcqTEyjcFsog7N-DHC6nzMkO9UjqHs0');
var sh=ss.getSheetByName('Tegula Quotes')
||ss.getSheets()[0];
var n=sh.getLastRow();
if(n<2)return;
var data=sh.getRange(2,1,n-1,14).getValues();
var ok=data.filter(function(r){return r[0]&&r[2];});
sh.getRange(2,1,n-1,14).clearContent();
if(ok.length)sh.getRange(2,1,ok.length,14)
.setValues(ok);
}
function doPost(e){
var ss=SpreadsheetApp.openById(
'1VQIiitNzopg-0Mmu3oeE_YWCUugOkKk56avsNZqrv2o');
var sh=ss.getSheetByName('Tegula Contractors')
||ss.getSheets()[0];
var d=JSON.parse(e.postData.contents);
if(sh.getLastRow()===0){
sh.appendRow(['Status','Time','ID','Name',
'Company','Email','Phone','Plan',
'Joined','ZIPs','Specialties']);
// Style header row
sh.getRange(1,1,1,11)
.setBackground('#2C2C2C')
.setFontColor('#FFFFFF')
.setFontWeight('bold');
sh.getRange(1,1).setBackground('#1E5C2E'); // Status col green
}
var rows=sh.getDataRange().getValues();
var idx=-1;
for(var i=1;i<rows.length;i++)
if(String(rows[i][2])===String(d.id)){idx=i+1;break;}
var status=d.status||'Active';
var row=[status,new Date(),d.id,d.name,
d.company||'',d.email||'',d.phone||'',
d.plan,d.joined,d.zips,d.specs];
if(idx>0){
sh.getRange(idx,1,1,11).setValues([row]);
sh.getRange(idx,1).setBackground(
status==='Active'?'#E6F4EA':
status==='Inactive'?'#FAE8E8':'#FFF8E1')
.setFontColor(
status==='Active'?'#1E5C2E':
status==='Inactive'?'#7A1C1C':'#7A5800')
.setFontWeight('bold');
} else {
sh.appendRow(row);
var nr=sh.getLastRow();
sh.getRange(nr,1).setBackground(
status==='Active'?'#E6F4EA':
status==='Inactive'?'#FAE8E8':'#FFF8E1')
.setFontColor(
status==='Active'?'#1E5C2E':
status==='Inactive'?'#7A1C1C':'#7A5800')
.setFontWeight('bold');
}
return ContentService.createTextOutput('OK');
}
// Friday 7PM — mark all active (paid renewals)
function weeklyRenew(){
var ss=SpreadsheetApp.openById(
'1VQIiitNzopg-0Mmu3oeE_YWCUugOkKk56avsNZqrv2o');
var sh=ss.getSheetByName('Tegula Contractors')
||ss.getSheets()[0];
var n=sh.getLastRow();
for(var i=2;i<=n;i++){
sh.getRange(i,1).setValue('Active')
.setBackground('#E6F4EA')
.setFontColor('#1E5C2E')
.setFontWeight('bold');
}
}
// Call manually to mark a contractor inactive
function markInactive(contractorId){
var ss=SpreadsheetApp.openById(
'1VQIiitNzopg-0Mmu3oeE_YWCUugOkKk56avsNZqrv2o');
var sh=ss.getSheetByName('Tegula Contractors')
||ss.getSheets()[0];
var rows=sh.getDataRange().getValues();
for(var i=1;i<rows.length;i++){
if(String(rows[i][2])===String(contractorId)){
sh.getRange(i+1,1).setValue('Inactive')
.setBackground('#FAE8E8')
.setFontColor('#7A1C1C')
.setFontWeight('bold');
break;
}
}
}