Spend comes from exact cached GHL Ad Publishing campaign rows. Lead, booking, deal, and won counts come from CRM records tied to captured attribution campaign tails.
Form Builder
Brand Colours, typography, width
Form Content Title, button, consent text
/thank-you/) or a
full https:// address. Left empty or invalid, the thank-you message is shown
instead.
Compliance Privacy & terms links
Attribution & CRM Mapping
Quiz
Dashboard metrics read these exact contact fields for this GHL location.
Integrations
Spend ledger
Connect provider
Choose an account
This login can see more than one advertising account. Pick the one whose spend belongs to this location — it is fixed once chosen, because every figure recorded afterwards is filed under it.
Integration mapping
Ads / LSA reconciliation
Disconnect integration?
Integration log
Add manual spend
Import GHL numbers, then map each source to the correct tracking number.
| Source | Imported number | Tel |
|---|
Rules that resolve visitor source before phone swap or form submit.
| Category | Label | Key | Priority | Aliases | Referrers | UTM source | UTM medium | UTM campaign |
|---|
Re-authorize when GHL API access is missing or permissions changed.
- Location ID
- Status
- Scopes
- Diagnostics
- Recent OAuth callbacks
Use branches when one GHL location serves multiple websites or service areas.
Each branch has its own exact domain allowlist and reCAPTCHA credentials. The tracker asset is shared; its embed carries the branch ID.
Bring contacts, appointments and opportunities in from a CSV, TSV or XLSX file. Everything below is built from the file you upload.
Launch MirylOS in the right order
Follow these steps once for each sub-account. Every button opens the exact place you need.
Check the GHL connection
Open Connection and confirm that the status is Connected. If it is not connected, or permissions changed, select Re-authorize GHL and approve this sub-account.
Create Attribution custom fields
Checks Contact custom fields first, creates only missing fields, verifies the result, and updates Field Mapping with the actual GHL keys. It includes Google click IDs: gclid, gbraid, wbraid, Google campaign/ad group/keyword fields, and Meta campaign/adset/ad/form fields. It is safe to run again.
Paid channel rule: Google Ads data is written only to Google fields such as campaignid, adgroupid, gclid, gbraid, and wbraid. Meta Ads data is written only to fb_* fields such as fb_campaign_id, fb_campaign_name, fb_adset_name, fb_adset_id, fb_ads_name, and fb_ads_id. Do not map Meta fields to generic ad_id, adset_id, adset_name, or ad_name.
View field checklist
Create operational fields
Create and map a pipeline
Build the forms
Complete allowed domains, brand colors, content, consent, Privacy and Terms links, required fields, and Field Mapping. Configure Form 1 first. Open Form 2 and use Duplicate as a starting point, then add its extra fields. Keep Google Ads and Meta Ads campaign, adset, ad, form, and keyword fields mapped so attribution tails are preserved for forms and website calls.
Enable reCAPTCHA
Create Google reCAPTCHA v3 keys for every website domain. In Form, enable reCAPTCHA, paste the Site key and Secret key, then save. Test one real submission on the published website.
Install the website scripts
Place the Phone tracker script in the website Head so it loads on every page. Add either the Form 1 or Form 2 code where the form must appear. Use the live preview before publishing, then test the website in an incognito window.
Review Sources
Each Source is a matching rule used for attribution, forms, phone swaps, and reporting. Review its Label, Key, aliases, referrers, and UTM values. UTM campaign is optional; leave it blank when the source and medium should match every campaign. To add a source, select Add source, use a unique lowercase key, add the referring domain or UTM values, and save.
Buy and map tracking numbers
In GHL, buy one phone number for each source you want to measure. Return to Phone Numbers, select Import numbers, assign each Imported number to its correct Source, run Auto fill Tel, and save. Never reuse one tracking number for two sources.
Replace public numbers and campaign links
Update the phone number on every external profile, ad, directory, print asset, vehicle, and campaign. Confirm the destination number matches the Imported number mapped to that Source.
Google MyBusiness: ?utm_source=google&utm_medium=gbp
Google LSA: ?utm_source=google&utm_medium=lsa
BBB: ?utm_source=bbb&utm_medium=referral
Nextdoor: ?utm_source=nextdoor&utm_medium=local_social
HomeAdvisor: ?utm_source=homeadvisor&utm_medium=lead_directory
Enter Marketing Spend
Add spend by date and Source. Use the same Source names configured in Settings so cost, leads, calls, and performance stay connected. Update spend whenever invoices or ad-platform totals change.
Run a second branch
Open Connection and enable branches only when the business runs more than one branch — typically one per service area, each with its own website. Each branch then gets its own form, its own tracking numbers, and its own copy of the Sources list, so a visitor sees the number and form belonging to the site they landed on.
Settings gains a branch switcher above Form, Sources and Phone Numbers, and Analytics gains a branch filter. Reporting stays combined by default — a second branch's traffic is still counted under its parent source, and the filter is what splits it out.
Each branch has its own embed snippets. Paste the snippet shown while that branch is selected; the first branch's snippet is unchanged, so nothing already live needs re-pasting.
Turning this off hides the extra branches and their rows — nothing is deleted, and turning it back on restores them. Snippets already pasted on a second site keep reporting.