Scope requirements
Scope requirements
Understanding goal architecture
Unlike standard objects (like deals or contacts) which exist as single rows, a “Goal” in HubSpot is a container for multiple time-bound objects. To successfully create or manage goals, you must understand the hierarchy of the three key components: Goal Family, Goal Target Group, and Goal Target.The goal hierarchy
The API defines a goal using a nesting structure linked by specific IDs.Goal family (the “goal”)
This is what a user perceives as one goal (e.g., “2025 Revenue Quota”). It is identified by thehs_group_correlation_uuid. This ID links every time-slice together into one cohesive unit.

hs_group_correlation_uuid. If this ID differs across targets, they will appear as separate goals.
Goal Target Group (The Schedule)
This represents the schedule or assignment constraints (e.g., “Monthly targets for User A”). It is identified by thehs_goal_target_group_id. All time periods for that specific user’s schedule share this ID.

hubspot_owner_id property determines who sees this goal in their dashboard. For team goals, the hs_assignee_team_id (or hubspot_team_id) property is used instead to assign the goal to the entire team.
Goal target (the time slice)
These are the individual objects holding the data. For a monthly goal, there are 12 separategoal_target objects (Jan, Feb, Mar…). Each has its own hs_start_datetime and hs_target_amount.

Example: Structure of a Monthly Goal
The JSON below illustrates two separate goal objects: one for January and one for February. While the target data (dates and amounts) changes for each month, they belong to the same Goal Family and Goal Target Group. As shown in the highlighted lines, thehs_goal_name, hs_group_correlation_uuid, and hs_goal_target_group_id remain constant to link these objects into a single cohesive goal schedule.
Retrieve goals
To retrieve goals, make a request in one of the following ways:- Retrieve a single target:
GET /crm/objects/2026-03/goal_targets/{goalTargetId}/ - Retrieve all targets:
GET /crm/objects/2026-03/goal_targets - Search for targets:
POST /crm/objects/2026-03/goal_targets/search
POST request to the search endpoint and include filters in the request body. Learn more about searching the CRM.
For example, to retrieve a goal with an ID of 44027423340, the request URL would be the following:
https://api.hubapi.com/crm/objects/2026-03/goal_targets/44027423340/
The response will include a few default properties, including the create date, last modified date.
properties query parameter in the request URL along with comma-separated property names. Learn more about goal properties below.
For example, making a GET request to the following URL would result in the response below:
crm/objects/2026-03/goal_targets/{goalTargetId}?properties=hs_goal_name,hs_target_amount
Create goals
To create goals, make aPOST request to /crm/objects/2026-03/goal_targets/batch/create.
To ensure these objects appear as a single goal in the UI, your batch request must adhere to specific architectural constraints:
- Shared Identifiers: Every target object in the batch must share the same
hs_group_correlation_uuidandhs_goal_target_group_id. This links them into a “Goal Family”. - Sequential Dates: You must increment the
hs_start_datetimeandhs_end_datetimefor each object. For monthly goals, start dates must be the first millisecond of the month, and end dates must be the last millisecond of the month. - Milestone Accuracy: The number of objects must match the
hs_milestonefrequency (e.g., creating 12 objects for a “monthly” milestone).
/crm/objects/2026-03/goal_targets/batch/create
Update goals
To update goals, make a request in one of the following ways:- Update a single target:
PATCH /crm/objects/2026-03/goal_targets/{goalTargetId} - Batch update multiple targets:
POST /crm/objects/2026-03/goal_targets/batch/update
- When to use Single Update (
PATCH): Use this when changing data specific to one time slice.- Example: Changing the
hs_target_amountfor just the month of October. - Example: Manually overriding the
hs_kpi_valuefor a specific month.
- Example: Changing the
- When to use Batch Update (
POST): Use this when changing properties that define the Goal Family. If you change these on one object but not the others, the goal may disappear from the UI or appear as duplicates.- Example: Renaming the goal (
hs_goal_name). You must update all 12 targets. - Example: Changing the pipeline (
hs_pipeline_ids). You must update all 12 targets.
- Example: Renaming the goal (
PATCH /crm/objects/2026-03/goal_targets/{goalTargetId}
Merge goals
To merge two goal records, make aPOST request to /crm/objects/2026-03/goal_targets/merge. The remaining record combines activities, associations, and most property values from both records. For example, merge duplicate goals to preserve historical context and consolidate their activity timelines. Learn more about what happens when you merge HubSpot records.
Include the following in your request body:
For example, to merge the record
45678 into the record 12345, your request would look like:
id is the record ID of the merged record.
Delete goals
To delete goals, make a request in one of the following ways:- Delete a single target:
DELETE /crm/objects/2026-03/goal_targets/{goalTargetId} - Batch delete multiple targets:
POST /crm/objects/2026-03/goal_targets/batch/archive
- Deleting a Single Target (
DELETE): If you use theDELETEendpoint on a single ID, you are removing only that specific slice of time.- Example: If you delete the target for “January,” the goal will still exist in the UI for February through December. The goal family remains active, but the start date or total target amount may calculate incorrectly in reports.
- Deleting a Goal Family (
POST): To completely remove a goal (e.g., “2025 Revenue Quota”) from the system, you must delete every target object associated with that goal’shs_group_correlation_uuid.- Example: You must first query the goal targets to retrieve all IDs associated with the Goal Family, and then use the batch archive endpoint to delete them all simultaneously.
POST /crm/objects/2026-03/goal_targets/batch/archive
Goals properties
When making aGET request to the Goals API, you can also request specific goal properties.
For example, if you wanted to include properties such as hs_goal_name, hs_target_amount, hs_start_datetime, hs_end_datetime, and hs_created_by_user_id, the request URL may resemble the following:
https://api.hubapi.com/crm/objects/2026-03/goal_targets/44027423340?properties=hs_goal_name,hs_target_amount,hs_start_datetime,hs_end_datetime,hs_created_by_user_id
The response may look similar to the JSON excerpt below:
Create campaign goals
Create campaign goals by associating goals with existing campaigns, either when creating the campaign or by updating it after creation. You can create goals for campaign influence, website traffic, revenue, deal count, deal amount, and contact lifecycle metrics.A goal must be associated with a campaign to count toward that campaign’s performance. If you create a goal without an association, you can associate it with a campaign later. Until the association exists, the goal won’t be linked to a campaign or counted toward its performance.
Associate a goal with a campaign
To associate a goal with a campaign, include anassociations array alongside the properties object. The association uses the HubSpot-defined association type 809 for goal-to-campaign associations.
In the following example, to.id is the campaign record ID:
Properties common to campaign goal types
These properties appear in every campaign-goal request:Type-specific properties
Campaign goal types
1. Marketing campaign influence goal
This goal tracks the number of contacts influenced by a campaign. It doesn’t require any properties beyond the common properties. Usenumber for hs_kpi_unit_type and HIGHER_IS_BETTER for hs_kpi_tracking_method.
2. Website traffic goal
This goal tracks visits or sessions driven by a campaign. It doesn’t require any properties beyond the common properties. Usenumber for hs_kpi_unit_type and HIGHER_IS_BETTER for hs_kpi_tracking_method.
3. Campaign revenue goal
This goal tracks revenue attributed to a campaign. Because it is a KPI-based goal, it requires properties that define what is measured and how it is calculated. The following properties are required:hs_goal_target_currency_code: the currency used for the target, such asUSD.hs_kpi_object_type_id: the object measured by the KPI, such as0-20.hs_kpi_property_name: the property aggregated, such ashs_last_touch_amount.hs_kpi_metric_type: the aggregation method, such asSUM.hs_kpi_time_period_propertyandhs_kpi_time_period_property_type: the date property and property type that define the KPI timeframe, such ashs_createdateanddatetime.hs_kpi_attribution_model: the attribution model, such ashs_first_touch_amount.
4. Campaign deal count goal
This goal tracks the number of deals attributed to a campaign. The following properties are required:hs_kpi_object_type_id: the object measured, such as0-20.hs_kpi_property_name: the property counted, such ashs_object_id.hs_kpi_metric_type: the aggregation method, such asCOUNT.hs_kpi_time_period_propertyandhs_kpi_time_period_property_type: the date property and property type that define the KPI timeframe, such ashs_createdateanddatetime.
5. Campaign deal amount goal
This goal tracks the total deal amount attributed to a campaign. The following properties are required:hs_goal_target_currency_code: the currency used for the target, such asUSD.hs_kpi_object_type_id: the object measured, such as0-20.hs_kpi_property_name: the property summed, such ashs_deal_amount.hs_kpi_metric_type: the aggregation method, such asSUM.hs_kpi_time_period_propertyandhs_kpi_time_period_property_type: the date property and property type that define the KPI timeframe, such ashs_deal_close_dateanddatetime.
6. Campaign cost per contact goal
This goal tracks the cost per contact reaching a specific lifecycle stage. Because a lower cost is better, seths_kpi_tracking_method to LOWER_IS_BETTER.
The following property is required:
hs_contact_lifecycle_stage: the lifecycle stage measured, such aslead.
7. Campaign number of contacts goal
This goal tracks the number of contacts reaching a specific lifecycle stage. The following properties are required:hs_assignee_type: the assignee type, such asusers.hs_contact_lifecycle_stage: the lifecycle stage measured, such aslead.