We use the Contracts object as our source of truth for active vs. past customers. We sell two kinds of work:
- Retainers: recurring line items with a term. These work well. HubSpot calculates the end date, and the contract moves to Completed on its own.
- Projects: a one-time fee, sometimes invoiced in milestones (Part 1, Part 2, etc.). The contract only has one-time line items.
We don’t bill in HubSpot (billing happens in QuickBooks), so our contracts have HubSpot billing turned off.
The problem: a contract with only one-time line items never gets an end date, and the end date can’t be entered by hand. Completed only happens once a contract passes its end date, and it can’t be set manually either. So project contracts stay Active forever, even after the work is finished. That means we can’t use “active contracts” to tell who’s still a customer.
The only options today are:
- Terminate the contract. That’s misleading: the project wasn’t cancelled, it was finished, and it muddies churn reporting.
- Add a $0 recurring line item just to create an end date. It’s a workaround that adds clutter and needs explaining to every user.
What we’d like (any of these would solve it):
- A “Mark as Completed” action on contracts, with a completion date.
- The ability to set an end date on contracts that only have one-time line items.
- An optional end date or service period on one-time line items, which the contract end date could be calculated from.
This matters most for teams that bill outside HubSpot and use contracts as their customer record rather than their billing engine.
