Services all contractors need since 2010

Electrical Module 8

Electrical Estimating Module 8

Electrical Estimating 2025

📨 Module 8: Bidding & Proposal Submission

Turn your finished estimate into a clear, compliant proposal that wins work and protects your scope. Use the tools below to align with client instructions, package alternates/units, and submit professionally.

📋 Key Takeaways

  • Mirror the client’s bid form and numbering—avoid disqualification.
  • Document inclusions, exclusions, alternates, unit prices, addenda.
  • Submit exactly how/when they require; log timestamps + confirmations.
  • Protect margin with clear assumptions, schedule notes, and lead-time disclosures.

🔑 Quick Glossary

Bid Form Alternate Unit Price Addendum Ack. Cover Letter

🧰 Proposal Builder (Fill & Copy)

Cover Letter Generator
✅ Copied!
Tip: attach clarifications, alternates, unit prices, addenda acknowledgment.
Bid Form Mapping (Mini)
Bid Form SectionYour Cost Line(s)Amount $
Base Bid – ElectricalAll Div 26 DC + Cont + OH + Profit$________
AllowancesLighting controls commissioning; Core drilling$________
Unit PricesEMT adds; device adds; branch adds
Match the client’s exact labels & numbering.

🔀 Alternates

Alt #DescriptionAdd/Deduct ($)
ALT-1LED fixture type change($12,400)
ALT-2Add occupancy sensors$9,800
Tip: Clearly state if alternates include controls, programming, or permits.

📏 Unit Prices

ItemUnitPrice/UnitNotes
3/4" EMT add (wire+labor)lf$___Exposed, ≤12' AFF
Branch circuit device addea$___Single gang
Core drilling 4” slabea$___Normal hours
Keep scope notes consistent with drawings/specs.

📑 Addenda Acknowledgment & 📬 Submission Log

Addenda Acknowledgment
Addendum #DateSummaryAck
1____Fixture schedule revision
2____Panelboard circuiting update
Submission Log
MethodTimestampRecipient/PortalConfirmation
Email____estimator@client.comAuto-reply received
Portal____BuildingConnect Bid #12345Upload success #ABC789
Reminder: Save PDFs, quote logs, and proof of receipt in the job folder with a version stamp (Rev A, Rev B).

🧮 Bid-Day Helpers

⏳ Countdown to Bid
🧮 Price Sanity Check
Subtotal (DC + CT):
Break-even (+ OH):
Final Price (w/ margin):
Profit Dollars:
Formula: Price = (DC×(1+CT)×(1+OH)) ÷ (1−Margin)
✉️ Email Subject Generator
✅ Copied!
Subject:
Body opener:

📄 Template Bank

