Skip to content

Renewal deal auto-creation from contract end date

One of 565 written HubSpot workflow specs, by a collective of independent HubSpot consultants.

Free
Professional

Seat pricing: Professional edition. To build it, a GTM Seat or an Ops Seat (an Ops Seat cannot create marketing emails or sequences). Per-hub plans: Sales Hub Professional.

Updated for HubSpot seat pricing
OutcomeA renewal deal is created and associated to the account automatically 90 days before the contract ends, pre-filled with amount and owner, so no renewal depends on someone remembering a date.
Workflow maprenewal-expansion-001
Company: Customer, Contract End Date < 90 days, no renewal deal yet leads to Set Renewal Deal Created = true. Set Renewal Deal Created = true leads to Create renewal deal, associate to company. Create renewal deal, associate to company leads to Create task for owner: confirm details. Create task for owner: confirm details leads to Notify owner. Company: Customer, Contract End Date < 90 days, no renewal deal yet Set Renewal Deal Created = true Create renewal deal, associate to company Create task for owner: confirm details Notify owner
Company: Customer, Contract End Date < 90 days, no renewal deal yet leads to Set Renewal Deal Created = true. Set Renewal Deal Created = true leads to Create renewal deal, associate to company. Create renewal deal, associate to company leads to Create task for owner: confirm details. Create task for owner: confirm details leads to Notify owner. Company: Customer, Contract End Date < 90 days, no renewal deal yet Set Renewal Deal Created = true Create renewal deal, associate to company Create task for owner: confirm details Notify owner

When to use it, when not to

Use it

  • Use it when contract end dates already live in a property and renewal deals get created late or inconsistently.
  • Use it for accounts with one contract and one renewal event per cycle.

Skip it

  • Do not use it for accounts with multiple co-termed contracts or product lines. One company-level date cannot represent several renewal events; see the bundle variant.
  • Do not use it if Contract End Date is not reliably populated. This workflow reacts to a date, it does not calculate one.

Prerequisites

  • Property: Contract End Date (internal name contract_end_date), object company, field type date picker. Why: the single source of truth this workflow reacts to.
  • Property: Renewal Deal Created (internal name renewal_deal_created), object company, single checkbox. Why: stops the workflow from creating a second deal if the record is edited or re-enrolled.
  • Property: Contract Value (internal name contract_value), object company, number (currency). Why: pre-fills the new deal's amount.
  • Property: Do Not Renew (internal name do_not_renew), object company, single checkbox. Why: exclusion for accounts already confirmed as churning.
  • A "Renewal" pipeline, or a dedicated "Renewal" stage in the existing sales pipeline, plus a "Renewal" option added to the default Deal Type property (internal name dealtype). Why: keeps renewal deals separate from new-business reporting (see renewal-expansion-036).
  • Confirm the company owner property is populated for every active customer, since it is copied to the new deal.

Enrollment

Trigger typefilter-based
CriteriaLifecycle stage (or a custom Customer Status property) is equal to Customer AND Contract End Date is less than 90 days away AND Renewal Deal Created is not equal to true AND Do Not Renew is not equal to true
Re-enrollmentno. A single creation event is the goal; re-enrollment increases the risk of a duplicate deal if the flag write and the criteria check ever land out of order.
Suppression / exclusionsDo Not Renew = true, and any static list used to mark test or sandbox accounts.

Steps

  1. Set property value: Renewal Deal Created = true
  2. Create record: object deal, name "{{company.name}} - Renewal {{company.contract_end_date}}", pipeline "Renewal", stage "Renewal - Not Started", Deal Type = Renewal, amount copied from Contract Value, deal owner copied from company owner, associated to the enrolled company. The Create record action assigns the new deal's owner directly through its owner setting, either "Company's existing owner" or a custom owner property, so no follow-up copy action is needed (https://knowledge.hubspot.com/workflows/create-records-with-workflows)
  3. Create task: type "To-do", title "Confirm renewal deal details for {{company.name}}", assigned to company owner, due in 2 business days
  4. Send internal email notification to: company owner, subject "Renewal deal auto-created for {{company.name}}"

