Skip to Content
IntegrationsHubSpotCustom properties

HubSpot Integration — Custom Properties

FlowState provisions 10 custom deal properties in a dedicated HubSpot property group called flowstate_apn. Provisioning is not automatic — it runs the first time you click Provision properties on the HubSpot integration page (or call the provision_hubspot_properties MCP tool), not at OAuth-connect time. The provisioner is idempotent — running it multiple times never overwrites existing values.

Every FlowState-provisioned property has a display name (label) that begins with APN so it is unmistakable in the HubSpot deal view, filters, and reports. The provisioner updates the label on every run, so re-provisioning corrects any property whose label predates this convention.

All 10 properties are visible on the deal record in HubSpot. Your team can reference them in deal views, filters, and reports without needing to open FlowState.

Nine properties this doc used to list are gone. apn_partner_need, apn_use_case, apn_delivery_model, apn_sales_activity, apn_state_region, apn_client_industry, apn_client_country, apn_currency and apn_submission_type are no longer HubSpot deal properties: they moved to the FlowState card’s “AWS deal fields” form, backed by FlowState’s own store rather than a HubSpot property. See “Where the nine removed fields live now” below. apn_postal_code and apn_mrr are the two exceptions that stayed provisioned — see that section for why.

The AWS account manager, sales rep, partner sales manager, and AWS’s own next step are not among these 10 either — FlowState no longer writes them to a HubSpot property. Sync errors are likewise no longer mirrored to a property — read them from the FlowState card (syncError) instead of the deal’s apn_sync_last_error field, which has been retired. The HubSpot card reads the same AWS data live instead, so a rep sees current information without a stale mirror sitting on the deal record.

Property group

Group name (internal)Display nameDescription
flowstate_apnFlowState APNProperties written and read by FlowState for AWS Partner Network opportunity synchronisation.

Property reference

Property nameHubSpot typeDescriptionAPN fieldOwnership
apn_sync_with_aws_enabledBooleanGate flag. Set to true to enable APN sync for this deal. Set to false to pause sync without losing the APN opportunity link.— (not synced to APN)HubSpot owns
apn_opportunity_idSingle-line textThe opportunity ID assigned by AWS Partner Central after the first successful submission. Write-once — never overwritten by FlowState once set.Opportunity.IdAWS owns (mirror)
apn_sync_statusDropdown (enum)Current sync state of this deal. Values: pending, submitted, in_review, approved, action_required, disqualified, conflict, error, pending_invitation (unaccepted AWS co-sell invitation), invitation_rejected.— (FlowState status)FlowState writes
apn_review_statusDropdown (enum)Mirrors LifeCycle.ReviewStatus from AWS. Values reflect AWS Partner Central review states.LifeCycle.ReviewStatusAWS owns (mirror)
apn_lifecycle_stageDropdown (enum)Mirrors LifeCycle.Stage from AWS. Reflects the opportunity’s current stage as recorded by AWS.LifeCycle.StageBoth can update (conflict-detected)
apn_business_problemMulti-line textDescription of the business problem this opportunity addresses.Project.CustomerBusinessProblemHubSpot owns
apn_closed_lost_reasonDropdown (enum)Why the opportunity was lost. One of the 19 reasons AWS defines; sent only when the stage is Closed Lost, and defaults to Other when empty.LifeCycle.ClosedLostReasonHubSpot owns
apn_postal_codeSingle-line textPostal code for the end client’s primary address.Customer.Account.Address.PostalCodeBoth can update (conflict-detected)
apn_aws_account_idSingle-line textThe AWS account ID of the end client. Required for APN opportunity submission.Customer.Account.AwsAccountIdHubSpot owns
apn_mrrNumberExpected monthly recurring revenue from the end client. Kept in sync from AWS’s side too (a re-forecast during co-sell review) — see APN → Field mapping for the three-way merge. Never confuse this with the native amount property, which AWS never writes.ExpectedCustomerSpend.Amount (Monthly)Both can update (conflict-detected)

The AWS account manager, sales rep, partner sales manager, and AWS’s own next step are read live on the HubSpot card instead of being provisioned as properties — see the note above. The last sync error is likewise read live on the card (syncError) rather than mirrored to a property.

Every property marked AWS owns (mirror) or FlowState writes is provisioned read-only: its value is set by the sync and cannot be edited by hand in HubSpot, so a manual change can never be silently overwritten by the next mirror.

Where the nine removed fields live now

