Released 10/5/2026
WEB
π Enhancements & Improvements
| π Sales Tax on Change Order Requests |
|
You can now list sales tax as its own line on a Change Order Request instead of rolling it into a markup or adding a placeholder scope line. Tax is booked as a cost at its own cost code, so the COR no longer overstates gross profit. On the Worksheet tab, select +Add tax line under a cost category and enter the tax as a rate or a dollar amount. Each category can have one tax line. The Summary tab shows tax in a read-only column (a category override suppresses it), and the COR PDF adds a Tax column plus a Tax total line above Grand Total. When the COR is approved, tax posts to job cost at its cost code, or to Uncategorized if no cost code is set. Prefer the current method? You can still apply tax at the end, after markups. Tax fields are also available through the Public API. See Change Order Requests for working with CORs. |
| π Audit Trail |
|
See who changed what, when, and where. Supported documents now have a View History drawer that lists each version, who made it, and a field-by-field before-and-after comparison. A new Audit Trail log under Global Documents > Auditing gathers every recorded change across your organization. Filter it by date, project, user, document type, and action, and export the results to CSV. Edits made by one person within five minutes are grouped into a single entry. Admins: Access to the Audit Trail is controlled by the Company - Settings: Audit Trail permission. Go to Company Settings > Permission Groups and set it for each permission group that should have access. See Audit Trail and Version History for more on version history and the log. |
| π Option to Lock Purchase Order Numbers |
|
A new company setting lets you stop users from entering their own PO numbers. Admins: To activate this restriction, go to Company Settings > Documents > Purchase Orders and select Restrict user from entering a custom number. When it is on, the number field is grayed out when you create, edit, copy, or revise a PO, and eSUB assigns the next number using the assigned project or global numbering scheme. The checkbox is cleared by default, so nothing changes until your company turns it on. The setting also applies when users create or edit POs in the mobile app. See Purchase Orders for working with POs. |
| π Cost to Complete: Show All Cost Codes |
|
A new All Cost Codes toggle lists every active cost code on the project, including ones with no Budget, COR, or Committed cost. Once a cost code has an adjustment, it stays on the list even when the toggle is turned off. The global report now also includes projects whose only activity is adjustments, and Revenue Forecast reflects these adjustments so the two reports agree. See Cost to Complete Report for more on the report. |
| π Revenue Forecast: Pending POs and Labor Forecast |
|
Purchase orders awaiting approval now count toward the Revenue Forecast, and future months use the Direct Labor forecast your team enters instead of only recorded labor. Percent complete and revenue are no longer understated. A few labels were also renamed to match how teams refer to these costs: Direct Costs is now Indirect Costs (on Actual Costs too), Outstanding is now Remaining, and Other Cost is now Uncategorized. |
| π Redesigned Time Cards Log |
|
Crew View and Project View are now one Time Cards tab. Use the Crew View | Project View toggle next to the search to switch between them, and old links to the project view still work. Changing weeks no longer reloads the whole page. The new grid has sortable, filterable column headers, and the Status filter shows statuses as colored chips. Expand a row to see its entries underneath, or use Expand All and Collapse All next to the week picker. A comment icon marks entries with comments; hover over it to read the comment. Each entry has a menu with View Time Card, View Daily Report, and Approve, shown based on your permissions. The daily report link that had its own column now lives in this menu. Select whole time cards or single entries with the checkboxes, then use Sync, Export, Print, or Approve on the week picker row. Search and filters now share one bar: active filters show as tokens in the search field, and Add Filter brings back one you removed. The week picker adds This Week, previous and next week arrows, a calendar, and a refresh button. See Time Management for working with time cards. |
| π Fixes |
| Change Order Requests, Revisions - Revising a COR whose attachments are all images or all files now completes normally. Before, the revision was created but the screen stayed on a loading spinner before showing an error, and retrying during that wait could leave a duplicate COR stuck in Revised status. |
|
Project Cost Codes, Labor and Overhead Labor - A project cost code can no longer be marked as both Labor and Overhead Labor, matching the rule already in place on the company cost code list. Before, this combination sent labor hours to overhead and left them out of committed labor on Cost to Complete.
|
| Document Log Exports - CSV and Excel exports from project and global document logs now include every record. Before, most exports were limited to the first 1,000 records. |
| Public API, COR Worksheet Cost Codes - Adding a COR Worksheet line with a cost code that does not exist, is not assigned to the project, or was removed from the project now returns an error. Before, the request returned success but silently dropped the cost code. |
| User Setup, Permission Group - Choosing a Permission Group before the user type, or changing the user type afterward, no longer shows a "This field is required" error on a field that is already filled in. A field that is truly empty is still flagged. |
| User Import, Mobile Numbers - Mobile numbers brought in through the user import template now display the same way as numbers entered by hand on the user view and edit screens. |
|
License Seats - Available seat counts now account for organizations that are over their license limit. Before, those organizations could see open seats they could not use, and adding a user failed. A seat now opens only once the organization is back under its limit.
|