Preflight · Free

We scan your CRM for free and show you what it’s costing you.

Preflight reads the contacts, companies and deals in your Attio or HubSpot workspace. It checks them against 20 rules, scores seven dimensions of data quality, and prices the damage in rep hours and pipeline. It changes nothing. Your report within 2 business days of read-only access.

01

What it checks

02

How the score works

Seven dimensions, each scored 0–100:

  • Completeness: Are key fields filled in?
  • Accuracy: Do emails match their company? Any placeholders?
  • Freshness: Have records been touched recently?
  • Uniqueness: How many duplicates?
  • Consistency: Is one value spelled one way?
  • Validity: Are emails and domains well-formed?
  • Pipeline: How many open deals have a problem?

Completeness 16%, Accuracy 12%, Freshness 12%, Uniqueness 16%, Consistency 8%, Validity 16%, Pipeline 20%. 90 and above is an A, 75 a B, 60 a C. Anything lower is a D.

The six hygiene dimensions are 100 minus the share of checkable records that failed (Completeness is the average fill rate of the key fields). Pipeline is 100 minus the share of open deals with at least one pipeline finding: stuck, unowned or owned by someone who’s left, close date passed, no next step, no amount, or no contact. That’s why a workspace with clean records and a sick pipeline can’t score an A. The sample report below is exactly that case.

03

How the dollar figure works

Every number is an assumption printed in your report next to the math. Change an assumption and the figure changes with it.

What we priceHowAt our default assumptions
Rep time on duplicates4 minutes per duplicate record per month, capped at 2 hours per rep per month$52 per duplicate per year, up to the cap
Rep time on stuck deals6 minutes per deal per month$78 per deal per year
Rep time on unowned or dead-owned deals5 minutes per deal per month$65 per deal per year
Pipeline at risk, unowned or dead-owned deals15% of their open valueA snapshot, not a yearly cost
Pipeline at risk, stuck deals10% of their open valueA snapshot, not a yearly cost
Forecast exposure, close date passedTheir open valueShown on its own, never added to a total

Rep time is priced at $65 an hour, loaded. If your team’s number is different, tell us and we’ll re-run the math. Checks without a line in this table are counted and rated, but not priced. We’d rather show no number than an invented one.

04

Sample report

A full Preflight report for a fictional a 40-person series a b2b software company on HubSpot. This is the document you’d receive, minus the example record IDs.

Preflight report

Fictional company, illustrative data

Sample Co.

CRM
HubSpot, read-only scan
Scanned
2026-09-11
Records
4,800 contacts · 1,350 companies · 380 deals (126 open, 88 won, 166 lost)
Open pipeline
$1,560,000 across the 104 open deals that have an amount
Overall score
67/100 · band C
Rep time lost to the mess
$19,149a year
Open pipeline at risk
$142,100today. A snapshot, never added to the annual figure.
Fixed price to fix it
$2,500Overhaul. Founding price for the first 3 clients, then $3,500.

Pipeline scores 13 here: 110 of 126 open deals have at least one problem. Clean records can’t hide a sick pipeline.

Dimension scores

  • Completeness83
    Are key fields filled in?16% of score
  • Accuracy93
    Do emails match their company? Any placeholders?12% of score
  • Freshness39
    Have records been touched recently?12% of score
  • Uniqueness89
    How many duplicates?16% of score
  • Consistency69
    Is one value spelled one way?8% of score
  • Validity99
    Are emails and domains well-formed?16% of score
  • Pipeline13
    How many open deals have a problem?20% of score

Pipeline is 100 minus the share of open deals with at least one pipeline finding: 110 of 126 here.

Every finding, ordered by severity then dollar impact