apn_partner_need, apn_delivery_model, apn_sales_activity, apn_use_case, apn_state_region, apn_client_industry, apn_client_country, apn_currency and apn_submission_type are rep-authored on the FlowState card’s “AWS deal fields” form instead of a HubSpot dropdown or checkbox. FlowState describes the field list and every option itself, so a change on AWS’s side (a new enum value, a new field) takes effect the next time the card loads — no property to re-provision, no app version to ship.

The values live in FlowState’s own store, not a HubSpot property, so they are not visible in HubSpot’s own deal view, filters, or reports. Open the FlowState card on the deal to see or edit them. apn_client_country is shown read-only on the card, taken from the deal’s associated HubSpot company — there is nothing to set for it. apn_client_industry is filled in automatically wherever possible: from the deal’s own value, then the associated company’s industry, then an AI guess from the deal’s context — each of the first two only counts when it’s already one of AWS’s recognized industries, since HubSpot’s and AWS’s industry lists don’t match one-for-one. The card shows the industry picker only when none of that produces a value; a value the rep picks themselves is always used and shown after that.

Why these nine and not apn_postal_code or apn_mrr, which are also rep-authored: both stayed provisioned because AWS revises them directly (a re-forecast spend, an address correction) and FlowState mirrors that revision straight into the HubSpot property — see the “Both can update” rows above and APN → Field mapping. None of the nine removed fields has that live AWS-side mirror, so nothing needs them to remain a visible, filterable HubSpot property.

Standard HubSpot properties also used

The following standard HubSpot deal properties are read by FlowState to populate APN fields. FlowState does not write to these properties.

HubSpot propertyAPN field
dealnameProject.Title
closedateLifeCycle.TargetCloseDate
dealstageLifeCycle.Stage (mapped via stage configuration)
Associated contacts (first name, last name, job title)Customer.Contacts[]

Field ownership

HubSpot owns means the field flows from HubSpot to APN only. FlowState reads the HubSpot value and writes it to APN. If AWS returns a different value for this field in an inbound event, the HubSpot value takes precedence.

AWS owns (mirror) means the field flows from APN to HubSpot only. FlowState reads the AWS value and writes it to HubSpot. FlowState never sends a value for these fields in outbound payloads.

Both can update (conflict-detected) means both HubSpot and AWS can legitimately change the field. When both sides have been updated since the last sync, FlowState sets apn_sync_status = conflict and surfaces the conflict for manual resolution. See APN → Conflicts & resolution.

Native amount is never written by AWS. apn_mrr is FlowState’s own mirror of AWS’s expected-spend figure — it is what may sync in both directions. Your deal’s native amount field is your own CRM value and is never touched by an inbound APN event, under any circumstances.

Removing the properties

These properties are created in your HubSpot portal and persist after disconnecting FlowState. If you permanently remove the FlowState integration and want to clean up the properties, you can delete the flowstate_apn property group from HubSpot: Settings → Properties → Filter by group → flowstate_apn → Delete group. Deleting the group removes all 10 properties and their values from all deal records. This action cannot be undone.

FlowState’s own Deprovision button (Settings → Integrations → HubSpot → Deprovision) does the same thing without leaving HubSpot: it calls the deprovision_hubspot_properties action, which deletes each of the 10 properties one by one and reports which ones succeeded or failed.

Clicking Provision properties never deletes anything. It only ever creates the 10 current properties (on first run) or refreshes them — labels, options, descriptions — on every later run. No code path reachable from that button, or from the provision_hubspot_properties action, removes a property or touches a value.

That was not always true, and if your portal was already re-provisioned, you need to know what happened. An earlier version of this same button also deleted the nine removed properties listed above as an automatic, unannounced side effect of every re-provisioning run. Deleting a HubSpot property destroys its value on every deal record in the portal, irreversibly — there is no undo, in HubSpot or in FlowState. If your portal was re-provisioned while that version was live, the nine properties (and the values they held) are already gone.

Recovery from that is partial and depends on the deal:

  • For a deal that had already been submitted to AWS Partner Central at the time of deletion, most of the nine values can potentially be recovered from AWS’s own copy of the opportunity. One of the nine, apn_submission_type, has no representation anywhere in AWS’s API and cannot be recovered under any circumstances, for any deal.
  • For a deal that was never submitted to AWS, none of the nine can be recovered. The value existed only in the now-deleted HubSpot property, with no copy anywhere else.

If you believe your portal was affected, contact FlowState support rather than re-running anything yourself — recovering what is recoverable is a manual, human-run process on our side, not a button in the product.

Deleting the nine retired properties is now a separate, deliberate action, invoked only by FlowState’s own operations tooling — never automatically, and never as a side effect of the “Provision properties” button.