Contract renewal workflow not triggering automatically on contract expiry date

We’ve configured a contract renewal workflow in Oracle CX Cloud that should automatically trigger 30 days before contract expiry to initiate the renewal process. The workflow is supposed to create a renewal opportunity, notify the account manager, and update the contract status to ‘Pending Renewal’.

However, we’ve had multiple contracts reach their 30-day pre-expiry window in the past two weeks, and none of them triggered the workflow. We manually checked the contracts and confirmed the expiry dates are correct and the workflow is active. The workflow trigger configuration specifies ‘Contract Expiry Date - 30 days’ as the trigger condition.

We’ve verified the scheduled process is enabled in the Workflow Engine settings and the contract expiry field mapping points to the correct field (End_Date_c). When we manually trigger the workflow on a test contract, it executes perfectly and creates all the expected records. But the automatic scheduled trigger based on the expiry date isn’t working. This is causing delays in our renewal process and we’re at risk of missing renewal windows for several high-value contracts.

Your contract renewal workflow automation issue stems from three configuration problems that need to be addressed in sequence:

1. Workflow Trigger Configuration - Date Calculation Logic

The trigger condition ‘Contract Expiry Date - 30 days’ doesn’t work properly in scheduled workflows in OCX 23B. The workflow engine doesn’t evaluate this as a relative date comparison. You need to reconfigure the trigger logic:

Navigate to Workflow Engine → Your Renewal Workflow → Trigger Conditions

Replace the current trigger with a proper date range filter:

  • Remove: ‘Contract Expiry Date - 30 days’
  • Add: ‘End_Date_c >= TODAY() AND End_Date_c <= TODAY() + 30’
  • Add secondary condition: ‘Status_c != Pending Renewal’
  • Add tertiary condition: ‘Renewal_Notification_Sent_c = FALSE’

The second and third conditions prevent the workflow from processing the same contract multiple times. You’ll need to add a checkbox field ‘Renewal_Notification_Sent_c’ to your Contract object to track which contracts have already been processed.

2. Scheduled Process Setup - Execution Frequency and Scope

Your scheduled process needs proper configuration to run reliably:

Go to Workflow Engine → Scheduled Processes → Contract Renewal Workflow

Verify these settings:

  • Execution Frequency: Daily at 6 AM (before business hours)
  • Record Selection: ‘Active Contracts Only’ (Status = Active or Current)
  • Batch Size: 50 contracts per execution (prevents timeout on large volumes)
  • Execution User: System Administrator account (ensures full permissions)
  • Enable Logging: Check ‘Log all executions’ for troubleshooting

The critical setting is the Record Selection scope. If this isn’t configured, the scheduled process might not query any records at all, even though the workflow itself is active. The execution must explicitly query for contracts matching your date criteria.

3. Contract Expiry Field Mapping - Data Type and Accessibility

Verify that your expiry date field is properly configured for workflow automation:

Navigate to Setup → Objects → Contract → Fields → End_Date_c

Check these properties:

  • Field Type: Must be ‘Date’ (not Text, Formula, or DateTime)
  • Required: Should be checked (ensures all contracts have expiry dates)
  • Indexed: Should be enabled (improves workflow query performance)
  • API Accessible: Must be enabled for workflow engine to read it

If End_Date_c is a Formula field or Text field, the workflow engine cannot perform date arithmetic on it. You’ll need to either change the field type to Date, or create a new Date field and migrate the data.

Complete Implementation Steps:

  1. Create tracking field: Setup → Objects → Contract → New Field

    • Name: Renewal_Notification_Sent_c
    • Type: Checkbox
    • Default: Unchecked
  2. Update workflow trigger conditions with proper date range logic

  3. Configure scheduled process with daily execution and correct record selection

  4. Verify End_Date_c field type is Date and indexed

  5. Add workflow action to set Renewal_Notification_Sent_c = TRUE after successful execution

  6. Test with a contract where End_Date_c = TODAY() + 25 (within 30-day window)

  7. Monitor scheduled process execution log the next day to confirm it runs

Testing and Validation:

Create a test contract to validate the fix:

  • Set End_Date_c to 25 days from today
  • Set Status to ‘Active’
  • Ensure Renewal_Notification_Sent_c is unchecked
  • Wait for next scheduled execution (or trigger manually)
  • Verify workflow creates renewal opportunity and updates contract status
  • Confirm Renewal_Notification_Sent_c is now checked

Handling Missed Renewals:

For contracts that already passed their 30-day window without triggering the workflow:

  1. Create a one-time data fix workflow
  2. Query contracts where End_Date_c < TODAY() + 30 AND Status = Active AND Renewal_Notification_Sent_c = FALSE
  3. Manually execute the renewal workflow on these contracts
  4. This catches up on missed renewals while your automated process is being fixed

Monitoring and Maintenance:

Set up ongoing monitoring to prevent future issues:

  • Schedule weekly report of contracts expiring in next 45 days
  • Compare report against workflow execution log to ensure all contracts are processed
  • Set up alert if scheduled process fails to execute
  • Review execution log monthly for any silent failures

By addressing the trigger condition logic, scheduled process configuration, and field mapping, your contract renewal workflow will reliably trigger 30 days before expiry dates.


This draft is based on general Oracle CX Cloud knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

Check if your scheduled process is actually running. Go to Workflow Engine → Scheduled Processes and look at the execution history for your contract renewal workflow. If there’s no execution history, the scheduler itself isn’t running. Verify that the scheduled job is enabled and has the correct frequency setting - it should run at least daily to catch contracts entering the 30-day window.

The workflow trigger configuration might have an incorrect date calculation. In OCX 23B, date-based triggers need to use a specific formula syntax. Instead of ‘Contract Expiry Date - 30 days’, you should use ‘TODAY() + 30 >= End_Date_c’ to catch contracts expiring within the next 30 days. The minus operator doesn’t work reliably in scheduled workflow triggers for future date comparisons.

I’ve seen this issue before. The contract expiry field mapping might be pointing to a field that doesn’t have proper date format validation. If End_Date_c is a text field formatted as a date rather than an actual Date field type, the workflow engine can’t perform date arithmetic on it. Check the field type in your Contract object definition and make sure it’s defined as Date, not Text or Formula.

Your scheduled process setup might not have the correct query filter. The workflow needs a filter that selects contracts in the appropriate date range, not just a trigger condition. Navigate to your workflow configuration and check the ‘Record Selection Criteria’ section. It should have a filter like ‘End_Date_c >= TODAY() AND End_Date_c <= TODAY() + 30 AND Status != Pending Renewal’ to avoid processing the same contracts multiple times.

There’s a known issue in OCX 23B where scheduled workflows on date fields don’t trigger if the contract record hasn’t been modified recently. The workflow engine only evaluates records that have been updated within a certain timeframe. You might need to add a nightly scheduled job that touches the modified date on contracts approaching expiry, which then allows the renewal workflow to pick them up.

Check the workflow execution permissions and the service account that runs scheduled processes. If the scheduled process service account doesn’t have read access to all contract records or doesn’t have permission to create opportunities, the workflow will fail silently without logging errors. Verify that the workflow service account has full CRUD permissions on Contract and Opportunity objects.