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.
| Category | Owner role | SLA |
|---|---|---|
| Duplicate contacts | RevOps lead | 7 days from detection |
| Duplicate companies | RevOps lead | 7 days |
| Format issues on email/phone | Marketing ops | 14 days |
| Unused properties | Object owner | 30-day review cycle |
| Stale workflows | Workflow author | 30 days |
| Empty required fields on deals | Sales ops | 3 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:
- Top 5 high-exposure duplicates from the prioritized report. Resolve in the meeting.
- Any DQCC category over SLA. Owner explains why. Recommit or escalate.
- New property requests in the last 7 days. Approve or reject with a written reason.
- 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.