Estimate Builder
Quickly create a customer estimate by filling in the details below. No data ever leaves your desktop browser (there is no database)! Use the buttons below to:
- Import Estimate: Paste a previous estimate in as a starting point. This will come from the last page in a saved PDF.
- Save Estimate as PDF: Print to PDF to save the estimate below (including a configuration export for future importing).
- Copy for Excel: Copies each engagement's summary table to your clipboard. Just paste into Excel (will lose formatting).
- Clear Estimate: Clear everything below and restart.
Overview
The following information will be used for all engagements and projects. Notes are for internal use and reminders.
For example, Acme - Office Support - 2024
For example, potential contract vehicle or scoping notes.
Hourly Role Rates
Adjust the rates below (hourly).
Other Direct Costs
Populate the ODC rates below (per unit).
The {{ estimate.title }} estimate was prepared at: {{ new Date()?.toLocaleString() }}, using Estimate Builder v{{ pageVersion }}.
The role and other-direct-cost (ODC) rates below were used for the estimate:
Role Rates
- {{ r.title }}: {{ r.value?.toLocaleString() }}
ODC Rates
- {{ p.title }}: {{ p.value?.toLocaleString() }}
Internal notes for the estimate:
{{ estimate.notes }}
Each engagement is listed on a separate page, followed by the reusable estimate configuration.
Engagements
Engagements are a collection of individual projects. Each engagement will receive its own pricing table and timeline view (e.g. base year and option years).
Currently configured engagements are listed below.
{{ e.title }}
Edit {{ e.title }} Delete {{ e.title }} Copy {{ e.title }}
{{ e.title }} will run for {{ e.months?.toLocaleString() }} months and has a {{ e.rateMultiplier }} rate multipler.
Internal notes for the engagement:
{{ e.notes }}
Project Summary for {{ e.title }}
| M{{ m }} | ||
|---|---|---|
|
[OPTIONAL]
{{ p.team.reduce((sum, item) => sum + parseInt(item.value), 0).toFixed(1) }} people
{{ p.title }} |
{{ e.title }}
| Deliverables | ROM |
|---|---|
| {{ p.title }} | {{ projectRom.team.grandTotal.rounded.toLocaleString() }} |
| Deliverables Subtotal | {{ engagementRom.base.team.rounded.toLocaleString() }} |
| ODCs | {{ engagementRom.base.odcs.rounded.toLocaleString() }} |
| Engagement Total | {{ (engagementRom.base.team.rounded + engagementRom.base.odcs.rounded).toLocaleString() }} |
{{ e.title }} - Optional Tasks
| Deliverables | ROM |
|---|---|
| {{ p.title }} | {{ projectRom.team.grandTotal.rounded.toLocaleString() }} |
| Deliverables Subtotal | {{ engagementRom.optional.team.rounded.toLocaleString() }} |
| ODCs | {{ engagementRom.optional.odcs.rounded.toLocaleString() }} |
| Engagement Total | {{ (engagementRom.optional.team.rounded + engagementRom.optional.odcs.rounded).toLocaleString() }} |
[OPTIONAL] {{ p.title }}
Edit {{ p.title }} Delete {{ p.title }} Copy {{ p.title }}
{{ p.title }} will run for {{ p.months?.toLocaleString() }} months, starting in month {{ p.monthStart?.toLocaleString() }}, and be a team of {{ p.team.reduce((sum, item) => sum + parseInt(item.value), 0).toFixed(1) }} people. This is an optional project.
Internal notes for the project:
{{ p.notes }}
| Role | Rate | People | Hours | Total |
|---|---|---|---|---|
| {{ row.title }} | {{ row.rate.toLocaleString() }} | {{ row.quantity.toLocaleString() }} | {{ row.hours.toLocaleString() }} | {{ row.total().raw.toLocaleString() }} |
| Project Total | {{ rom.team.grandTotal.raw.toLocaleString() }} | |||
| Rounded Estimate (25K increments) | {{ rom.team.grandTotal.rounded.toLocaleString() }} | |||
| ODC Item | Cost | Amount | Total |
|---|---|---|---|
| {{ row.title }} | {{ row.rate.toLocaleString() }} | {{ row.quantity.toLocaleString() }} | {{ row.total().raw.toLocaleString() }} |
| ODCs Total | {{ rom.odcs.grandTotal.raw.toLocaleString() }} | ||
| Rounded Estimate (5K increments) | {{ rom.odcs.grandTotal.rounded.toLocaleString() }} | ||
Estimate Configuration
You can copy and import the configuration below into the Estimate Builder to start with a baseline for the next one!
{{ estimate }}