#FindingCountAffectedSeverityDollar impactWhy it hurts
1Deals stuck in one stage for 45+ days5846% of open dealsCritical$4,524/yr rep time
$81,200 at risk10% of $812,000
Counted in the forecast. Going nowhere.
2Open deals owned by a deactivated user1915% of open dealsCritical$1,235/yr rep time
$35,700 at risk15% of $238,000
The owner field says someone is on it. Nobody is.
3Open deals with no owner1411% of open dealsCritical$910/yr rep time
$25,200 at risk15% of $168,000
Nobody follows up, and nobody is asked why.
4Stale open deals7156% of open dealsCriticalNot priced. Stuck deals carry the dollar line.No touch beyond the stage’s 14–30 day limit.
5Contacts untouched for more than 90 days2,97662% of contactsCriticalNot pricedOld titles and moved-on people still in your routing.
6Companies untouched for more than 90 days78358% of companiesCriticalNot pricedAccount data nobody has looked at this year.
7Open deals with a close date already passed4032% of open dealsHigh$406,000 forecast exposureForecast exposure. Shown on its own, never added to the totals.The forecast is built on dates that have already gone.
8Duplicate contacts55211.5% of contactsHigh$12,480/yr rep timeOne line for all 674 duplicate records, capped at 8 reps × 2 hours a month.Two reps, one buyer, split history.
9Duplicate companies1229.0% of companiesHighPriced in the duplicate line above.Pipeline-by-account is wrong.
10Open deals with no next step scheduled4032% of open dealsHighNot pricedWaiting on the buyer to remember you.
11Contacts with no company1,48831% of contactsHighNot pricedInvisible when a rep opens the account.
12Contacts missing a job title1,68035% of contactsHighNot pricedNo title means no persona targeting.
13Stale contact imports90019% of contactsMediumNot pricedCreated 180+ days ago, no engagement signal since.
14Countries written more than one way1,5162 countriesMediumNot pricedA filter for one country returns part of the list.
15Companies missing a domain29722% of companiesMediumNot pricedNo domain means no enrichment match.
16Deals missing an amount6317% of all dealsMediumNot pricedWorth $0 in every pipeline report.
17Open deals with no amount2217% of open dealsMediumNot priced. The at-risk lines count these 22 deals as $0.The at-risk figures are understated by these deals.
18Contacts missing an email4329% of contactsLowNot pricedCan’t be sequenced, synced or matched.
19Email domain doesn’t match the linked company4028.4% of contactsLowNot pricedWrong account, or a personal address.
20Job titles spelled more than one way38841 titlesLowNot pricedReports split one group into three.
21Contacts with a bounced email1904.0% of contactsLowNot pricedStill in sequences and lists. Nothing lands.
22Contacts missing a name962.0% of contactsLowNot pricedUnmatchable by rule.
23Unused custom fields6437% of 173 custom fieldsLowNot pricedReps scroll past clutter to find the fields that matter.
24Malformed email addresses611.4% of contacts with an emailLowNot pricedCan’t be synced, sequenced or matched.
25Placeholder values in names or titles4031 contacts · 9 companiesLowNot pricedCounted as “filled”. Shows up in lists.
26Deals missing an owner318.2% of all dealsLowNot priced. Open ones are priced as unowned deals above.Closed deals with no owner skew win-rate by rep.
27Malformed company domains181.7% of companies with a domainLowNot pricedBreaks enrichment and company matching.
28Open deals with no contact or company attached107.9% of open dealsLowNot pricedNobody to follow up with, or no account history.
29Contacts with a non-standard lifecycle stage00% of contactsLowNot pricedNothing found here. Reported so you know it was checked.

Rep time

$4,524 + $1,235 + $910 + $12,480 = $19,149/yr

Pipeline at risk

$81,200 + $35,700 + $25,200 = $142,100

Forecast exposure

$406,000, shown on its own

Deal findings overlap. One deal can be stuck and have no next step. The counts aren’t additive. Each dollar line is computed on its own.

The assumptions behind the figures

  • Rep time is priced at $65/hr, loaded.
  • Per month: 4 minutes per duplicate record (capped at 8 reps × 120 minutes per rep per month), 6 per stuck deal, 5 per unowned or dead-owned deal.
  • Pipeline at risk is 15% of unowned deals’ open value and 10% of stuck deals’ open value.
  • Both pipeline figures are snapshots, not yearly.