Known pitfalls

  • Filter-based enrollment fires once, when a record newly matches "less than 90 days away." If the workflow is off when that window opens, the company will not enroll later without editing the date or turning re-enrollment on, which then risks duplicates.
  • The Create record action exposes the enrolled company's existing owner as an owner option for the new deal, so the copy fallback is only needed if you want the owner taken from a different user property (https://knowledge.hubspot.com/workflows/create-records-with-workflows).
  • One company, one contract date: accounts with several active contracts will only ever get one renewal deal from this version. Do not force multi-contract accounts through it.
  • If Contract Value is stored in a non-default currency, confirm the new deal's currency matches before trusting the copied amount.
  • Deactivating or archiving the pipeline/stage referenced in the Create record action silently breaks the workflow at the next run; check workflow health after any pipeline edit.

Test plan

  1. Create a test company. Set Contract End Date to 89 days from today, lifecycle stage/customer status to Customer, Renewal Deal Created unchecked, Do Not Renew unchecked.
  2. Activate the workflow. Open Automation > Workflows > this workflow > History and confirm the company enrolled.
  3. Open the company record. Confirm a new deal exists in the Renewal pipeline, associated to the company, with the right amount and owner.
  4. Confirm Renewal Deal Created is now true on the company, and that the task and internal notification appear on the timeline.
  5. Edit Contract End Date to more than 90 days out, save, then back to under 90 days, and confirm the company does not re-enroll (re-enrollment is off).

The UAT script of this spec holds 2 cases, with the expected result and a sign-off sheet. It comes as Markdown and as a CSV for your spreadsheet.

Variants

  • Multi-contract accounts: enroll on a custom "Subscription" object instead of company, one record per contract (see renewal-expansion-040).
  • Deal-based trigger: if Contract End Date already lives on an active deal rather than the company, clone that deal on the same 90-day trigger instead of creating a fresh one.
  • Shorter or longer window: use 30 days for monthly contracts, 90 or 120 days for annual or multi-year contracts.

Build spec

Build specYAML, swipe
trigger:
  type: filter_based
  reenrollment: false
  object: company
  criteria:
    - property: lifecyclestage
      operator: equal
      value: customer
    - property: contract_end_date
      operator: less_than_days_away
      value: 90
    - property: renewal_deal_created
      operator: not_equal
      value: true
    - property: do_not_renew
      operator: not_equal
      value: true
actions:
  - type: set_property_value
    property: renewal_deal_created
    value: true
  - type: create_record
    object: deal
    name: "{{company.name}} - Renewal {{company.contract_end_date}}"
    pipeline: renewal
    stage: renewal_not_started
    dealtype: renewal
    amount_from_property: contract_value
    owner_from_associated: company_owner
    associate_to: enrolled_record
  - type: create_task
    task_type: todo
    title: "Confirm renewal deal details for {{company.name}}"
    assigned_to: company_owner
    due: +2_business_days
  - type: send_internal_email_notification
    to: company_owner
    subject: "Renewal deal auto-created for {{company.name}}"

Files and install

FileWhat it holds
PDF and MarkdownThe spec as you read it here, with the YAML build spec at the end.
Properties JSONCreates the fields in one API call.
Workflow JSONDocuments the build: the workflow in Automation API v4 format, switched off.
UAT scriptThe test cases, the expected results and a sign-off sheet, as Markdown and CSV.

Take the PDF and build it by hand. One-click install comes with a category pack or the full library.

Get the 12 free specs as a pack

Nothing deleted, enabled or enrolled.

renewal-expansion-001Spec version 2026-09

Read 12 complete specs before you pay.

One per category, same format as the paid ones. Email only, no card.

We email the link, then a short note when specs change. Nothing else.

All 12 free specs by email, no card.