Proposal Cover Letter (click to expand)
Subject: Proposal – – Division 26 Electrical – Attention: Estimator/PM Thank you for the opportunity to bid . We propose to furnish and install the complete electrical scope per drawings and specifications, including all addenda acknowledged below. Base Bid: $ Alternates: See attached schedule Unit Prices: See attached schedule Schedule: Substantial completion per contract; long-lead equipment per vendor quotes Inclusions: Submittals, permits/fees, coordination, testing, as-builts, warranty per spec Exclusions: Patch/paint, structural supports beyond spec, hazardous abatement, overtime unless noted Clarifications/Qualifications: 1) Price valid 30 days; escalation beyond 60 days by mutual agreement 2) Outages/shutdowns coordinated with owner; night work premium excluded unless specified 3) Equivalent products per spec substitution requirements Please see the attached bid form, clarifications, alternates, unit prices, and quote log. Sincerely, , <Your Company> • <phone> • <email> </div> </details> </div> </section> <!-- MODULE VIDEO --> <section class="wrap" style="text-align:center;"> <h2>🎬 Module 8 Video</h2> <div class="video"> <iframe src="https://www.youtube.com/embed/kQEiA5_BnxA?rel=0" title="Module 8 Video" allowfullscreen> </iframe> </div> </section> <!-- NAVIGATION --> <section class="band" style="text-align:center;"> <div class="wrap"> <div class="cta-row"> <a class="btn btn-ghost" href="/electrical-module-7">⬅ Back to Module 7</a> <a class="btn btn-primary" href="/electrical-estimating-2025">Finish: Back to Main Class</a> </div> </div> </section> <script> (function(){ const root = document.getElementById('ee-m8'); if(!root) return; const $ = (id)=>root.querySelector('#'+id); const toast = (el)=>{ if(!el) return; el.style.display='block'; clearTimeout(el._t); el._t = setTimeout(()=>{ el.style.display='none'; }, 1200); }; const safeNum = (val)=>{ const s = String(val||'').replace(/[^0-9.\-]/g,''); const n = parseFloat(s); return isFinite(n) ? n : 0; }; const fmtUSD = (n)=> isFinite(n) ? n.toLocaleString(undefined,{style:'currency',currency:'USD'}) : '—'; async function copyText(text){ try{ if(navigator.clipboard && navigator.clipboard.writeText){ await navigator.clipboard.writeText(text); return true; } }catch(e){} // fallback try{ const ta = document.createElement('textarea'); ta.value = text; ta.style.position='fixed'; ta.style.left='-9999px'; document.body.appendChild(ta); ta.select(); document.execCommand('copy'); document.body.removeChild(ta); return true; }catch(e){ return false; } } // Cover letter generator const coverOut = $('m8-coverOut'); $('m8-makeCover')?.addEventListener('click', ()=>{ const proj = ($('m8-proj')?.value||'').trim(); const owner= ($('m8-owner')?.value||'').trim(); const base = safeNum($('m8-base')?.value||''); const co = ($('m8-co')?.value||'Your Company').trim(); const today = new Date().toLocaleDateString(); const baseTxt = base ? base.toLocaleString() : '____'; const letter = `Subject: Proposal – ${proj||'<Project Name>'} – Division 26 Electrical – ${co} ${today} ${owner||'<GC/Owner Name>'} Attention: Estimator/PM ${proj||'<Project Name / Number>'} Thank you for the opportunity to bid ${proj||'<Project Name>'}. We propose to furnish and install the complete electrical scope per drawings and specifications, including all addenda acknowledged below. Base Bid: $${baseTxt} Alternates: See attached schedule Unit Prices: See attached schedule Schedule: Substantial completion per contract; long-lead equipment per vendor quotes Inclusions: Submittals, permits/fees, coordination, testing, as-builts, warranty per spec Exclusions: Patch/paint, structural beyond spec, hazardous abatement, overtime unless noted Clarifications/Qualifications: 1) Price valid 30 days; escalation beyond 60 days by mutual agreement 2) Outages/shutdowns coordinated with owner; night work premium excluded unless specified 3) Equivalent products per spec substitution requirements Please see the attached bid form, clarifications, alternates, unit prices, and quote log. Sincerely, <Name>, <Title> ${co} • <phone> • <email>`; if(coverOut) coverOut.textContent = letter; }); $('m8-copyCover')?.addEventListener('click', async ()=>{ const text = coverOut?.textContent || ''; if(!text || text==='—') return; const ok = await copyText(text); if(ok) toast($('m8-coverToast')); }); // Countdown let timerId = null; $('m8-go')?.addEventListener('click', ()=>{ const dueVal = $('m8-due')?.value; const out = $('m8-timer'); const urg = $('m8-urgency'); if(!dueVal){ if(out) out.innerHTML='<em>Set a due date/time.</em>'; if(urg) urg.textContent=''; return; } const due = new Date(dueVal); if(isNaN(due.getTime())){ if(out) out.innerHTML='<em>Set a valid date/time.</em>'; return; } const tick = ()=>{ const now = new Date(); const diff = due - now; if(diff <= 0){ if(out) out.innerHTML = '<strong>Due now</strong>'; if(urg) urg.textContent = 'Submit and log confirmation immediately.'; clearInterval(timerId); timerId=null; return; } const d = Math.floor(diff/86400000); const h = Math.floor((diff%86400000)/3600000); const m = Math.floor((diff%3600000)/60000); const s = Math.floor((diff%60000)/1000); if(out) out.textContent = `${d}d ${h}h ${m}m ${s}s remaining`; if(urg) urg.textContent = (diff < 24*3600000) ? 'Under 24h: freeze quantities; accept quote swaps only.' : ''; }; if(timerId) clearInterval(timerId); tick(); timerId = setInterval(tick, 1000); }); // Price sanity check $('m8-calc')?.addEventListener('click', ()=>{ const dc = safeNum($('m8-dc')?.value); const ct = safeNum($('m8-ct')?.value)/100; const oh = safeNum($('m8-oh')?.value)/100; const m = safeNum($('m8-m')?.value)/100; const sub = dc*(1+ct); const be = sub*(1+oh); const price = (m>=1)?NaN: be/(1-m); const profit = price - be; $('m8-sub').textContent = fmtUSD(sub); $('m8-be').textContent = fmtUSD(be); $('m8-price').textContent = fmtUSD(price); $('m8-profit').textContent = fmtUSD(profit); }); // Email subject + body generator function makeEmail(){ const proj = ($('m8-es-proj')?.value||'').trim(); const pack = ($('m8-es-pack')?.value||'Div 26 Electrical').trim(); const co = ($('m8-es-co')?.value||'Your Company').trim(); const subj = (proj && pack && co) ? `${proj} – ${pack} – Bid Submission – ${co}` : 'Bid Submission'; const body = `Attached: Bid submission for ${proj||'<Project>'} (${pack}). Included: signed bid form, cover letter, clarifications, alternates, unit prices, quote log, addenda acknowledgment. Please confirm receipt. Contact me with any questions. Best regards, <Your Name> ${co} <phone> • <email>`; $('m8-subject').textContent = subj; $('m8-body').textContent = body; } $('m8-make')?.addEventListener('click', makeEmail); $('m8-copy')?.addEventListener('click', async ()=>{ const s = $('m8-subject')?.textContent || ''; const b = $('m8-body')?.textContent || ''; if(!s || s==='—') return; const ok = await copyText(`Subject: ${s}\n\n${b}`); if(ok) toast($('m8-emailToast')); }); })(); </script> </div> </div> </div></div><div class="sqs-block website-component-block sqs-block-website-component sqs-block-spacer spacer-block sized vsize-1" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.spacer/f29db978-66ae-4d70-aba4-ea73bf05fc8e_715/website.components.spacer.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.spacer/f29db978-66ae-4d70-aba4-ea73bf05fc8e_715/website.components.spacer.visitor.js"]" data-block-type="1337" data-definition-name="website.components.spacer" id="block-c7a60b3d47de96a13bf6"><div class="sqs-block-content"> </div></div></div></div></div> </div> </main> <footer id="footer" class="site-footer" role="contentinfo"> <div class="sqs-layout sqs-grid-12 columns-12" data-layout-label="Footer" data-type="block-field" data-updated-on="1766001615309" id="footer-blocks"><div class="row sqs-row"><div class="col sqs-col-12 span-12"><div class="sqs-block website-component-block sqs-block-website-component sqs-block-code code-block" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.code/88607ebe-ac07-4442-a622-42f98a7bebbd_438/website.components.code.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.code/88607ebe-ac07-4442-a622-42f98a7bebbd_438/website.components.code.visitor.js"]" data-block-type="1337" data-definition-name="website.components.code" data-sqsp-block="code" id="block-yui_3_17_2_1_1756512942691_6429"><div class="sqs-block-content"><div class="sqs-code-container" data-localized="{"enableSafeModeButton":"Preview in safe mode","enableSafeModeText":"This block contains embedded scripts. Embedded scripts are disabled while you're logged in and editing your site.","enableSafeModeTitle":"Embedded Scripts","exitSafeModeButton":"Exit safe preview","exitSafeModeText":"Please view the page after logging out for accurate rendering.","exitSafeModeTitle":"Safe Preview","globalSafeMode":"Embedded Code: This block contains embedded code that has been disabled.","scriptDisabled":"Script Disabled"}" > <!-- =================== Announcement Ticker =================== --> <div style="background:#FFD447; color:#000; font-family:'Segoe UI',sans-serif; font-weight:600; overflow:hidden; white-space:nowrap; padding:10px 0;"> <div style="display:inline-block; padding-left:100%; animation:sfj-ticker 18s linear infinite;"> Next Estimating Workshop • Monday 10AM PST • Register Now at sfjohnsonconsulting.com • Free Manhour Calculators for Students • Build. Learn. Preserve. </div> </div> <style> @keyframes sfj-ticker { 0% { transform: translateX(0); } 100% { transform: translateX(-100%); } } </style> <!-- =================== SF Johnson Footer =================== --> <footer style="background:#0b1f3a; color:#ffffff; font-family:'Segoe UI',sans-serif; padding:40px 20px; font-size:15px;"> <div style="max-width:1200px; margin:auto; display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:30px;"> <!-- Column 1 --> <div> <h3 style="color:#FFD447; margin-bottom:10px; font-size:18px;">S.F. Johnson Consulting</h3> <p style="margin:0; color:#E0E6F2;">Helping contractors nationwide build, learn, and grow since 2010.</p> </div> <!-- Column 2 --> <div> <h4 style="color:#FFD447; margin-bottom:10px; font-size:16px;">Quick Links</h4> <ul style="list-style:none; margin:0; padding:0;"> <li><a href="https://www.sfjohnsonconsulting.com" style="color:#ffffff; text-decoration:none;">Home</a></li> <li><a href="https://www.sfjohnsonconsulting.com/intern-academy" style="color:#ffffff; text-decoration:none;">Intern Academy</a></li> <li><a href="https://www.sfjohnsonconsulting.com/full-trade-programs" style="color:#ffffff; text-decoration:none;">Programs</a></li> <li><a href="https://www.sfjohnsonconsulting.com/contact" style="color:#ffffff; text-decoration:none;">Contact</a></li> </ul> </div> <!-- Column 3 --> <div> <h4 style="color:#FFD447; margin-bottom:10px; font-size:16px;">Contact Us</h4> <p style="margin:0; color:#E0E6F2;"> 📞 <a href="tel:8442619737" style="color:#FFD447; text-decoration:none;">916-710-4146</a><br/> ✉️ <a href="mailto:info@sfjohnsonconsulting.com" style="color:#FFD447; text-decoration:none;">info@sfjohnsonconsulting.com</a><br/> 🌐 <a href="https://www.sfjohnsonconsulting.com/contact" style="color:#FFD447; text-decoration:none;">sfjohnsonconsulting.com</a> </p> </div> <!-- Column 4 --> <div> <h4 style="color:#FFD447; margin-bottom:10px; font-size:16px;">Follow Us</h4> <p style="margin:0;"> <a href="#" style="color:#ffffff; text-decoration:none; margin-right:12px;">YouTube</a> <a href="#" style="color:#ffffff; text-decoration:none; margin-right:12px;">Facebook</a> <a href="#" style="color:#ffffff; text-decoration:none;">LinkedIn</a> </p> </div> </div> <!-- Bottom bar --> <div style="margin-top:30px; border-top:1px solid rgba(255,255,255,.2); padding-top:14px; text-align:center; font-size:13px; color:#E0E6F2;"> © 2010–2025 S.F. Johnson Consulting & Construction Education. All Rights Reserved. </div> </footer> </div> </div></div><div class="sqs-block horizontalrule-block sqs-block-horizontalrule" data-block-type="47" id="block-yui_3_17_2_37_1464027709245_32051"><div class="sqs-block-content"><hr /></div></div><div class="row sqs-row"><div class="col sqs-col-8 span-8"><div class="sqs-block html-block sqs-block-html" data-block-type="2" data-border-radii="{"topLeft":{"unit":"px","value":0.0},"topRight":{"unit":"px","value":0.0},"bottomLeft":{"unit":"px","value":0.0},"bottomRight":{"unit":"px","value":0.0}}" data-sqsp-block="text" id="block-yui_3_17_2_17_1468338547821_53055"><div class="sqs-block-content"> <div class="sqs-html-content" data-sqsp-text-block-content> <h2 style="white-space:pre-wrap;">We Work In All 50 States</h2> </div> </div></div></div><div class="col sqs-col-4 span-4"><div class="sqs-block website-component-block sqs-block-website-component sqs-block-spacer spacer-block sized vsize-1" data-block-css="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.spacer/f29db978-66ae-4d70-aba4-ea73bf05fc8e_715/website.components.spacer.styles.css"]" data-block-scripts="["https://definitions.sqspcdn.com/website-component-definition/static-assets/website.components.spacer/f29db978-66ae-4d70-aba4-ea73bf05fc8e_715/website.components.spacer.visitor.js"]" data-block-type="1337" data-definition-name="website.components.spacer" id="block-yui_3_17_2_30_1467137944605_45707"><div class="sqs-block-content"> </div></div></div></div><div class="sqs-block horizontalrule-block sqs-block-horizontalrule" data-block-type="47" id="block-yui_3_17_2_10_1468350320832_10882"><div class="sqs-block-content"><hr /></div></div></div></div></div> </footer> </div> </div> <script src="https://static1.squarespace.com/static/ta/55dccaa0e4b0f748d9f6f215/972/scripts/site-bundle.js" type="text/javascript"></script> <script data-sqs-type="imageloader-bootstrapper">if(window.ImageLoader) window.ImageLoader.bootstrap({}, document);</script><script>Squarespace.afterBodyLoad(Y);</script><svg xmlns="http://www.w3.org/2000/svg" version="1.1" style="display:none" data-usage="social-icons-svg"><symbol id="youtube-unauth-icon" viewBox="0 0 64 64"><path d="M46.7,26c0,0-0.3-2.1-1.2-3c-1.1-1.2-2.4-1.2-3-1.3C38.3,21.4,32,21.4,32,21.4h0 c0,0-6.3,0-10.5,0.3c-0.6,0.1-1.9,0.1-3,1.3c-0.9,0.9-1.2,3-1.2,3S17,28.4,17,30.9v2.3c0,2.4,0.3,4.9,0.3,4.9s0.3,2.1,1.2,3 c1.1,1.2,2.6,1.2,3.3,1.3c2.4,0.2,10.2,0.3,10.2,0.3s6.3,0,10.5-0.3c0.6-0.1,1.9-0.1,3-1.3c0.9-0.9,1.2-3,1.2-3s0.3-2.4,0.3-4.9 v-2.3C47,28.4,46.7,26,46.7,26z M28.9,35.9l0-8.4l8.1,4.2L28.9,35.9z"/></symbol><symbol id="youtube-unauth-mask" viewBox="0 0 64 64"><path d="M0,0v64h64V0H0z M47,33.1c0,2.4-0.3,4.9-0.3,4.9s-0.3,2.1-1.2,3c-1.1,1.2-2.4,1.2-3,1.3 C38.3,42.5,32,42.6,32,42.6s-7.8-0.1-10.2-0.3c-0.7-0.1-2.2-0.1-3.3-1.3c-0.9-0.9-1.2-3-1.2-3S17,35.6,17,33.1v-2.3 c0-2.4,0.3-4.9,0.3-4.9s0.3-2.1,1.2-3c1.1-1.2,2.4-1.2,3-1.3c4.2-0.3,10.5-0.3,10.5-0.3h0c0,0,6.3,0,10.5,0.3c0.6,0.1,1.9,0.1,3,1.3 c0.9,0.9,1.2,3,1.2,3s0.3,2.4,0.3,4.9V33.1z M28.9,35.9l8.1-4.2l-8.1-4.2L28.9,35.9z"/></symbol></svg> </body> </html>