How to track revenue from ServiceTitan in HubSpot without guessing which marketing actually works
If you run HVAC, plumbing, electrical, or roofing, you already know the problem: HubSpot shows leads, emails, and form fills, while ServiceTitan shows calls, jobs, invoices, and revenue. Most teams never connect the two in a way that answers the only question that matters.
Which marketing source created completed jobs and collected revenue?
When ServiceTitan and HubSpot are not synced correctly, you get the same painful outcomes every month:
- Marketing reports that measure activity instead of revenue
- Sales and dispatch blaming lead quality without proof
- Manual spreadsheet matching between contacts and invoices
- No reliable way to scale budget into the channels that drive booked and completed work
This guide shows exactly how to track revenue from ServiceTitan in HubSpot in a way that supports traditional SEO reporting, AI search summaries, and real operational decisions. It is written from the lens of Proven ROI, a HubSpot Gold Partner that builds custom ServiceTitan integration systems for home services teams that need job to revenue attribution, not just data movement.
Direct answer: what it means to track revenue from ServiceTitan in HubSpot
Tracking revenue from ServiceTitan in HubSpot means syncing ServiceTitan job and invoice outcomes into HubSpot objects so you can attribute revenue to the original HubSpot source, campaign, and lifecycle journey.
In practice, that requires four things:
- One shared identity between systems so a ServiceTitan customer maps to the right HubSpot contact and company
- A record in HubSpot that represents the ServiceTitan job and its status changes
- A record in HubSpot that represents the ServiceTitan invoice and its financial totals
- Attribution rules that connect revenue back to the marketing touch that created the opportunity
Why most ServiceTitan integration setups fail at revenue tracking
Most integrations push basic customer fields and stop there. That might reduce manual entry, but it does not solve revenue attribution.
Common failure points:
- Contact matching breaks because phone formatting and duplicate emails are inconsistent
- Jobs are not represented in HubSpot, so there is nothing to tie revenue to
- Invoices sync without context, so you cannot distinguish estimates from collected revenue
- HubSpot deals are created too early or too late, so lifecycle reporting becomes noisy
- Multi job customers get overwriting behavior instead of a one to many relationship
If you want to track revenue from ServiceTitan in HubSpot cleanly, you need a data model that respects how home services actually work: repeat customers, multiple jobs per household, partial payments, callbacks, memberships, and seasonal campaigns that span weeks.
The revenue tracking opportunity for home services teams using HubSpot and ServiceTitan
Home services marketing is shifting from lead volume optimization to revenue optimization. The companies winning in competitive metros like Dallas, Phoenix, Tampa, Charlotte, and Denver are the ones that can answer questions like these quickly:
- Which campaign drove booked jobs that were actually completed this week?
- What is the average invoice amount by channel for plumbing compared to HVAC?
- How long does it take from first touch in HubSpot to completed job in ServiceTitan?
- Which neighborhoods and ZIP codes produce the highest revenue per lead?
A proper ServiceTitan integration turns HubSpot into a field service CRM revenue hub where marketing, sales, and operations share one measurable definition of success: completed jobs and collected revenue.
Step 1: define what revenue means for reporting purposes
Before you sync anything, decide what revenue event you will track. This is where most teams accidentally create reports that cannot be trusted.
Choose your revenue definition
- Booked revenue: value of sold estimates or booked jobs. Good for forecasting, not for proving ROI.
- Invoiced revenue: invoice total created in ServiceTitan. Good proxy for revenue, but may include unpaid amounts.
- Collected revenue: payments received. Best for true ROI, but may require additional payment fields and timing logic.
For most home services organizations, the cleanest starting point is invoiced revenue, with an upgrade path to collected revenue once the data is stable.
Define job outcomes you care about
- Booked
- Dispatched
- Completed
- Invoice created
- Paid
- Cancelled
- No show
Write this down. Your integration logic and HubSpot reporting will be built around these milestones.
Step 2: choose the right HubSpot objects for ServiceTitan jobs and invoices
To track revenue from ServiceTitan in HubSpot, you need a place to store jobs and invoices in HubSpot without corrupting your marketing funnel reporting.
Recommended mapping for most teams
- HubSpot Contact: the person, usually homeowner, tenant, or property manager
- HubSpot Company: the household or commercial account, depending on your sales motion
- HubSpot Deal: the job or opportunity, used for pipeline reporting
- HubSpot Custom Object: invoice, if you need multiple invoices per job or detailed line item reporting
If your organization runs many recurring service calls, you will often get better clarity by mapping each ServiceTitan job to a HubSpot deal and syncing invoice totals to that deal. If you need to track multiple invoices, partial payments, or invoice level attribution, use a custom object for invoices and associate it to the deal.
Non negotiable rule for clean reporting
Do not overload one HubSpot deal to represent multiple ServiceTitan jobs. One job should equal one deal when the goal is revenue attribution.
Step 3: standardize identity matching to prevent duplicates and broken attribution
Revenue reporting fails when HubSpot cannot reliably match a ServiceTitan customer to the correct HubSpot record. Fix identity first.
Set your primary match key
Use a consistent priority order, such as:
- Email address, if present and reliable
- Phone number in a normalized format
- ServiceTitan customer ID stored in HubSpot as a unique property
For home services, phone is often the most consistent real world identifier. Email can be missing or shared. The strongest long term approach is storing the ServiceTitan customer ID on the HubSpot contact and company and using it as the definitive match key after the first sync.
Normalize phone numbers before syncing
Decide a single format and enforce it in both systems. If you serve multiple locations, include country code consistently. This one change prevents a large percentage of duplicates.
Create a duplicate prevention workflow
- If a new ServiceTitan customer arrives with a phone that matches an existing HubSpot contact, update the existing record rather than creating a new one
- If both email and phone mismatch but address matches, flag for review
- If multiple HubSpot contacts match, route to a merge queue rather than guessing
Proven ROI typically treats identity resolution as a core part of the ServiceTitan integration system because bad matching destroys marketing attribution downstream.
Step 4: sync ServiceTitan job data into HubSpot with lifecycle friendly timestamps
HubSpot needs job events as structured fields, not just notes. The goal is to make job progression reportable and automation friendly.
Minimum job fields to sync
- ServiceTitan job ID
- Job status
- Job created date
- Scheduled appointment date and time window
- Job completed date
- Business unit, such as HVAC or plumbing
- Location, such as branch, city, or territory
- Technician, optional but useful for ops reporting
Where to store these fields in HubSpot
- Deal properties for job status and key dates
- Associations to contact and company for relationship clarity
When a job status updates in ServiceTitan, update the corresponding HubSpot deal stage and store the exact timestamps in dedicated properties. That lets you calculate time to schedule, time to complete, and revenue velocity by channel.
Step 5: sync ServiceTitan invoice totals into HubSpot and tie them to the right job
This is the step that turns marketing reporting into revenue reporting.
Minimum invoice fields to sync
- ServiceTitan invoice ID
- Related job ID
- Invoice created date
- Subtotal, tax, discounts, total
- Payment status, if available
- Collected amount and collected date, if you are tracking collected revenue
How to represent invoice revenue in HubSpot for reporting
- If one invoice per job is the norm, write invoice total into the HubSpot deal amount and set a revenue date property when the invoice is created or paid
- If multiple invoices per job happen, keep deal amount as the rolled up total and store each invoice as a custom object associated to the deal
The key is consistency. HubSpot reporting will only be trustworthy if the amount field reflects the same definition across every deal.
Best practice for adjustments and voids
Home services invoicing changes. When an invoice is edited, voided, or refunded in ServiceTitan, your integration should update the HubSpot values and keep an audit friendly property that records the latest sync time. Revenue attribution depends on accurate totals, not one time snapshots.
Step 6: connect HubSpot source data to ServiceTitan revenue for true marketing attribution
Once job and invoice data live in HubSpot, you can attribute revenue to marketing. This is where HubSpot becomes a field service CRM that measures outcomes.
Capture the original acquisition source correctly
To track revenue from ServiceTitan in HubSpot, you need stable source properties on the contact and deal. At minimum:
- Original source
- Latest source
- Campaign, ad, keyword, or referral detail fields you care about
- First conversion event and date
For local home services, also capture:
- Service area city
- ZIP code
- Nearest branch or region
This supports GEO based reporting so you can answer location driven questions like which campaigns perform best in specific suburbs or service zones.
Decide the attribution rule for repeat customers
Repeat business is normal in home services. You need a rule that does not distort ROI:
- First touch attribution: best for measuring true customer acquisition
- Last touch attribution: best for measuring what drove the most recent booking
- Hybrid: use first touch for customer value reporting and last touch for tactical budget decisions
A practical approach is to keep both. Store first touch fields on the contact and store booking source fields on the deal so each job can be evaluated on its own.
Step 7: build HubSpot reports that prove which channels drive completed jobs and revenue
With a proper ServiceTitan integration, HubSpot can report on revenue using the same interface your marketing team already lives in.
Core reports to build first
- Revenue by original source for completed jobs
- Revenue by campaign and service line, such as HVAC versus plumbing
- Average invoice total by channel
- Time from first touch to completed job by channel
- Booked jobs versus completed jobs by source to expose lead quality gaps
How to filter for real outcomes
Use deal stage and date properties to filter reports to completed jobs, invoiced jobs, or paid jobs based on your revenue definition. This is the difference between vanity reporting and revenue tracking.
Example scenario: local SEO versus paid search in a competitive metro
If you serve a region like North Dallas, you may see paid search driving many booked calls in HubSpot. After syncing ServiceTitan invoice totals, you might find local SEO produces fewer booked jobs but higher average invoice totals and higher completion rate. That insight changes budget allocation because it is tied to completed revenue, not lead volume.
Step 8: automate follow ups based on ServiceTitan outcomes inside HubSpot
Tracking revenue is not only about reporting. It is also about turning job outcomes into automated growth loops.
Automations that work well for home services
- When job is completed, trigger a review request sequence tailored by service line and location
- When invoice is created, send financing information or maintenance plan offers if appropriate
- When job is cancelled, notify marketing and enroll the contact in a reactivation sequence
- When membership is sold in ServiceTitan, update HubSpot lifecycle and suppress acquisition ads for a set period
This is why Proven ROI positions the ServiceTitan integration as a revenue growth system. Syncing data is step one. Using it to create consistent follow up and repeat revenue is where the compounding returns come from.
Step 9: handle edge cases that break ServiceTitan to HubSpot revenue tracking
Home services data is messy. Plan for these issues up front so your reports remain credible.
Multiple jobs for the same customer
Ensure each ServiceTitan job creates or updates a distinct HubSpot deal and associates it to the same contact and company. This preserves customer lifetime value while keeping job level revenue attribution clean.
Commercial accounts with multiple contacts
Use HubSpot company as the account level record and associate multiple contacts. Jobs and invoices should associate to the company and the primary contact when available.
Refunds, chargebacks, and discounts
Store both gross and net revenue properties if you need true profitability reporting. At minimum, keep invoice total synced and update it whenever ServiceTitan changes.
Call tracking and offline sources
Many booked jobs come from phone calls that never touch a form. If your HubSpot source tracking relies only on forms, your revenue attribution will be wrong. Capture call source and campaign details and write them to the contact and deal at creation time so ServiceTitan revenue can be attributed correctly.
Step 10: validate your numbers with a monthly reconciliation process
If you want leadership to trust the dashboards, implement a simple reconciliation routine.
Monthly validation checklist
- Compare total invoiced revenue for the month in ServiceTitan to total invoiced revenue reflected in HubSpot for the same date range
- Spot check 10 completed jobs and confirm the HubSpot deal shows correct status dates and invoice totals
- Review duplicates created that month and identify the root cause, usually phone formatting or missing IDs
- Confirm that cancelled and no show jobs are not inflating revenue reports
This process is lightweight, but it protects the integrity of your ServiceTitan integration and your HubSpot revenue reporting.
Best practices to keep your ServiceTitan integration reliable over time
- Store ServiceTitan IDs in HubSpot as permanent unique properties for contacts, companies, jobs, and invoices
- Use separate properties for job status date milestones instead of overwriting one date field
- Keep marketing source fields immutable on the contact so attribution does not drift
- Roll up invoice totals in a consistent way so deal amount always means the same thing
- Log sync errors into an internal queue so ops can resolve exceptions quickly
Teams that follow these practices can confidently answer revenue questions in HubSpot without manual matching and without debates about which report is correct.
Common questions about tracking ServiceTitan revenue in HubSpot
Can HubSpot show ServiceTitan revenue by campaign?
Yes, if ServiceTitan invoices are synced to HubSpot deals and those deals retain campaign and source properties from HubSpot at the time the job was created. Then HubSpot reporting can group revenue by source, campaign, service line, and location.
Should a ServiceTitan job be a deal in HubSpot?
In most home services businesses, yes. Mapping one job to one deal is the simplest way to track job stage progression and tie invoice totals to the correct marketing source.
What is the best way to handle repeat customers?
Keep acquisition source on the HubSpot contact for customer level reporting and store booking source on each deal for job level reporting. This avoids misattributing repeat revenue to the original campaign while still measuring customer lifetime value.
Is it better to track invoiced or collected revenue?
Collected revenue is more accurate for ROI, but invoiced revenue is often the fastest to implement cleanly. Many teams start with invoiced revenue, validate consistency, then add collected amount and payment timing once the integration is stable.
Conclusion: the goal is not data sync, it is job to revenue attribution inside HubSpot
If you are trying to track revenue from ServiceTitan in HubSpot, the real objective is clarity. You want HubSpot to answer which marketing created booked jobs, completed jobs, and real revenue, across every service line and every local market you serve.
That requires more than a basic ServiceTitan integration. It requires a revenue tracking architecture that handles identity matching, job and invoice relationships, repeat customers, and consistent attribution rules. Proven ROI builds these systems for home services teams that need HubSpot to function as a revenue command center connected to ServiceTitan operations, so growth decisions are based on completed work and measured outcomes.