Notes printed on HubSpot reports

  • Deal last-activity uses HubSpot’s last-modified date. HubSpot has no single last-activity field on deals.
  • Stage age uses HubSpot’s per-stage entry date. Where that’s missing, it falls back to last-modified.

The quote

Overhaul: $2,500 fixed. Founding price for the first 3 clients, then $3,500. Fixes everything above against a signed checklist: duplicates under 2%, every open deal owned, contacts linked to companies, values normalized, fields backfilled, stage rules in place.

One simple migration: one source (a CSV export or one CRM), up to 10,000 records, into Attio or HubSpot, standard fields mapped and reconciled row for row. 50% when you sign, 50% when the checklist passes. Guarantee: Every item on the checklist we agree at kickoff passes within 7 business days of access, or the second half is on us.

The Attio equivalent

On Attio, the same checks run and the report has the same shape, with these differences:

  • Unowned deals are rarer. Attio requires an owner on deals.
  • Duplicate contacts are mostly same-name-same-company matches. Attio makes email addresses unique.
  • No lifecycle section, and no bounce data.
  • The close-date check runs only if the workspace has a close-date field. Otherwise the report says there isn’t one.
  • The next-step check reads tasks linked to the deal.
  • The deactivated-owner check reads workspace member status.

Fictional company, illustrative data. Every figure above comes from the scanner’s rules and printed assumptions.

05

What we need from you

  1. Which CRM: Attio or HubSpot.
  2. A read-only token, created by an admin in about five minutes.
    • Attio: Workspace settings → Developers → New access token, named “Updraft GTM — Preflight”. Scopes: record:read, record_permission:read, object_configuration:read, list_entry:read, task:read, user_management:read.
    • HubSpot: Settings → Integrations → Private Apps → Create a private app, named “Updraft GTM — Preflight”. Scopes: crm.objects.contacts.read, crm.objects.companies.read, crm.objects.deals.read, crm.objects.owners.read, crm.schemas.contacts.read, crm.schemas.companies.read, crm.schemas.deals.read.
  3. Send it safely: a one-time secret link from your password manager, or paste it live on a screen-share. Never in Slack or email.
  4. Tell us what “open” means if your stage names don’t make it obvious (for example, a “Churned” stage).
  5. One shared Google Drive folder, restricted to our account. That’s where the report lands.
06

What happens after

  • You get the report and a fixed quote in the shared folder within 2 business days: scores for all seven dimensions, every finding with a count, a severity and up to five example record IDs so you can check our work, and the dollar figure with its assumptions.
  • You delete the token. One click: Attio → Workspace settings → Developers → Delete; HubSpot → Private Apps → Actions → Delete. Scan data is deleted within 30 days unless you hire us.
  • If you want it fixed, we book a 30-minute kickoff and the Overhaul starts from the report.
07

What Preflight doesn’t do

  • It doesn’t write, edit, merge or delete anything.
  • It doesn’t fix anything. That’s the Overhaul.
  • It doesn’t make judgement calls. “Is this really a duplicate?” is reported by rule, with examples, for you to check.
  • It doesn’t read custom objects, emails, call recordings or notes.
  • It doesn’t scan Zapier or Make.

Limits we tell you up front.

  • Record cap. Up to 20,000 records per object. If you have more, the report says it’s a sample.
  • HubSpot activity proxies. HubSpot has no single “last activity” field on deals, so Preflight uses the deal’s last-modified date, and says so in the report. Stage age uses the stage-entry date HubSpot records for each stage.
  • Rule-based matching. Duplicates are matched on exact email, or exact name at the same company. Near-misses like “Jon” and “Jonathan” aren’t caught. We’d rather under-count than guess.

Run a free Preflight.

Read-only, no commitment. Your report within 2 business days of read-only access.