Pipelines and process
5 findings · ~10h if fixed separately
This wholly synthetic HubSpot fixture found deterministic data-model, access, pipeline, automation, forms, marketing and CMS issues across the eight feature areas. The published overall result is grade C (77/100). The report contains no real customer records, traffic, backlink, revenue or conversion claims.
Start here
Enable SSL on every connected domain.
Run a stuck-deal clean-up.
Review whether each Super Admin still needs full portal control.
The overall 77/100 (grade C) is the weighted mean of the 8 assessed areas. How the overall figure is worked out
| Area | Score | Maturity | Status | Findings |
|---|---|---|---|---|
| Data model and data quality | B 81/100 | Level 3, Established | Assessed | 7 |
| Users, permissions and security | C 66/100 | Level 2, Developing | Assessed | 2 |
| Pipelines and process | C 72/100 | Level 2, Developing | Assessed | 5 |
| Automation | B 89/100 | Level 3, Established | Assessed | 1 |
| Forms and segmentation | A 93/100 | Level 3, Established | Assessed | 1 |
| Marketing assets | C 69/100 | Level 2, Developing | Assessed | 1 |
| Service | A 100/100 | Level 4, Advanced | Assessed | 0 |
| CMS and website | E 40/100 | Level 1, Foundational | Assessed | 1 |
22% of the overall figure · Level 3, Established
Maturity: Level 3, Established. Set by: Area score of at least 75 (observed 81). No failed high-importance check (observed 0).
To reach Advanced: Area score of at least 90 (observed 81).
No known reference was found, but these could still use the items and were not assessed: List definitions (not collected); Reports and dashboards (not collected); Installed apps (not collected); Webhook subscriptions (not collected); Private apps (not collected); Sequences, templates and snippets (not collected); Pipeline stage required properties (not exposed by the HubSpot API).
16% of the overall figure · Level 2, Developing
Maturity: Level 2, Developing. Set by: Area score of at least 50 (observed 66).
To reach Established: Area score of at least 75 (observed 66).
16% of the overall figure · Level 2, Developing
Maturity: Level 2, Developing. Set by: Area score of at least 50 (observed 72).
To reach Established: Area score of at least 75 (observed 72).
No known reference was found, but these could still use the items and were not assessed: List definitions (not collected); Reports and dashboards (not collected); Installed apps (not collected); Webhook subscriptions (not collected); Private apps (not collected).
14% of the overall figure · Level 3, Established
Maturity: Level 3, Established. Set by: Area score of at least 75 (observed 89). No failed high-importance check (observed 0).
To reach Advanced: Area score of at least 90 (observed 89). Usage evidence was not assessed, so Advanced cannot be confirmed.
10% of the overall figure · Level 3, Established
Maturity: Level 3, Established. Set by: Area score of at least 75 (observed 93). No failed high-importance check (observed 0).
To reach Advanced: Usage evidence was not assessed, so Advanced cannot be confirmed.
10% of the overall figure · Level 2, Developing
Maturity: Level 2, Developing. Set by: Area score of at least 50 (observed 69).
To reach Established: Area score of at least 75 (observed 69).
6% of the overall figure · Level 4, Advanced
Maturity: Level 4, Advanced. Set by: Area score of at least 90 (observed 100). Every high-importance check passes (observed 0 not passing). No failed medium-importance check (observed 0). Usage evidence was assessed.
No findings in this area.
6% of the overall figure · Level 1, Foundational
Maturity: Level 1, Foundational. Set by: The area was assessed.
To reach Developing: Area score of at least 50 (observed 40).
High-leverage changes you can start without a project plan. Effort figures are indicative.
Also in: Pipelines and process (5 findings)
Also in: Data model and data quality (7 findings)
Also in: Users, permissions and security (2 findings)
Prioritised by severity, impact, effort, confidence and simple dependency order. Owner suggestions are heuristic; adjust to your team. Effort figures are indicative.
Mostly IT/Security work
~7h indicative in this horizon
Mostly Sales Manager work
~7h indicative in this horizon
Mostly CRM Admin work
~12h indicative in this horizon
plus 7 further items, prioritised in the findings table
STANDARD
Reported tier: STANDARD. Licence fit could not be concluded because HubSpot did not report a recognised subscription tier. 2 relevant inventories were unavailable, so absence was not treated as non-use.
Add the tier you hold for each Hub and this report will show your licence at a glance. We only ever show what you confirm, never a guess.
These areas account for many of the high-impact findings.
5 findings · ~10h if fixed separately
2 findings · ~6h if fixed separately
7 findings · ~22h if fixed separately
Showing all findings across every owner. Pick a tab above to retell the same audit through one role's lens.
Search, filter, sort and expand findings. Results update without leaving this report.
18 findings shown after filtering and sorting.
Each category is scored out of 100 and contributes to the overall grade by its weight. The rationale explains what moved each score.
| Category | Grade | Score | Weight | Confidence | Why |
|---|---|---|---|---|---|
| Data model and data quality | B | 81 | 22% | High | Maturity: Established. 4 of 8 scored checks passed, 4 partial. associations.batch.deals.line_items was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. associations.batch.deals.quotes was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. associations.batch.deals.invoices was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. |
| Users, permissions and security | C | 66 | 16% | High | Maturity: Developing. 3 of 5 scored checks passed, 2 partial. security.loginActivity was not available for the portal's product access; this was recorded as a coverage limitation, not a deterministic result. security.securityActivity was not available for the portal's product access; this was recorded as a coverage limitation, not a deterministic result. |
| Pipelines and process | C | 72 | 16% | High | Maturity: Developing. 7 of 11 scored checks passed, 1 partial, 3 failed. crm.sample.leads was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.searchCount.leads was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.unowned.leads was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.goal_targets was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.products was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.line_items was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.quotes was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.orders was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.invoices was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.commercepayments was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. crm.sample.subscriptions was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. |
| Automation | B | 89 | 14% | High | Maturity: Established. 4 of 5 scored checks passed, 1 failed. |
| Forms and segmentation | A | 93 | 10% | High | Maturity: Established. 2 of 3 scored checks passed, 1 partial. |
| Marketing assets | C | 69 | 10% | High | Maturity: Developing. 1 of 2 scored checks passed, 1 partial. behaviour.eventTypes was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. marketing.events was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.sources.30d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.sources.previous30d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.sources.90d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.sources.previous90d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.sources.365d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.pages.90d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. analytics.forms.90d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. |
| Service | A | 100 | 6% | High | Maturity: Advanced. 1 of 1 scored check passed. crm.sample.feedback_submissions was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. conversations.threads.90d was not assessable because its optional audit grant was not approved; this was recorded as a coverage limitation, not a deterministic result. |
| CMS and website | E | 40 | 6% | High | Maturity: Foundational. 2 of 3 scored checks passed, 1 failed. |
Categories down, severities across. Cell intensity scales with finding count.
| Critical | High | Medium | Low | Info | Total | |
|---|---|---|---|---|---|---|
| Data model and data quality | 0 | 0 | 0 | 5 | 2 | 7 |
| Users, permissions and security | 0 | 0 | 1 | 1 | 0 | 2 |
| Pipelines and process | 0 | 0 | 2 | 2 | 1 | 5 |
| Automation | 0 | 0 | 1 | 0 | 0 | 1 |
| Forms and segmentation | 0 | 0 | 0 | 1 | 0 | 1 |
| Marketing assets | 0 | 0 | 0 | 1 | 0 | 1 |
| Service | 0 | 0 | 0 | 0 | 0 | 0 |
| CMS and website | 0 | 1 | 0 | 0 | 0 | 1 |
Higher is better. The shaded shape is this portal; the dashed line is the portfolio median for similarly-tiered HubSpot portals SpotCheck has audited.
Strongest category: Service at 100/100. Lowest category: CMS and website at 40/100. A reliable compatible benchmark is not available for this chart.
| Category | This portal |
|---|---|
| Data model and data quality | 81/100 |
| Users, permissions and security | 66/100 |
| Pipelines and process | 72/100 |
| Automation | 89/100 |
| Forms and segmentation | 93/100 |
| Marketing assets | 69/100 |
| Service | 100/100 |
| CMS and website | 40/100 |
Benchmark values appear only for compatible cohorts with enough retained audits to be reliable.
Each dot is a finding. Top-left means quick wins and top-right means strategic projects. Use the chart or the finding controls below to jump to a finding.
11 plotted findings look like quick wins. Highest plotted impact: Domains without SSL enabled, 9/10 impact and about 1 hours. 2 findings lacked impact or effort estimates and are listed in the findings table instead.
| Finding | Severity | Impact | Effort | Owner |
|---|---|---|---|---|
| Contacts records have missing companies associations | low | 7/10 | 6 hours | RevOps |
| Contacts lack a primary company association in the sample | low | 7/10 | 4 hours | CRM Admin |
| Stale records on core objects | low | 8/10 | 6 hours | RevOps |
| Records without an owner | low | 8/10 | 4 hours | RevOps |
| Unused custom properties | low | 4/10 | 1 hours | CRM Admin |
| Referenced custom properties with little or no data | info | 2/10 | 1 hours | CRM Admin |
| High super admin count | medium | 7/10 | 5 hours | IT/Security |
| Many users have no primary team | low | 4/10 | 1 hours | CRM Admin |
| Long pipeline stage set | low | 4/10 | 3 hours | RevOps |
| Invalid or ambiguous pipeline stage order | medium | 5/10 | 1 hours | RevOps |
| Open deals stuck for over 180 days | medium | 8/10 | 4 hours | Sales Manager |
| Pipeline stages unused in the deal sample | low | 4/10 | 2 hours | RevOps |
| Active but stale workflows | medium | 6/10 | 3 hours | RevOps |
| Many marketing forms have no fields | low | 6/10 | 1 hours | Marketing Ops |
| Campaign configuration ownership is incomplete | low | 6/10 | 1 hours | Marketing Ops |
| Domains without SSL enabled | high | 9/10 | 1 hours | Web/CMS |
2 findings have no effort/impact estimate and are not plotted here. See the findings table for the full list.
Each area is scored from its checks: every scored check has an importance of 1 to 3, and the area score is the importance-weighted share of checks passed, out of 100. The overall figure is the weighted mean of the assessed area scores. An area that is not in use is left out and the other weights are rescaled. If any area in use could not be assessed, no overall figure is published.
The area weights are SpotDev's judgement of how much each area matters to a well-run HubSpot portal. They have not yet been calibrated against audits completed by hand, so treat the overall figure as a guide and the area scores and findings as the detail.
| Area | Weight | In this report |
|---|---|---|
| Data model and data quality | 22% | Assessed |
| Users, permissions and security | 16% | Assessed |
| Pipelines and process | 16% | Assessed |
| Automation | 14% | Assessed |
| Forms and segmentation | 10% | Assessed |
| Marketing assets | 10% | Assessed |
| Service | 6% | Assessed |
| CMS and website | 6% | Assessed |
| Level | What it needs |
|---|---|
| 0, Not in use | There is positive evidence the portal does not use the area. It is left out of the overall figure. |
| 1, Foundational | The area was assessed. |
| 2, Developing | Area score of at least 50. |
| 3, Established | Area score of at least 75 and no failed high-importance check. |
| 4, Advanced | Area score of at least 90, every high-importance check passes, no failed medium-importance check, and usage evidence was assessed. |
Wholly synthetic golden fixture. Wholly synthetic fixture. No customer or anonymised production data is used.
Each deterministic rule records its outcome and the evidence it used. Checks that could not run are omitted here rather than shown as errors; they never count as a pass and never lower the score. The coverage summary above accounts for those gaps.
spotcheck-methodology-v2deterministic-rule-registry-v2hubspot-scorer-v10-feature-areashubspot-score-evidence-v1deterministic-evidence-ledger-v2d535258234a435b2870f20e3ac79f63c11b6ad014ed78a8e554ce10f8b6f4231Measure the share of active users with Super Admin access. Two Super Admins are always tolerated so a small team can keep a backup administrator.
hubspot.check.users.super-admin-share.v1Measure the share of active users without a primary team.
hubspot.check.security.primary-team-coverage.v1Count custom roles beside the portal user inventory.
hubspot.check.governance.custom-roles.v1Count teams beside the portal user inventory.
hubspot.check.governance.teams-configured.v1Compare hashed archived-owner references with the owners of the bounded CRM record samples.
hubspot.check.users.archived-owner-records.v1Record privacy-safe account and audit-context evidence separately from scored configuration findings.
hubspot.check.governance.account-evidence.v1Read the portal-wide custom-property usage percentage from the limits inventory.
hubspot.check.crm-model.custom-property-limit-pressure.v1Average, across sampled association directions with at least 30 source records, the share of source records with no target association.
hubspot.check.associations.relationship-completeness.v2Measure sampled contacts with no primary company association, separately from any-company evidence.
hubspot.check.associations.primary-company-coverage.v2Measure, for each core object with more than 100 records, the share of records not modified for three years, and score the worst object. Every object's figure is listed.
hubspot.check.data-quality.stale-share.v2Measure, for each core object with more than 200 records, the share of records not modified in the previous twelve months, and score the worst object. An object whose newest sample contradicts the count is excluded as a coverage limitation.
hubspot.check.data-quality.recent-activity-share.v2Measure, for contacts, companies and deals with records, the share of records with no owner, and score the worst object. Ticket ownership is assessed in the Service area.
hubspot.check.data-quality.owner-coverage.v2Join custom property groups to the property definitions of the same object and count groups that hold no property.
hubspot.check.data-model.empty-property-groups.v1Count, with CRM Search HAS_PROPERTY queries, how many records hold a value for each custom property on the core objects and on custom objects whose schema was collected, then join the result to the dependency graph. A property is unused when no record holds a value, or fewer than 0.5% of records and fewer than 5 do, and no known reference exists. Properties that were not measured (query caps, missing scope or provider limits) are excluded, never counted as zero.
hubspot.check.data-model.unused-custom-properties.v1List measured custom properties that meet the unused fill threshold but have a known reference from a detailed workflow, form or pipeline stage.
hubspot.check.data-model.referenced-low-fill-properties.v1Record aggregate sensitive and highly-sensitive property-definition counts without retaining property values or names.
hubspot.check.crm-model.sensitive-property-review.v1Record aggregate property-validation coverage without inferring the business requirement for a property.
hubspot.check.crm-model.validation-coverage-review.v1Compare configured association-label schema evidence with bounded association usage evidence.
hubspot.check.associations.label-adoption.v1Count deal and ticket pipeline definitions per object and name the pipelines.
hubspot.check.pipelines.inventory-size.v2Measure the share of deal and ticket pipelines with more than 15 stages (SpotDev guidance, not a HubSpot limit).
hubspot.check.pipelines.stage-count.v2Measure the share of deal pipelines whose closed stages do not use probability 1 for won and 0 for lost.
hubspot.check.pipelines.terminal-probability.v2Measure the share of deal pipelines where a later open stage has a lower probability than an earlier one.
hubspot.check.pipelines.probability-monotonicity.v2Measure the share of pipelines with two or more active stages sharing a label.
hubspot.check.pipelines.duplicate-stage-label.v2Measure the share of pipelines with an active stage whose label is empty.
hubspot.check.pipelines.empty-stage-label.v2Measure the share of pipelines with missing or duplicated display order among active stages.
hubspot.check.pipelines.invalid-stage-order.v2Measure the share of pipelines that retain three or more archived stages.
hubspot.check.pipelines.archived-stage-clutter.v2Measure open deals unchanged for more than 180 days in the bounded deal sample at the immutable audit timestamp.
hubspot.check.pipelines.stuck-deal-sample.v2Join the bounded deal sample to pipeline stages and measure the share of sampled pipelines where a quarter or more of active stages hold no sampled deal.
hubspot.check.pipelines.empty-stage-sample.v2Measure the share of deal pipelines with no deal in either the newest or the oldest bounded deal sample, and classify each for clean-up.
hubspot.check.pipelines.empty-pipelines.v1Emit a non-scored manual verification card because the public pipeline read contract does not expose conditional required-stage properties.
hubspot.check.pipelines.required-stage-enforcement.v1Calculate 30, 90 and 365 day deal cohorts and direct open-stale counts.
hubspot.check.sales-performance.cohort-health.v1Inspect the bounded deal sample for amount completeness and mixed-currency risk.
hubspot.check.sales-performance.currency-basis.v1Count enabled workflows in the bounded workflow inventory and name them.
hubspot.check.automation.enabled-workflow-count.v3Measure the share of enabled workflows whose last edit is more than twelve months before the audit timestamp. This is not execution-history evidence.
hubspot.check.automation.stale-enabled-workflows.v3Measure the share of detailed enabled workflows whose enrolment criteria look broadly inclusive.
hubspot.check.automation.broad-enrollment.v2Measure the share of detailed enabled workflows with a branch or action edge that does not resolve to a known next action.
hubspot.check.automation.dead-end-branch.v2Measure the share of detailed enabled workflows that write a non-lifecycle property another detailed workflow also writes.
hubspot.check.automation.overlapping-property-writes.v2Measure the share of detailed enabled workflows that write a lifecycle or stage property another detailed workflow also writes.
hubspot.check.automation.lifecycle-regression-risk.v2Classify unsupported or custom action types as manual verification rather than failures.
hubspot.check.automation.unsupported-action.v1List detailed workflows with custom-coded actions, with the runtime, the number of secrets referenced by name and the external hosts called. The code body is never read.
hubspot.check.automation.custom-code-review.v1Measure the share of forms with no configured fields.
hubspot.check.forms.field-hygiene.v2Compare each contact and company form field with the property definitions of its object, and measure the share of forms with a field that maps to no known property.
hubspot.check.forms.property-mapping.v1Count active communication subscription definitions.
hubspot.check.forms.subscription-types.v1Record validated marketing form capability coverage without inferring campaign performance.
hubspot.check.marketing.forms-coverage.v1Measure the share of campaigns with no owner. Attribution counters remain non-scored associative evidence.
hubspot.check.marketing.campaign-ownership.v2Measure the share of marketing emails left in the draft state.
hubspot.check.marketing.email-drafts.v1Compare the complete ticket count with the complete unowned-ticket count.
hubspot.check.service.ticket-ownership.v1Measure bounded conversation-thread metadata and ticket backlog evidence without message bodies.
hubspot.check.service.performance.v1Measure the share of connected domains whose configuration reports HTTPS disabled.
hubspot.check.cms.transport-security.v2Measure the share of sampled site pages without a meta description.
hubspot.check.cms.site-page-metadata.v2Measure the share of sampled landing pages in the draft state.
hubspot.check.cms.landing-page-draft-share.v2Separate published, draft, scheduled and archived content, aggregate CMS change history by pseudonymous actor and analyse redirect chains and loops.
hubspot.check.cms.governance-redirects.v1These records identify the bounded source used by each completed check. They contain labels and non-identifying page roles, not raw customer payloads. Sources that could not be collected are omitted.
An honest read on how complete this run was. Only categories with applicable, validated evidence are assessed. An optional capability without a confirmed grant is excluded, not treated as a pass or a customer defect. Independent checks inside a category still score when their own evidence is valid.
13 requested audit grants were not approved, so some checks could not run. Reconnect the portal and approve these grants to widen coverage:
These are observed, non-scored review facts. Security events are not proof of compromise, and a missing property validation is not a defect until its business requirement is known.
0 sampled records are assigned to 0 archived owners. This is a bounded sample, not a portal-wide count.
Validation rules, sensitivity classifications and unique-value settings are separate facts. Uniqueness does not prove access control, encryption or protection.
These are observed, non-scored facts. Attribution is associative, behavioural evidence is aggregate only, and inactive commerce or CMS features are treated as not applicable.
SpotDev built SpotCheck. If you would like help with anything in this report, you can book a call or send the team a message. This is optional and does not change your report.