Estimates Overview

Discover more about construction estimates with the ConstructionOnline API

Table of Contents

  1. Introduction
  2. api/Estimates
  3. api/EstimateCategories
  4. api/EstimateSubCategories
  5. api/EstimateItems
  6. api/EstimateMarkup

Introduction

Each estimate created in ConstructionOnline has a specific structure and calculation setting. By default, all estimates are set as 3-Level estimates, which consists of the Category > Subcategory > Item structure. All estimates are also initially set to apply the Standard Calculation Method, where a line items' base cost is calculated by multiplying the unit cost by the entered quantity value. 

An estimate's structure and settings will impact which fields are returned with each endpoint. Each 3-Level estimate is made up of individual categories, subcategories, and items that are each assigned a unique reference ID. Because estimate components are hierarchically related, each object will contain references to the objects it is related to. For example, an estimate item will list the IDs of the related project, estimate, estimate category, and estimate subcategory. 

The ConstructionOnline API provides five different types of estimating endpoints:

  • The api/Estimates endpoints return high-level information about an estimate, such as its name, related project, base cost, and more. These endpoints do not return any categories, subcategories, or items associated with the estimate. Each estimate will return as an indidividual object. 
  • The api/EstimateCategories endpoints return information about an estimate's categories. These endpoints will return specific information about each individual category, such as its ID and name. These endpoints do not return information on any subcategories or items within the category itself. Each category will return as an individual object.
  • The api/EstimateSubcategories endpoints return information about an estimate's subcategories. These endpoints will return specific information about each individual subcategory, such as its name, markup type, base cost, and more. These endpoints do not return information any items within the category itself, but will reference the estimate and estimate category the subcategory belongs to. Each subcategory will return as an individual object.
  • The api/EstimateItems endpoints return information about an estimate's items. These endpoints will return specific information about each individual item, such as its name, markup type, base cost, and tax. These endpoints will reference the estimate, estimate category, and estimate subcategory the item belongs to. Each item will return as an individual object.
  • The api/EstimateMarkup endpoints return information about an estimate's Company Overhead and Margin (COM) section. Each component of the COM section, such as Company Overhead, will return as an individual object. These endpoints do not return data on markup calculated from individual estimate items or subcategories. 

❗ IMPORTANT: 2-Level estimates are a legacy option that are not compatible with many of ConstructionOnline's financial features. Certain fields for some endpoints are only applicable to 2-Level estimates and will return null or a zero value for a 3-Level estimate. 

Additionally, all value used for financial calulations are stored with 6 decimals, but displayed in ConstructionOnline as rounded values. More information on financial rounding can be found here

api/Estimates

The following properties will return when an api/Estimates endpoint is called:

