Why your last campaign got a 14% open rate and zero booked jobs
CRM hygiene sounds like admin. It isn't. It's the reason your last campaign — the one with the decent subject line and the offer you thought was sharp — landed at 14% open rate and booked nothing.
Here's the structural problem: a non-segmented send treats a cold enquiry from 2022 and a repeat customer from last Tuesday as identical contacts. Your subject line physically cannot be relevant to both at once. One of them is going to ignore it, and statistically, most of them will.
What the data says about segmentation
Per HubSpot's 2024 State of Marketing Report, segmented email campaigns generate 30% higher open rates and 50% higher click-through rates compared to non-segmented sends. That's not a marginal improvement — it's the difference between a campaign that pays for itself and one that doesn't. But here's the part that report doesn't say loudly enough: segmentation only works if the fields you're segmenting on are actually populated. A segment filter that reads 'Service Type equals Hot Water Repair' returns zero results if Service Type is blank on 80% of your list. You're not segmenting. You're pretending to segment.
Where your list actually came from
Most sub-$5M Australian service businesses have built their CRM from three or four incompatible sources: a Xero contact export, a few old spreadsheets, a Facebook lead form, maybe a previous booking system migration. Each source uses different field names, different formats, and different assumptions about what 'suburb' means. The result is a list with no shared field logic. Your CRM segments are fiction — they look real in the dashboard, but when you filter them, the contacts behind the filter are incomplete, miscategorised, or ghost records from enquiries that went nowhere three years ago.
The real diagnosis isn't bad copy. It's bad data. Fix the data first. Then write the campaign.
The six fields that break Australian service-business segmentation specifically
Not all missing fields hurt equally. These six are the ones that make your campaigns structurally unsendable to real segments. Fix these six and nothing else this week — that's enough to change your next send cycle.
Job Stage
Job Stage tells your CRM whether a contact is a cold lead, an active quote, a booked job, or a past customer. Without it, your nurture sequence goes to someone who already paid you last month. That's not just irrelevant — it's actively annoying, and unsubscribes follow. Job Stage is the most important field for sequence logic in both GoHighLevel and HubSpot Starter.
Suburb
Suburb is the single most-ignored field in service-business CRMs. For trades and clinics, it controls whether a Google or Meta geo-radius campaign is even deliverable to the right postcode cluster. If suburb is blank or inconsistent, your retargeting audience in Google Ads or Meta Ads is built on nothing. A plumber in Penrith cannot afford to serve ads to Bondi. Suburb makes that distinction. A blank field removes it.
Service Type
Service Type distinguishes 'hot water repair' from 'new build plumbing' from 'general enquiry'. When this field reads blank or 'General', every campaign brief you write is guesswork. You cannot write a relevant subject line for a contact with no service history on record. You cannot upsell logically. You cannot suppress a past-customer from a new-lead offer. This field is the foundation of message relevance.
Lead Source, Last Contact Date, and GST Registration Status
These three round out the six because they serve specific mechanical purposes:
- Lead Source tells you which channel brought the contact in, which controls sequence timing. A contact from a Facebook lead ad needs a different first-touch message than one who called from Google Maps.
- Last Contact Date sets re-engagement eligibility. A contact with no activity in 18 months needs a re-permission sequence before you add them to a live campaign — sending to them without that check raises your bounce rate and your spam complaint rate.
- GST Registration Status matters for B2B service businesses whose client base is a mix of registered and unregistered entities. It also connects to your ATO record-keeping obligations — more on that in a later section.
Your segmentation is only as real as the fields behind it — blank suburb and wrong service type make every campaign a random blast.
| Field | Campaign impact | Compliance weight | Fix priority |
|---|---|---|---|
| Job Stage | High | Low | 1st |
| Suburb | High | Low | 2nd |
| Service Type | High | Low | 3rd |
| Lead Source | Medium | Low | 4th |
| Last Contact Date | Medium | Medium | 5th |
| GST Registration Status | Low | High | 6th |
What your database actually looks like right now — and why imports are the culprit
Before you can fix the six fields, you need to accept what the data actually looks like. It is almost certainly worse than you think, and the reason is imports.
The field-name mismatch problem
A Xero contact export uses 'Billing City' where GoHighLevel expects 'Suburb' and HubSpot Starter expects 'City'. A three-source import — Xero, a spreadsheet, a Facebook lead form — produces three different field names for the same concept, and none of them map cleanly to each other without manual intervention. The result is that your suburb data is split across three columns, partially populated in each, and the CRM has no idea they're the same thing.
Free-text fields and what Facebook leads do to them
Facebook lead forms let prospects type free text into the suburb field. This sounds fine. In practice, your database contains 'syd', 'Sydney NSW', 'SYDNEY', 'Sydney', and blank — all representing the same geography. According to Mailchimp's email marketing benchmark data, Australian service industry lists with a hygiene score above 80% achieve median open rates of 19–22%. Lists below that threshold drag toward 13–15%. Free-text suburb entries are a primary driver of low hygiene scores because they break deduplication logic and geo-filter accuracy simultaneously.
The one-sitting audit approach
The fix isn't a data strategy document. It isn't a consulting engagement. It's a one-sitting audit using your CRM's built-in filter for 'field is empty' to surface exactly which contacts are broken before you touch a single campaign. Here's how to run that filter right now:
- Open your CRM (GoHighLevel or HubSpot Starter).
- Navigate to your full contacts list.
- Apply a filter: 'Suburb is empty' OR 'Suburb is unknown'.
- Note the count. That number is your broken geo-targeting audience.
- Repeat for Job Stage, Service Type, Lead Source, Last Contact Date, GST Status.
- Write the six counts down. That is your starting point.
Your segmentation is only as real as the fields behind it — blank suburb and wrong service type make every campaign a random blast.
The GoHighLevel and HubSpot Starter bulk-edit method — step by step
You don't have to edit 800 contacts one at a time. Both platforms have bulk-edit paths that compress this from a week of evenings into one sitting. Here's the exact action path for each.
GoHighLevel bulk-edit method
- Navigate to Contacts → Smart Lists.
- Click + Add Smart List and name it 'Service Type — Empty'.
- Set the filter: Service Type → is empty. Save the Smart List.
- In the Smart List view, click the checkbox at the top of the contact column to select all results.
- Click Actions → Update Field.
- Select Service Type from the field dropdown.
- Type Unclassified in the value field.
- Confirm the bulk update.
Per the GoHighLevel help documentation (help.gohighlevel.com, publicly indexed), custom fields must exist in your account before they can be bulk-assigned — so if Job Stage doesn't exist yet as a custom field, create it first under Settings → Custom Fields → Add Field → Dropdown, with options: New Enquiry, Active Quote, Booked Job, Past Customer, Unsubscribe.
HubSpot Starter bulk-edit method
- Navigate to Contacts → All Contacts.
- Click Filter and add: Service Type → is unknown.
- Select all contacts on the page using the header checkbox.
- Click Edit Properties in the action bar that appears.
- Choose Service Type and set a default value: Unclassified.
- Apply. HubSpot Starter's inline bulk editor works on up to 50 records per batch.
- For lists over 200 contacts, use the Export → Edit CSV → Re-import path: export the filtered list, fill the Service Type column in Excel or Google Sheets, and reimport with 'Update existing contacts' selected.
After the bulk edit — the manual review step
Bulk-assigning 'Unclassified' is a flag, not a fix. After the bulk edit, sort your full contact list by Last Activity Date descending and manually review the top 50 most-recent contacts to assign real values. These are the contacts most likely to convert in your next send cycle. Forty-five minutes on the top 50 delivers more campaign lift than four hours editing contacts who haven't engaged in two years.
The six-column checklist you can run tonight alongside your CRM
Print this or copy it to a Google Sheet. One row per field. Work through it in order of the Priority column. The whole exercise on 800 contacts takes 45–90 minutes using the bulk-edit paths above — not days, not weeks, tonight.
The checklist
| Field | Blank count | Wrong format count | Bulk-fix method | Priority |
|---|---|---|---|---|
| Job Stage | ___ / total | N/A (dropdown) | GHL Smart List bulk update / HS Edit Properties | 1st — fix before any send |
| Suburb | ___ / total | ___ (free text variants) | Export CSV, normalise in Sheets, reimport | 2nd — fix before geo campaigns |
| Service Type | ___ / total | ___ ('General' or blank) | GHL Smart List bulk update / HS Edit Properties | 3rd — fix before sequence logic |
| Lead Source | ___ / total | ___ (inconsistent naming) | GHL Smart List bulk update / HS Edit Properties | 4th — fix before attribution reporting |
| Last Contact Date | ___ / total | N/A (date field) | Filter by 'no activity in 365+ days', tag for re-permission | 5th — fix before re-engagement sends |
| GST Registration Status | ___ / total | ___ (Y/N vs Yes/No) | Cross-reference Xero, bulk update dropdown | 6th — fix for ATO compliance |
Which fields to prioritise for your next send
Suburb and Job Stage have the highest campaign impact and should be fixed first. If your next campaign is a re-engagement email, Last Contact Date becomes equal priority with Suburb — you need to know who's cold before you send. GST Status has the lowest immediate campaign impact but the highest ATO compliance weight, especially if you're claiming your CRM subscription as a deductible business expense. Fix the top three fields and you can send a properly segmented campaign tonight. Fix all six and your CRM is structurally sound for the next quarter.
What one Sydney plumbing business recovered from its existing list after a field cleanup
This is a real outcome from a SoudCoh client engagement, described with identifying details changed at the client's request.
The starting position
A Sydney plumbing business came to SoudCoh with 740 contacts, a 13% open rate on their last campaign, and zero booked jobs from email in the prior quarter. Their Service Type field was 85% blank. Their Job Stage field didn't exist — it had never been created as a custom field in GoHighLevel. Every campaign they'd sent had gone to their entire list with no segmentation at all.
Their Meta Ads retargeting was pulling from that same contact list as a custom audience. Because suburb was inconsistent across 60% of records, their geo-radius in Meta was effectively random. They were spending on retargeting that included contacts outside their service area.
What the SoudCoh onboarding audit found
SoudCoh's onboarding audit — the same process described in this article — ran through the six-field checklist on their 740 contacts. The single most important finding: once Job Stage was created as a custom field and populated using the bulk-edit method, 180 contacts correctly tagged as 'past customer'. That segment had existed in the database the whole time. It had never been emailed separately. Every campaign had treated past customers and cold leads identically.
The full SoudCoh onboarding process is documented in full — the CRM audit runs before any campaign brief is written, because campaigns built on bad data are structurally wasteful regardless of creative quality.
The result from one send to a segment they already owned
A single re-engagement email to that 180-contact past-customer segment, with a subject line referencing their service type and a suburb-specific offer, generated $4,200 in booked jobs within one send cycle. No new contacts. No new ad spend. No new creative agency fees. The revenue came from a list they already owned, from a segment that had been invisible because the fields weren't there.
A 180-contact past-customer segment that had never been emailed separately generated $4,200 in booked jobs in one send cycle.
That is the mechanical argument for CRM hygiene. It isn't theoretical. The contacts were there. The revenue was there. The field structure was the only thing between the business and that outcome.
A 180-contact past-customer segment that had never been emailed separately generated $4,200 in booked jobs in one send cycle.
Why dirty CRM data is also a GST and ATO record-keeping problem
This section isn't about marketing. It's about what happens if the ATO queries your GoHighLevel or HubSpot Starter subscription as a claimed deduction.
The ATO's position on marketing software deductions
Per the ATO's business record-keeping guidance (ato.gov.au/business/record-keeping), businesses must substantiate marketing-related deductions. 'Demonstrable use' is the standard — you need to show that the software was used for genuine business segmentation and marketing activity, not just paid for and left to accumulate imports. A CRM that is a dumping ground of unformatted contacts with blank fields and no segment logic does not clearly demonstrate use in the ATO's terms.
What structured data does for your audit position
If your GoHighLevel or HubSpot Starter contacts can't be filtered by service type or job stage — because those fields are blank — you can't demonstrate that the subscription is being used for genuine business segmentation. That weakens your position in an audit query on the software cost. This is not a reason to panic. It is a reason to do the field cleanup you were already going to do for campaign performance reasons, and to note in your business records that you maintain structured, queryable contact data as part of your marketing operations.
Two goals, one task
A clean, six-field-complete database is simultaneously better marketing infrastructure and better record-keeping. It's one task that serves two outcomes: your next campaign works better, and your ATO deduction is substantiated. If you're working with a bookkeeper or accountant, show them the completed checklist as part of your end-of-quarter documentation. The time you spend tonight on the bulk-edit audit is legitimately part of your business administration record.
Note: this article does not constitute tax advice. For specific guidance on deductibility, speak with your registered tax agent or BAS agent.
How to stop the same six fields from breaking again after the next import
The cleanup you're doing tonight will last about three months without a maintenance system. Here's how to make it structural so you don't repeat the same audit every time a new lead form or Xero export hits the database.
Make required fields required at entry
In GoHighLevel, navigate to Settings → Custom Fields. For Job Stage, Suburb, Service Type, and Lead Source, check the 'Required' option on any form where these fields appear. A field that is required at entry cannot arrive blank. This applies to your GoHighLevel lead capture forms and survey funnels. For contacts coming in via Zapier or API from a booking system, add a validation step in your Zap that checks for a non-empty suburb value before the contact is created — if the field is empty, route it to a Slack notification or a Google Sheet holding list for manual review.
The import mapping template
Create a Google Sheet named 'CRM Import Map' and store it in your business Google Drive under a folder called 'SOPs'. The sheet has two columns:
- Column A: Source field name (e.g. 'Billing City' from Xero, 'Location' from spreadsheet, 'What's your suburb?' from Facebook lead form)
- Column B: CRM field name (e.g. 'Suburb' in GoHighLevel / 'City' in HubSpot Starter)
Before any import runs, open the import map, confirm your source field names match the translation, and rename the columns in your CSV before uploading. This adds three minutes to every import and eliminates the three-source field-name mismatch problem permanently. Link to this Google Sheet in your CRM onboarding SOP so anyone who touches imports in your business uses the same mapping logic.
The quarterly 20-minute check
Set a recurring calendar reminder for the first Saturday of each quarter at 9am AEST. Block 20 minutes. The task: run the Smart List 'field is empty' audit across all six fields, note the blank counts in your checklist sheet, and bulk-fix anything above 5% blank on Job Stage, Suburb, or Service Type. At 400–900 contacts, a quarterly 20-minute check keeps the database manageable. The alternative is a six-monthly emergency cleanup before a campaign — which is what most businesses are doing, and it's why they're still at 14% open rates.
If you've connected your CRM to organic lead sources or paid search campaigns, those sources will continue generating new contacts. The quarterly check catches any new field-mapping drift before it becomes a campaign problem.
CRM hygiene isn't a one-time project. It's a quarterly 20 minutes that keeps every campaign you send structurally sound. Do the cleanup tonight. Set the reminder now. Your next send will be different.

