Real estate UTM builder.
Pick a channel, choose the project and objective, and the campaign name follows one convention every time.
Free · runs in your browser · nothing uploaded
Five tags, one link
What UTM tags actually do.
UTM tags are short labels added to the end of a link. When someone clicks, your analytics reads the labels and records exactly where the visit came from.
No extra code is needed for GA4 to read them. The five standard tags answer five questions about every visit, and GA4 uses the source and medium to decide which channel the visit belongs to.
The five tags
| Tag | Answers | Example |
|---|---|---|
utm_source | Where did the click come from? | google, facebook, newsletter |
utm_medium | What type of traffic is it? | cpc, paid_social, email |
utm_campaign | Which campaign was it? | spring-sale_202611 |
utm_content | Which ad or link was clicked? | hero-banner, video-a |
utm_term | Which keyword or audience? | running shoes |
Four reasons to tag every link
Why it matters for reporting.
01
Credit goes to the right campaign.
Without tags, a click from an email or WhatsApp message often shows up as Direct, and the campaign that earned it gets no credit.
02
Channels are compared fairly.
One naming convention across every channel means paid, owned and partner traffic line up in the same report.
03
Leads and revenue connect to marketing.
Stored with each lead, UTM tags show which campaign produced customers, not just clicks.
04
Budget follows results.
Clean data shows which ads and messages to scale and which to stop.
From link to report
Tag the link. Then trust the report.
Use the builder
Step 01
Paste the project page or launch landing page.
Step 02
Choose the channel, including portals, brokers and offline placements.
Step 03
Build the campaign name from project, phase, unit type, objective, buyer market and date.
Add the selling angle as content.
Step 04
Copy the link for ads and brokers, or download the QR code for billboards and brochures.
The naming convention
Pattern{project}_{objective}_{date}
Examplepalm-heights_launch_202611
Parts are joined with underscores and words inside a part use hyphens, so you can split the name back into columns in a spreadsheet or Looker Studio. Optional parts are skipped when empty. You can switch the separator under Formatting rules.
Source, medium and GA4 channel
Every channel, mapped to GA4.
The source and medium each preset uses, and the GA4 default channel it reports under. Unassigned means GA4 has no default rule for it; add a custom channel group rule.
| Channel | utm_source | utm_medium | GA4 channel |
|---|---|---|---|
| Google Ads: Search | google | cpc | Paid Search |
| Google Ads: Performance Max | google | cpc | Paid Search |
| Microsoft Advertising | bing | cpc | Paid Search |
| Facebook lead or traffic ads | facebook | paid_social | Paid Social |
| Instagram ads | instagram | paid_social | Paid Social |
| TikTok ads | tiktok | paid_social | Paid Social |
| Snapchat ads | snapchat | paid_social | Paid Social |
| LinkedIn ads (investors) | linkedin | paid_social | Paid Social |
| Google Ads: Display | google | display | Display |
| Google Ads: Demand Gen | google | cpc | Paid Search |
| YouTube ads | youtube | cpv | Paid Video |
| Bayut | bayut | referral | Referral |
| Property Finder | propertyfinder | referral | Referral |
| Dubizzle | dubizzle | referral | Referral |
| 99acres | 99acres | referral | Referral |
| MagicBricks | magicbricks | referral | Referral |
| Other portal | portal-name | referral | Referral |
| Broker or agency partner | agency-name | referral | Referral |
| Broker network email | broker-newsletter | email | |
| Buyer database email | newsletter | email | |
| WhatsApp message or broadcast | whatsapp | social | Organic Social |
| SMS | sms | sms | SMS |
| Instagram bio or story | instagram | social | Organic Social |
| LinkedIn post | linkedin | social | Organic Social |
| Billboard or OOH QR | billboard | qr | Unassigned |
| Brochure or print ad QR | print | qr | Unassigned |
| Roadshow or exhibition QR | roadshow | qr | Unassigned |
| Sales gallery QR | sales-gallery | qr | Unassigned |
| Radio spot vanity URL | radio | audio | Audio |
For real estate marketers
Tips that keep the data clean.
01
Give every broker their own source.
When leads arrive in the CRM, you can match them to the right agency without arguing over spreadsheets.
02
Use a different QR link per billboard location, with the location in utm_content.
It's the cheapest way to compare outdoor sites.
03
Tag the buyer market, not just the ad targeting.
India, UK and GCC buyers respond to different angles and close at very different rates.
04
Pass the UTMs into hidden fields on your enquiry form and into your CRM.
Real estate sales cycles are long, so first-touch source has to live with the lead.
05
Keep the project name identical across every channel and every phase so lead reports add up.
Store UTMs with every lead
Get UTM data into your CRM.
GA4 counts visits. Your CRM or database records who became a lead or customer. Unless the UTM tags are saved with each record, the two never meet, and you can't tell which campaign produced which sale. Share this brief with your website developer.
What to ask for
Step 01
Read the UTM tags and ad click IDs from the URL on every page load.
Step 02
Save them in a first-party cookie for 90 days.
Keep a first-touch copy that is never overwritten, and a last-touch copy that updates on each new tagged visit.
Step 03
Ignore visits without UTM tags, so an untagged return visit never wipes the saved values.
Step 04
Add hidden fields for every value to every form: contact, booking, sign-up and checkout.
Step 05
Fill the hidden fields from the cookie when the form is sent.
Step 06
Store each value in its own column on the lead or order record, and map the same fields into the CRM.
Step 07
Test it: open a tagged link, send a form, and check the record shows the right values.
Fields to add to each lead or order
| Field | What it holds |
|---|---|
first_utm_source … first_utm_term | First tagged visit. Set once, never overwritten. |
last_utm_source … last_utm_term | Most recent tagged visit before the form was sent. |
gclid, fbclid, msclkid | Ad click IDs, for offline conversion uploads. |
landing_page | Full URL of the first page seen. |
referrer | The site the visitor came from. |
first_touch_at, last_touch_at | Timestamps of both visits. |
A starting point for the developer
const KEYS=['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid','fbclid','msclkid'];
const q=new URLSearchParams(location.search);
const hit={};KEYS.forEach(k=>{if(q.get(k))hit[k]=q.get(k);});
if(Object.keys(hit).length){
hit.landing_page=location.href;hit.referrer=document.referrer;hit.at=new Date().toISOString();
const save=(n,v)=>document.cookie=n+'='+encodeURIComponent(JSON.stringify(v))+';path=/;max-age=7776000;SameSite=Lax';
if(!document.cookie.includes('utm_first='))save('utm_first',hit);
save('utm_last',hit);
}Request: store UTM data with every lead and order
Why: GA4 shows visits. Our database shows leads and sales. Saving the UTM tags with each record tells us which campaign produced each lead and how much revenue it brought in.
Steps:
1. Read the UTM tags and ad click IDs from the URL on every page load.
2. Save them in a first-party cookie for 90 days. Keep a first-touch copy that is never overwritten, and a last-touch copy that updates on each new tagged visit.
3. Ignore visits without UTM tags, so an untagged return visit never wipes the saved values.
4. Add hidden fields for every value to every form: contact, booking, sign-up and checkout.
5. Fill the hidden fields from the cookie when the form is sent.
6. Store each value in its own column on the lead or order record, and map the same fields into the CRM.
7. Test it: open a tagged link, send a form, and check the record shows the right values.
Fields to add:
- first_utm_source … first_utm_term: First tagged visit. Set once, never overwritten.
- last_utm_source … last_utm_term: Most recent tagged visit before the form was sent.
- gclid, fbclid, msclkid: Ad click IDs, for offline conversion uploads.
- landing_page: Full URL of the first page seen.
- referrer: The site the visitor came from.
- first_touch_at, last_touch_at: Timestamps of both visits.
Starting point:
const KEYS=['utm_source','utm_medium','utm_campaign','utm_content','utm_term','gclid','fbclid','msclkid'];
const q=new URLSearchParams(location.search);
const hit={};KEYS.forEach(k=>{if(q.get(k))hit[k]=q.get(k);});
if(Object.keys(hit).length){
hit.landing_page=location.href;hit.referrer=document.referrer;hit.at=new Date().toISOString();
const save=(n,v)=>document.cookie=n+'='+encodeURIComponent(JSON.stringify(v))+';path=/;max-age=7776000;SameSite=Lax';
if(!document.cookie.includes('utm_first='))save('utm_first',hit);
save('utm_last',hit);
}Never put names, emails or phone numbers in UTM tags. Store them only in your own database, under your privacy policy.
The ones that come up most
Common questions.
01How do I track leads from property portals like Bayut or Property Finder?
Portal enquiries usually arrive directly in your CRM or the portal's dashboard. UTMs track the visits portals send to your own website, such as clicks on your developer page link. Tag those links with the portal as the source and referral as the medium.
02How should I track billboards and print ads?
Use a QR code with UTM tags, or a short vanity URL that redirects to a tagged link. Put the billboard location in utm_content. GA4 will report medium qr as Unassigned unless you add a custom channel group, which takes a couple of minutes in GA4 admin.
03How do I compare the same project across different buyer markets?
Add the market to the campaign name, for example "palm-heights_2br_launch_india_202610". You can then filter or split the campaign name to compare cost per lead and site visits by market.
04Can I track leads from WhatsApp?
UTMs track the click to your website. For WhatsApp-first funnels, use a tagged landing page with a WhatsApp button that passes the campaign into the pre-filled message, so sales can see where the chat came from.
05Should brokers use their own UTM links?
Yes. Give each broker a tagged link with their agency as the source. It keeps their traffic separate from your own campaigns and makes commission disputes easier to settle.