[object Object]

The Data Quality Command Center is the most useful tool HubSpot has shipped in three years and the most ignored. Every portal we audit has it. None of them act on it. Issues pile up, the “issues” tab counter creeps to four digits, and someone eventually says “we should clean that up sometime.” Then never.

The tool is fine. The rollout is what is broken. Here is one that lasts.

Why DQCC alone does not move metrics

DQCC surfaces duplicates, formatting issues, property usage gaps, and unused workflows. It does not:

  • Assign ownership
  • Prioritize by revenue impact
  • Block bad data at the source
  • Tell the executive who broke the SLA

A dashboard nobody owns is a graveyard. Ownership is the rollout work.

The ownership matrix

Every category in DQCC needs a name next to it. Not a team. A person.

CategoryOwner roleSLA
Duplicate contactsRevOps lead7 days from detection
Duplicate companiesRevOps lead7 days
Format issues on email/phoneMarketing ops14 days
Unused propertiesObject owner30-day review cycle
Stale workflowsWorkflow author30 days
Empty required fields on dealsSales ops3 days

Empty required fields on closed-won deals is the one that matters most. Every closed-won with a blank source field is unattributed revenue. That number gets quoted upward.

Triage by revenue impact, not alphabet

DQCC sorts by count. That is the wrong sort. Sort your remediation by revenue impact.

A duplicate contact on a sub-$1k deal is a paperwork problem. A duplicate contact on a $200k deal in active negotiation is a deal blocker. Same dashboard row, different urgency.

Build a custom report that joins DQCC issue lists against deal amount.

async function prioritizeDuplicates() {
  const dupes = await fetch(
    "https://api.hubapi.com/crm/v3/objects/contacts/search",
    {
      method: "POST",
      headers: { Authorization: `Bearer ${TOKEN}` },
      body: JSON.stringify({
        filterGroups: [
          {
            filters: [
              {
                propertyName: "hs_duplicate_status",
                operator: "EQ",
                value: "POTENTIAL",
              },
            ],
          },
        ],
        properties: ["email", "associatedcompanyid"],
        limit: 100,
      }),
    },
  ).then((r) => r.json());

  const enriched = await Promise.all(
    dupes.results.map(async (c) => {
      const deals = await getOpenDealsForContact(c.id);
      const exposure = deals.reduce(
        (sum, d) => sum + Number(d.properties.amount || 0),
        0,
      );
      return { ...c, openDealExposure: exposure };
    }),
  );

  return enriched.sort((a, b) => b.openDealExposure - a.openDealExposure);
}

Now your remediation queue is sorted by dollars. The top 20 rows get fixed today. The bottom 200 wait. That is fine.

Block at the source, do not just clean

A cleanup tool that does not reduce inflow is a treadmill. Pair every DQCC category with a source-side control.

  • Duplicates: tighten the dedupe match rules on form submissions, audit data sync mappings
  • Format issues: regex validation on form fields, property validation rules
  • Empty required fields: stage-gate workflows that block deal stage advance until required fields are populated
  • Stale workflows: a quarterly review meeting where the author must justify keeping the workflow on, default off

The stage gate is the single highest-leverage control. A deal cannot move to “Closed Won” if the source field is empty. Sales ops becomes data quality enforcement without trying.

The “no orphan property” rule

Custom properties accumulate. A property with zero values across all records is dead weight. A property used on under 1% of records is suspect. A property used on under 1% of records that was created in the last 12 months is somebody’s experiment that became somebody’s reality.

Run a quarterly property review against DQCC’s usage report.

  • 0% used: archive
  • under 1% used and over 6 months old: archive
  • under 5% used: tag the owner, ask “is this still needed”
  • over 5% but inconsistently used: it has a process problem, not a property problem

Archive is reversible in HubSpot. Delete is not. Default to archive.

The weekly DQCC ritual

A dashboard nobody opens does nothing. A 15-minute weekly meeting works.

Agenda:

  1. Top 5 high-exposure duplicates from the prioritized report. Resolve in the meeting.
  2. Any DQCC category over SLA. Owner explains why. Recommit or escalate.
  3. New property requests in the last 7 days. Approve or reject with a written reason.
  4. Workflow created without an owner field. Assign or pause.

Four items. Fifteen minutes. Run it on a calendar invite that does not die.

The trap of fixing without measuring

Pick three numbers and watch them monthly.

  • Closed-won deals with complete source attribution
  • Contacts with valid email format and a populated lifecycle stage
  • Active workflows with a named owner in a property

These three numbers are the leading indicators. Total DQCC issue count is a lagging indicator and a vanity metric. A score of 87 means nothing. A jump from 62% to 78% on attribution completeness moves the marketing budget conversation.

Related: data quality patterns for the foundational practice, and Operations Hub data sync deep for upstream feeds.

Bottom line

  • Ownership at the person level, not the team level, is the difference between dashboard and discipline.
  • Prioritize remediation by revenue exposure, not by issue count.
  • Pair every category with a source-side control or you are running a treadmill.
  • Run a 15-minute weekly ritual; the calendar invite is the program.
  • Three leading indicators beat one composite score for executive conversations.
[object Object]
Share