Deals are great for winning work, but they are not designed to manage the contract that lives on after the close date. If you want clear visibility on renewals, upsells and contract performance, you need something more permanent than a closed won deal.
This hack walks through how to use custom objects in HubSpot to track contract agreements post-sale, automate renewal comms, and build the kind of reporting that actually helps with client management.
Why is this hack helpful?
Relying on Deals alone for post-sale visibility usually causes a few headaches:
- Renewal dates get lost in pipelines or buried in notes.
- Revenue reporting is tied to the original sale, not the live contract.
- Customer success and sales do not share a single, clean view of “what we sold” and “when it renews”.
- Upsell opportunities are reactive instead of planned.
Steps to Set It Up
Step 1: Define the contracts custom object
Start by deciding what a “contract” means in your world and how it should relate to existing records.
At a minimum, your contracts custom object will typically:
- Associate with:
- Company
- Deal
- Key Contact (e.g. main decision-maker or billing contact)
- Represent:
- A single agreement or subscription
- With clear start and end dates
- With a value and type (e.g. retainer, project, licence)
In HubSpot Enterprise, you or your admin will define the custom object using either:
- The Custom Objects UI (if available in your portal), or
- The CRM API (for more complex setups)
Name suggestions:
Step 2: Define the required contract properties
Before you import data or build workflows, lock in the core properties your team needs for reporting and automation. Examples:
Core details
- Contract Name (Single-line text)
- Contract ID/Reference (Single-line text)
- Contract Type (Dropdown: Retainer, Project, Licence, etc.)
- Status (Dropdown: Active, Pending, Expired, Cancelled)
Dates
- Contract Start Date (Date picker)
- Contract End Date (Date picker)
- Optional: Notice Period End Date or Renewal Date (Date picker)
Financials
- Contract Value (Number/Currency)
- Billing Frequency (Dropdown: Monthly, Quarterly, Annually, One-off)
- Revenue Stream (Dropdown: Implementation, Retainer, Training, etc.)
Associations
- Associated Company (relationship field)
- Associated Deal (relationship field, ideally the original sale)
- Associated Primary Contact (relationship field, your NPS recipient, for example)
Think about:
- What you need to see at a glance on the contract record.
- What you need for renewal workflows.
- What you want to slice and dice in reports (departments, products, revenue streams, etc.).
Step 3: Import historical contract data
To get value quickly, pull in what you already have.
- Export your contracts from your current system (or spreadsheets) with columns that map to your new contract properties.
- Prepare a CSV:
- Include columns for contract fields (name, dates, values, type).
- Include identifiers to link to Companies/Deals/Contacts (e.g. Company domain, Deal ID, Contact email).
- In HubSpot, go to Import → File from computer.
- Choose the Contracts custom object as the target.
- Map your CSV columns to the custom object properties.
- Map association columns to:
Once imported, you will have historical contracts in the same object as your new ones, which is what makes reporting and automation consistent.
Step 4: Create automation for renewals and NPS
With contracts defined, you can now build workflows that operate on the contracts object, instead of trying to bend Deals into something they are not.
4.1 Renewal reminders (internal)
Create a contracts-based workflow that:
- Enrols when:
- Contract End Date is known
- Uses date-based logic such as:
- “Send internal reminder X days before Contract End Date”
Actions could include:
- Create a task for the account manager or owner.
- Send an internal email to a shared inbox or team.
- Update a “Renewal Status” property to “Due for review”.
This gives your team predictable, timed reminders instead of last-minute scrambles.
4.2 NPS survey timing
You can also use Contracts to control when NPS surveys go out.
For example:
- Enrol the associated Contact in an NPS flow based on:
- X days after Contract Start Date.
- Or a milestone tied to the contract type.
Automation can:
- Identify the associated primary contact on the contract
- Set or update a property like NPS Recipient for use in your feedback tools
- Trigger the survey at a consistent moment in the customer journey
Step 5: Build a Contracts dashboard with cross-object reports
Once contracts are in HubSpot and associated correctly, you can use the custom report builder to create cross-object analytics.
Examples of useful reports:
- Contracts by status and end date
- See how many contracts are expiring in the next 30/60/90 days
- Revenue per department, split by revenue stream
- Use Contracts + Companies to group revenue by department or segment
- Contracts by type vs churn/renewal
- Compare performance of different contract types
Steps at a high level:
- Go to Reporting → Reports → Create report
- Choose Custom report builder
- Select:
- Contracts
- Companies
- Deals (and Contacts if needed)
- Add the fields you defined earlier:
- Contract Value
- Contract Type
- Revenue Stream
- Company attributes (industry, size, region, etc.)
- Save reports to a Contracts dashboard so you have a monthly “contracts health” view without manual exports
Once ongoing contracts are automatically created as part of your post-sale process, this dashboard becomes your single source of truth for revenue and renewals.
Wrapping Up
By introducing a contracts custom object into HubSpot, you separate the sales event from the ongoing agreement, which unlocks cleaner renewals, clearer reporting and more predictable upsell opportunities. Deals show you how you won the work. Contracts show you what is actually live, for how long, and for how much.
Want help building more smart automations in HubSpot? Contact us. Join our community by following our new Facebook page. Get more expert insights and tips on our YouTube.