Basis sells practice by practice. Its GTM data should be modeled the same way.
A read of how Basis goes to market, six data problems that motion creates, and a working model that measures each one on a synthetic world shaped like Basis's GTM.
New-logo ARR when the CRM's Type field decides, against the same deals measured on resolved firms.
Summary
Same deals, two answers
Headline GTM metrics
Metric
CRM view
Declared
Gap
Synthetic world: 230 firms, 252 Salesforce accounts, 139 opportunities, 2,647 Outreach events, 104 Gong calls, 30 partner registrations, 160 waitlist forms. No real Basis data.
B-1
The business
$100MSeries B at $1.15B, led by Accel, Feb 2026
~30%of the top 25 accounting firms are customers
~20%of the top 150 firms use Basis day to day
28open GTM and customer-facing roles right now
Basis deploys agents that run long, end-to-end accounting work across CAS and advisory, tax, audit and corporate close, plus an offer for small firms, and it has just launched an end-to-end tax platform.
The buyer is rarely "the firm". Each practice has its own lead partner, workflow and budget. One firm is several buying groups, and growth is expansion from one practice to the next. A CRM built around accounts hides exactly that.
K-1-heavy returns went from 100+ prep hours to about 15–20.
Tax partner, Boulay (paraphrased from basis.ai)
Basis is credited for 50% year-over-year growth in the CAS practice.
CAS lead partner, Clark Nuber (paraphrased)
B-2
Four motions, running at once
M1
Enterprise direct
Top-25 and top-150 firms. Long cycles, pilots, security reviews.
Enterprise AE · Strategic Account Partner
M2
Mid-market outbound
New: moving from reactive demand fulfillment to a proactive outbound engine.
Sales Manager · BDR · GTM Engineer
M3
Channel partners
Advisory firms such as Sikich bring Basis into their client work. Partner credit is real money.
Channel Sales Leader · Partner Manager
M4
Inbound waitlist
The site form asks firm size, use case, ERP and a self-reported "how did you hear about us".
Demand Gen · Growth · Field Marketing
Add Salesforce, Outreach, Gong, Clay, a partner portal and agents that now read and write the same records, and every tool thinks it is the source of truth. That is the job in the GTM Data and Systems Lead posting: define the model, make metrics consistent, keep syncs honest, give agents context they can trust.
A-1 to A-6
Six problems, measured
✓ agreed to source⊗ exception notedbars are drawn to scale within each finding
A-1 ⊗New vs expansion
The Type field turns expansions into new logos
Expansions land on duplicate accounts or get typed as new business. Fixing the field alone still leaves +30%. Only resolving the firm first gets it right, and the same fix moves customers from 24 to 20 and customers live in two or more practices from 6 to 9.
CRM Type field$4.42M
History per SF account$4.00M
History per resolved firm$3.06M
A-2 ⊗Identity
"Who is the customer" has no automatic answer
Domain matching catches 15 of 22 duplicate accounts with no false merges. Name matching catches all 22 but merges 3 different companies that share a name. The design that works is tiered: auto-merge on domain, send the 10 name-only matches to a person (7 real, 3 not).
Domain: caught15 / 22
Name: caught22 / 22
Name: wrong merges3
A-3 ⊗Attribution
Partner and AE both claim the deal
13 partner-registered deals were also marked AE-sourced. One written rule, a registration dated before the opportunity was created wins, gives every deal exactly one motion and flags all 13 with no false flags.
CRM + partner report summed$5.82M
Actual pipeline + bookings$5.07M
A-4 ⊗Activity
Retries hide from the usual dedup
150 webhook retries reused their event ID; 67 regenerated it. Dedup on event_id misses every regenerated one; dedup on message_id catches both. Then the definition: sends are attempts, not engagement.
"Engaged" firms, any touch214
Engaged: reply or held call95
A-5 ⊗Sync drift
A stalled sync makes healthy customers look dark
For 10 accounts, the Salesforce last-activity sync stopped weeks ago while calls kept happening in Gong. A drift check comparing the field to its sources flags all 10 with no false flags.
Dark customers, SF field5
Dark customers, across tools2
A-6 ✓Agents
Agents get context, not the keys
The ontology records each entity's grain, which system owns each field, the metric rules in plain language, and what each agent may do. Reads carry lineage; governed changes go to a person with evidence attached.
The first version caught every failure with zero false merges, because every duplicate shared a domain. That was the generator agreeing with the detector, not a result. Adding duplicates under a legacy domain from an acquired firm produced the 15/22 and the false merges above, and the tiered design came out of that.
C-1
The model, at the grain Basis sells
Field
Owned by
opportunity.stage
Salesforce
opportunity.amount
Salesforce
opportunity.motion
warehouse, declared rule
opportunity.is_expansion
warehouse, declared rule
firm.firm_id
warehouse, identity resolution
firm.last_engaged_at
warehouse, max of Gong and Outreach replies
partner.registration
partner portal
activity.*
Outreach, Gong (append-only)
D-1
First 90 days in the role
DAYS 1–30
Find out what is true
Map which system controls each field across Salesforce, Outreach, Gong and Clay.
Resolve accounts into firms and buying groups; size the duplicate queue.
Agree the expansion rule and the partner-credit rule with RevOps and Finance.
DAYS 31–60
Make the numbers agree
Ship the semantic layer for pipeline, new vs expansion ARR, conversion and customer health.
Reconcile reporting to source records so teams stop rebuilding numbers in spreadsheets.
Add drift and sync monitoring with alerts.
DAYS 61–90
Give agents safe context
Publish the GTM ontology behind permission-aware interfaces.
Let agents propose merges and fixes; people approve governed changes.
Report practice penetration by firm so expansion is visible.
Run it yourself
Python standard library only, under a second. Three files: the synthetic world, the model, the report.
git clone https://github.com/sa-basharat-ali/accounting-gtm-data-model
cd accounting-gtm-data-model && python3 run.py