Name Type Description
ID integer Unique identifier for the estimate.
NAME string Name of the estimate as it appears in ConstructionOnline.
MARKUP_NAME string Name of the estimate's Company Overhead and Margin section.
TOTAL_PRICE decimal Total value of the estimate (also displayed as project total in the estimate). This includes the base cost of the estimate, markup, selections allowance, approved change orders, and company overhead and margin. Selection overages are not included in this total.
TOTAL_ALLOWANCE decimal Total selections allowance for the estimate. 
TOTAL_COM decimal Total value of the estimate's company overhead and margin section. This total does not include markup applied to individual estimate subcategories or items.
TOTAL_MARKUP decimal Total markup calculated for each estimate subcategory or item. This total does not include the estimate's company overhead and margin.
TOTAL_BASECOST decimal Base cost of the estimate before any tax or markup. This total does not include selections allowance, company overhead and margin, change orders, or overages. 
TOTAL_SALES_TAX decimal Total amount of tax calculated from the base cost of the estimate.
ORIGINAL_CONTRACT_VALUE decimal Original contract price/total of the estimate. This includes the base cost of the estimate, markup, selections allowance, and company overhead and margin. 
TOTAL_ACTUALS decimal Total actual costs recorded in ConstructionOnline for estimate subcategories or items, and approved change orders.
TOTAL_COMMITTED decimal Total committed costs recorded in ConstructionOnline for estimate subcategories or items.
TOTAL_INVOICED decimal Total amount invoiced for the estimate. 
TOTAL_REMAINING decimal Internal estimate calculation value.
TOTAL_BALANCE decimal Internal estimate calculation value.
TOTAL_ADJUSTMENT decimal Total adjustments entered in ConstructionOnline for estimate subcategories or items. 
TOTAL_ADJUSTEDCOST decimal Total adjusted cost for the estimate, which is base cost + total tax + adjustments + cost of all change orders linked to estimate. 
TOTAL_QB_ACTUALS decimal Total value of QuickBooks Actuals associated with the estimate. This value is populated by importing from QuickBooks and can include Bills and Expenses. 
TOTAL_QB_INVOICED decimal Total value of existing invoices within QuickBooks associated with the estimate. This value is populated by importing from QuickBooks.
TOTAL_LINKED_CO_PRICE decimal Total client price (cost + tax + markup) of all approved change orders linked to the estimate. 
TOTAL_LINKED_CO_COST decimal Total cost of all approved change orders linked to the estimate. This value does not include tax or markup.
TOTAL_CONTRACTPRICE decimal Total contract price for the estimate, which is base cost + total tax + total markup (not including 
CREATED_BY integer Unique identifier for the user who created the estimate.
DATE_CREATED string Date and time the estimate was created. 
CREATOR string Name of the user who created the estimate.
LMOD_BY integer Unique identifier for the user who last modified the estimate.
LMOD string Date and time the estimate was last modified.
MODIFIER string Name of the user who last modified the estimate.
FIVE_COLUMN_ESTIMATE boolean Signifies the estimate's calculation method. Returns true if the 5-column calculation method was used, false if the standard calculation method was used.
ADVANCED_ESTIMATE boolean Signifies the estimate's level of detail. Returns true if the estimate is a standard 3-level estimate, false if the estimate is a basic 2-level estimate.
COST_TOTAL decimal Internal estimate calculation value (base cost).
COST_ACTUAL decimal Internal estimate calculation value (actual costs).
COST_INVOICED decimal Internal estimate calculation value (invoiced costs).
COST_VARIENCE decimal Internal estimate calculation value (estimate - actual cost)
COST_COMMITTED decimal Internal estimate calculation value (committed costs).
COST_PAID decimal Internal estimate calculation value (costs paid).
TOTAL_PROFIT decimal Total profit recorded for the estimate.
PROJECT_ID integer Unique identifier for the project/opportunity that contains the estimate.
PROJECT_NAME string Name of the project/opportunity containing the estimate. 
LAST_QBD_ESTIMATE_DATE string Date the estimate was last sent over to QuickBooks Desktop.
LAST_QBD_ACTUAL_DATE string Date the estimate's actuals were last sent over to QuickBooks Desktop.
LAST_QBD_INVOICE_DATE string Date the estimate was last invoiced in QuickBooks Desktop.
LAST_QBD_PO_DATE string Date a purchase order was last created and sent to QuickBooks Desktop. 

Example response:

{
    "ID": 367610,
  "NAME": "1342 S Ross St - version w/out pool Estimate 2",
    "MARKUP_NAME": "Company Overhead and Margin",
  "TOTAL_PRICE": 1465228.6539999999,
  "TOTAL_ALLOWANCE": 14750.0,
  "TOTAL_COM": 521056.14139999985,
  "TOTAL_MARKUP": 7278.7456,
   "TOTAL_BASECOST": 896697.625,
  "TOTAL_SALES_TAX": 20377.892,
  "ORIGINAL_CONTRACT_VALUE": 1460160.4039999999,
  "TOTAL_ACTUALS": 850.0,
  "TOTAL_COMMITTED": 654.0,
  "TOTAL_INVOICED": 306099.07,
  "TOTAL_REMAINING": 1454876.1584,
  "TOTAL_BALANCE": 1157928.8339999998,
  "TOTAL_ADJUSTMENT": -1070.0,
  "TOTAL_ADJUSTEDCOST": 916500.51700000011,
    "TOTAL_QB_ACTUALS": 0.0,
    "TOTAL_QB_INVOICED": 0.0,
    "TOTAL_QB_COMMITTED": 0.0,
  "TOTAL_LINKED_CO_PRICE": 668.25,
  "TOTAL_LINKED_CO_COST": 495.0,
  "TOTAL_CONTRACTPRICE": 924354.2626,
    "CREATED_BY": 999997,
    "DATE_CREATED": "2022-09-22T14:44:14.263",
    "CREATOR": "Alex Kim",
    "LMOD_BY": 999997,
    "LMOD": "2022-09-22T14:44:14.257",
    "MODIFIER": "Alex Kim",
    "FIVE_COLUMN_ESTIMATE": false,
    "ADVANCED_ESTIMATE": true,
    "COST_TOTAL": 365852.50000000006,
  "COST_ACTUAL": 915308.12500000012,
  "COST_INVOICED": 850.0,
  "COST_VARIENCE": 306099.07,
  "COST_COMMITTED": 654.0,
  "COST_PAID": 850.0,
  "TOTAL_PROFIT": 8319.5956,
    "PROJECT_ID": 1312899,
  "PROJECT_NAME": "1342 S Ross St - version w/out pool",
    "LAST_QBD_ESTIMATE_DATE": null,
    "LAST_QBD_ACTUAL_DATE": null,
    "LAST_QBD_INVOICE_DATE": null,
    "LAST_QBD_PO_DATE": null
}

api/EstimateCategories

The following properties will return when an api/EstimateCategories endpoint is called:

Name Type Description
ID integer Unique identifier for the estimate category. 
ESTIMATE_ID integer Unique identifier for the estimate.
ROW_NUMBER integer Row number of the estimate that the estimate category is located on.
NAME string Name of the estimate category.
DESCRIPTION string Description entered for the estimate category.
NOTES_TEAMLINK string TeamLink notes entered for the estimate category.
NOTES_CLIENTLINK string ClientLink notes entered for the estimate category.
NOTES_GENERAL string General notes entered for the estimate category.
TRAFFIC_COLOR integer Represents the traffic light color assigned to the estimate category. The number 1 corresponds to the color green, 2 corresponds to the color yellow, 3 corresponds to the color red, and 0 means no color has been assigned to the category.
COST_CODE string Corresponds to the Code column of the estimate subcategory. 
COST_CODE_ID integer Unique identifier for the cost code assigned to the estimate category.
COST_ESTIMATE decimal Base cost of the estimate category.

 

{
     
        "ID": 4393211,
        "ESTIMATE_ID": 367610,
        "ROW_NUMBER": 1,
        "NAME": "Planning",
        "DESCRIPTION": "",
        "NOTES_TEAMLINK": "",
        "NOTES_CLIENTLINK": "",
        "NOTES_GENERAL": "",
        "TRAFFIC_COLOR": 0,
        "COST_CODE": "",
        "COST_CODE_ID": 0,
        "COST_ESTIMATE": 97080.0
    },
    {
     
        "ID": 4393212,
        "ESTIMATE_ID": 367610,
        "ROW_NUMBER": 19,
        "NAME": "Foundation",
        "DESCRIPTION": "",
        "NOTES_TEAMLINK": "",
        "NOTES_CLIENTLINK": "",
        "NOTES_GENERAL": "",
        "TRAFFIC_COLOR": 0,
        "COST_CODE": "",
        "COST_CODE_ID": 0,
        "COST_ESTIMATE": 19078.100000000002
  }

api/EstimateSubcategories

The following properties will return when an api/EstimateSubcategories endpoint is called:

Name Type Description
ID integer Unique identifier for the estimate subcategory
ESTIMATE_ID integer Unique identifier for the estimate.
CATEGORY_ID integer Unique identifier for the estimate category.
ROW_NUMBER integer Row number of the estimate that the estimate subcategory is located on.
NAME string Name of the estimate subcategory.
DESCRIPTION string Description entered for the estimate subcategory.
CLASSIFICATION integer Reserved for future use.
STATUS integer Reserved for future use.
COST_ESTIMATE decimal Base cost of the estimate subcategory.
NOTES_TEAMLINK string TeamLink notes entered for the estimate subcategory.
NOTES_CLIENTLINK string ClientLink notes entered for the estimate subcategory.
NOTES_GENERAL string General notes entered for the estimate subcategory.
LINE_ITEM_MARKUP integer Only applicable to 2-level estimates. Individual markup value for the estimate subcategory.
RATE decimal Only applicable to 2-level estimates. Quantity of the estimate subcategory.
RATE_QTY decimal Only applicable to 2-level estimates. Unit cost of the estimate subcategory.
LINE_ITEM_MARKUP_TYPE integer Only applicable to 2-level estimates. Signifies which markup calculation type was selected for the estimate subcategory. A value of 1 represents Percent Markup (%), 2 is Dollar Markup, 3 is Dollar per Unit Markup, and 4 is Classification Markups Applied. 
ADJUSTMENT decimal Total adjustments entered for the estimate subcategory.
FIVE_COLUMN_EQUIPMENT decimal Total equipment costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_LABOR decimal Total labor costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_MATERIAL decimal Total material costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_OTHER decimal Total other costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_SUB decimal Total subcontractor costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
TRAFFIC_COLOR integer Represents the traffic light color assigned to the estimate subcategory. The number 1 corresponds to the color green, 2 corresponds to the color yellow, 3 corresponds to the color red, and 0 means no color has been assigned to the subcategory.
COST_CODE string Name of the cost code assigned to the subcategory.
COST_CODE_ID integer Unique identifier for the cost code assigned to the subcategory.
DOLLAR_MARKUP decimal Total markup calculated from the subcategory.
TOTAL_MARKUP decimal Total markup calculated from the subcategory.
COMMITTED_COSTS decimal Total committed costs recorded for the estimate subcategory.
INVOICED_AMOUNTS decimal Total amount invoiced for the estimate subcategory.
ACTUAL decimal Total actual costs recorded for the estimate subcategory.
QB_COMMITTED decimal Total committed costs recorded in QuickBooks for the the estimate subcategory.
QB_INVOICED decimal Total amount invoiced in QuickBooks for the estimate subcategory.
QB_ACTUAL decimal Total actual costs recorded in QuickBooks for the estimate subcategory.
SALES_TAX decimal Total tax calculated for the estimate subcategory.
UNIT integer Unique identifier of the unit used to measure the estimate subcategory.
UNIT_NAME string Name of the unit used to measure the estimate subcategory.
ASSIGNED string Only applicable to 2-level estimates. Unique identifier for the user(s) assigned to the estimate subcategory as a resource. 

Example response:

 {
        "ID": 22069965,
        "ESTIMATE_ID": 367610,
        "CATEGORY_ID": 4393211,
        "ROW_NUMBER": 2,
        "NAME": "Design Services",
        "DESCRIPTION": "",
        "CLASSIFICATION": 6,
        "STATUS": 0,
        "COST_ESTIMATE": 5000.0,
        "NOTES_TEAMLINK": "",
        "NOTES_CLIENTLINK": "",
        "NOTES_GENERAL": "",
        "LINE_ITEM_MARKUP": "0",
        "RATE": 0.0,
        "RATE_QTY": 0.0,
        "LINE_ITEM_MARKUP_TYPE": 1,
        "ADJUSTMENT": 0.0,
        "FIVE_COLUMN_EQUIPMENT": null,
        "FIVE_COLUMN_LABOR": null,
        "FIVE_COLUMN_MATERIAL": null,
        "FIVE_COLUMN_OTHER": null,
        "FIVE_COLUMN_SUB": null,
        "TRAFFIC_COLOR": null,
        "COST_CODE": "",
        "COST_CODE_ID": 0,
        "DOLLAR_MARKUP": 0.0,
        "TOTAL_MARKUP": 0.0,
        "COMMITTED_COSTS": 0.0,
        "INVOICED_AMOUNTS": 0.0,
        "ACTUAL": 0.0,
        "QB_COMMITTED": 0.0,
        "QB_INVOICED": 0.0,
        "QB_ACTUAL": 0.0,
        "SALES_TAX": 0.0,
        "UNIT": "0",
        "UNIT_NAME": null,
        "ASSIGNED": null
    },

api/EstimateItems

The following properties will return when an api/EstimateItems endpoint is called:

Name Type Description
ID integer Unique identifier for the estimate item.
ESTIMATE_ID integer Unique identifier for the estimate.
CATEGORY_ID integer Unique identifier for the category containing the estimate item.
SUBCATEGORY_ID integer Unique identifier for the subcategory containing the estimate item.
ROW_NUMBER integer Row number of the estimate that the estimate item is located on.
NAME string Name of the estimate item.
DESCRIPTION string Description entered for the estimate item.
CLASSIFICATION integer Designates the classification assigned to the estimate item. A value of 1 is the classification Material, 2 is Labor, 3 is Subcontractor, 4 is Equipment, 5 is Other, and 6 is Unclassified. 
STATUS integer Designates the status assigned to the estimate item. A value of 1 is the status Estimated, 2 is Firm, and 3 is Bid.
COST_ESTIMATE decimal Base cost of the estimate item.
NOTES_TEAMLINK string TeamLink notes entered for the estimate item.
NOTES_CLIENTLINK string ClientLink notes entered for the estimate item.
NOTES_GENERAL string General notes entered for the estimate item.
LINE_ITEM_MARKUP integer Markup value for the estimate item.
RATE decimal Quantity of the estimate item.
RATE_QTY decimal Unit cost of the estimate item.
LINE_ITEM_MARKUP_TYPE integer Signifies which markup calculation type was selected for the estimate item. A value of 1 represents Percent Markup (%), 2 is Dollar Markup, 3 is Dollar per Unit Markup, and 4 is Classification Markups Applied. 
ADJUSTMENT decimal Adjustment value entered for the estimate item.
FIVE_COLUMN_EQUIPMENT decimal Total equipment costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_LABOR decimal Total labor costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_MATERIAL decimal Total material costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_OTHER decimal Total other costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
FIVE_COLUMN_SUB decimal Total subcontractor costs entered for a 5-column estimate. Returns null if estimate is not 5-column.
TRAFFIC_COLOR integer Represents the traffic light color assigned to the estimate item. The number 1 corresponds to the color green, 2 corresponds to the color yellow, 3 corresponds to the color red, and 0 means no color has been assigned to the item.
COST_CODE string Name of the cost code assigned to the estimate item.
COST_CODE_ID integer Unique identifier for the cost code assigned to the estimate item.
DOLLAR_MARKUP decimal Individual markup calculated from the estimate item.
COMMITTED_COSTS decimal Total committed costs recorded for the estimate item.
INVOICED_AMOUNTS decimal Total amount invoiced for the estimate item.
ACTUAL decimal Total actual costs recorded for the estimate item.
QB_COMMITTED decimal Total committed costs recorded in QuickBooks for the the estimate item.
QB_INVOICED decimal Total amount invoiced in QuickBooks for the estimate item.
QB_ACTUAL decimal Total actual costs recorded in QuickBooks for the estimate item.
SALES_TAX decimal Total tax calculated for the estimate item.
UNIT integer Unique identifier of the unit used to measure the estimate item.
UNIT_NAME string Name of the unit used to measure the estimate item.
ASSIGNED string Unique identifier for user(s) assigned to the estimate item as a resource. 

Example response:

{
        "ID": 47440788,
        "ESTIMATE_ID": 367610,
        "CATEGORY_ID": 4393211,
        "SUBCATEGORY_ID": 22069965,
        "ROW_NUMBER": 3,
    "NAME": "Site Work",
        "DESCRIPTION": "",
        "CLASSIFICATION": 5,
        "STATUS": 0,
        "COST_ESTIMATE": 5000.0,
        "NOTES_TEAMLINK": "",
        "NOTES_CLIENTLINK": "",
    "NOTES_GENERAL": "Specifications require a 10' uncleared buffer area.",
    "LINE_ITEM_MARKUP": "1",
    "RATE": 500.0,
    "RATE_QTY": 10.0,
        "LINE_ITEM_MARKUP_TYPE": 1,
        "ADJUSTMENT": 0.0,
        "FIVE_COLUMN_EQUIPMENT": null,
        "FIVE_COLUMN_LABOR": null,
        "FIVE_COLUMN_MATERIAL": null,
        "FIVE_COLUMN_OTHER": null,
        "FIVE_COLUMN_SUB": null,
    "TRAFFIC_COLOR": 1,
        "COST_CODE": "",
    "COST_CODE_ID": 75,
        "DOLLAR_MARKUP": 0.0,
        "COMMITTED_COSTS": 0.0,
    "INVOICED_AMOUNTS": 1000.0,
        "ACTUAL": 0.0,
        "QB_COMMITTED": null,
        "QB_INVOICED": null,
        "QB_ACTUAL": 0.0,
        "SALES_TAX": 0.0,
        "UNIT": "0",
        "UNIT_NAME": null,
    "ASSIGNED": 123456
  }

 

api/EstimateMarkup

The following properties will return when an api/EstimateMarkup endpoint is called:

Name Type Description
ID integer Unique identifier for the markup entry.
NAME string Name of the markup entry.
ESTIMATE_ID integer Unique identifier for the estimate containing the markup entry.
VALUE double Value assigned to the markup entry.
MARKUP_TYPE integer Markup type assigned to the markup entry. A value of 1 represents Percent Margin, 2 represents Percent of Costs, and 3 represents Fixed Amount. 
INVOICED double Amount invoiced towards the markup entry.
ACTUALS double Actual cost of the markup entry; amount recorded in the Actuals column of the estimate.
QB_ACTUALS double Value of QuickBooks Actuals associated with the markup entry.
QB_INVOICED double Value of invoices within QuickBooks associated with the markup entry.
TOTAL_MARKUP double Total amount calculated for the markup entry.

Example response:

{
        "ID": 1396830,
        "NAME": "Company Overhead",
        "ESTIMATE_ID": 367610,
        "VALUE": 8.0,
      "MARKUP_TYPE": 2,
        "INVOICED": 0.0,
        "ACTUALS": 0.0,
        "QB_ACTUALS": 0.0,
        "QB_INVOICED": 0.0,
        "TOTAL_MARKUP": 29305.000000000004
    },
  {
        "ID": 1396831,
        "NAME": "Company Margin",
        "ESTIMATE_ID": 367610,
        "VALUE": 30.0,
      "MARKUP_TYPE": 1,
        "INVOICED": 0.0,
        "ACTUALS": 0.0,
        "QB_ACTUALS": 0.0,
        "QB_INVOICED": 0.0,
        "TOTAL_MARKUP": 169550.35714285722
    },
  {
        "ID": 1396832,
        "NAME": "Contingency",
        "ESTIMATE_ID": 367610,
        "VALUE": 0.0,
      "MARKUP_TYPE": 3,
        "INVOICED": 0.0,
        "ACTUALS": 0.0,
        "QB_ACTUALS": 0.0,
        "QB_INVOICED": 0.0,
        "TOTAL_MARKUP": 0.0
  }