Tracking Field Manual
How to know, in numbers, what your ads actually bring in: clicks to the website, calls, WhatsApp messages, direction requests, form bookings and, finally, paying customers. Written for a beginner who runs ads for a local business in Türkiye, from an empty notebook to a working setup and a weekly reporting routine.
Our running example is Kaya Oto Servis, a fictional independent car repair shop in Ataşehir, İstanbul: 12 staff (8 mechanics/technicians, 2 service advisors, the owner, 1 admin), a website, a Google Business Profile, Instagram, Facebook and WhatsApp Business. Services: periodic maintenance (periyodik bakım), brakes, engine diagnostics, timing belt (triger kayışı), tyre change and storage (lastik oteli), A/C service and pre-purchase inspection (ekspertiz). Every ₺ figure about Kaya on this page is illustrative, not a benchmark.
The modules build on each other: each one only uses ideas from the modules before it. If you are short on time, read Module 01 (the plan), Module 06 (tracking each action), Module 08 (the lead sheet) and the setup checklist in Module 12. The main course has a shorter overview in its tracking module.
Why measure, and the measurement plan
- Why "the phone seemed busier" is not good enough when you pay for ads every day
- The four layers of a measurement plan: goal → KPIs → events → tools
- The difference between macro and micro conversions
- Kaya Oto Servis's one-page measurement plan, ready to copy
Why bother?
Ads cost money every day. Without tracking, all you can say at the end of the month is "we spent ₺10,000 and the phone seemed busier." With tracking you can say which campaign, ad or channel brought which calls, WhatsApp messages and bookings, and in the end which of them became paying customers. Then you can stop paying for what doesn't work and put more money into what does.
Keep one mindset from this first page to the last:
Platform numbers are signals; paying customers are the result. "Clicks" and "conversions" inside Google Ads or Meta Ads Manager are hints that something is working. The real score is how many people paid an invoice at your shop. Every tool on this page exists to connect the two.
The measurement plan
Before touching any tool, write a measurement plan: a one-page table that goes from what the owner wants down to where each number will be counted. You can do it on paper in 30 minutes. It has four layers:
- Business goal: what the owner actually wants, in plain words. Example: "fill the workshop: 30 more paid jobs a month."
- KPIs (key performance indicators): the few numbers that show progress toward the goal, such as new paying customers and cost per customer.
- Events / conversions: the actions on your website, profile or phone that lead toward the goal: a call, a WhatsApp message, a form booking, a direction request.
- Tools: where each action gets counted (Google Analytics, Google Ads, your Google Business Profile, Meta, your own spreadsheet).
Macro and micro conversions
A conversion is any action you count as a success. Not all successes are equal, so split them in two:
Macro conversion
An action that is (almost) a lead: a booking form sent, a phone tap, a WhatsApp click, a direction request. These are what you judge campaigns on.
Micro conversion
A sign of interest that often comes before a lead: viewing the price page, scrolling most of a service page, opening the contact page. Useful for diagnosing problems, not for judging a campaign.
In Google Analytics 4 (GA4, Google's free website analytics, covered in Module 05), every recorded action is an event, and the important ones you mark as key events. Google renamed "conversions" to "key events" in March 2024; the word "conversion" is now used for key events that you share with Google Ads for bidding. The chain is: event → key event → Google Ads conversion. Mark macros as key events; leave micros as normal events.
Don't invent event names when Google already has them. GA4's recommended lead events include generate_lead (a lead came in), qualify_lead, working_lead, close_convert_lead (became a customer) and close_unconvert_lead. Using standard names keeps reports tidy.
Kaya's measurement plan
The owner says: "I want the lifts full on weekdays." That becomes the goal row. The rest of the table is what the admin will track. Figures are illustrative.
| Level | Item | How it's measured | Tool | Key event? |
|---|---|---|---|---|
| Goal | +30 new paying customers a month at ≤ ₺500 ad cost each | Count customers by "source" column | Lead sheet | — |
| KPI | New paying customers from ads | Invoices matched to lead source | Lead sheet, later offline import | — |
| KPI | Cost per paying customer | Ad spend ÷ paying customers | Lead sheet / dashboard | — |
| KPI | Leads per week, cost per lead | Sum of macro conversions | GA4, Google Ads, Meta | — |
| Macro | Online appointment form sent | generate_lead on the thank-you page | GTM → GA4, Google Ads, Meta | Yes |
| Macro | Phone tap on website (tel: link) | Click trigger | GTM → GA4 phone_click, Meta Contact | Yes |
| Macro | WhatsApp click (wa.me link) | Click trigger | GTM → GA4 whatsapp_click, Meta Contact | Yes |
| Macro | Call from a Google ad (call button in the ad) | Calls from ads (call clicks) | Google Ads | Yes (in Ads) |
| Macro | Directions / calls / website clicks on the Google profile | Profile performance report | GBP, Google Ads | Monitor |
| Macro | "Yol tarifi al" (get directions) link on the website | Click trigger on maps link | GTM → GA4 directions_click | Optional |
| Micro | Price page ("fiyatlar") view | Page view with page path | GA4 | No |
| Micro | Service page scrolled 90% | Automatic scroll event | GA4 | No |
| Offline | Customer paid (job done) | Invoice + lead source | Lead sheet → Google Ads / Meta | Yes (best signal) |
Some words in that table (GTM, GBP, tel:) are explained in the coming modules. For now, notice the shape: one goal, three KPIs, a handful of macro events, two micros, and one offline row that ties everything to money.
Launching ads first and "adding tracking later." Every week without tracking is spend you can't learn from. Finish at least the plan and the lead sheet (Module 08) before the first lira goes to ads.
What are the four layers of a measurement plan, top to bottom?
Business goal → KPIs → events (conversions) → tools. You start from what the owner wants and only then decide what to count and where.
Is "visited the price page" a macro or a micro conversion for Kaya?
Micro. It shows interest but isn't a lead. Track it as a normal event for diagnosis; don't mark it as a key event or use it to judge a campaign.
In GA4 today, what is the difference between a "key event" and a "conversion"?
A key event is an important action you mark in GA4 (renamed from "conversion" in March 2024). A conversion is a key event that is shared with Google Ads for measurement and bidding.
The metrics and the funnel math
- The 15 or so numbers that appear in every ad report, each with its formula
- How to walk from impressions to paying customers with simple division
- Why ROAS, ROI and break-even ROAS are three different questions
- Why the "became a customer?" column matters more than any dashboard
Ad platforms throw dozens of numbers at you. Almost all of them are one division away from each other. Learn the formulas once and every report becomes readable.
A funnel is the path from "saw the ad" to "paid the invoice." At each step some people drop out, so the numbers get smaller as you go down, like liquid poured through a funnel. A lead is a person who contacted you (call, WhatsApp, form) and might become a customer.
The metrics glossary
| Metric | Meaning | Formula |
|---|---|---|
| Impressions | Times the ad was shown | — |
| Reach | Unique people who saw it (Meta) | — |
| Frequency | Average times each person saw it | Impressions ÷ Reach |
| Clicks | Clicks on the ad (on Meta, prefer "link clicks") | — |
| CTR | Click-through rate: share of impressions that got a click | Clicks ÷ Impressions × 100 |
| CPC | Cost per click | Spend ÷ Clicks |
| CPM | Cost per 1,000 impressions | Spend ÷ Impressions × 1,000 |
| Sessions | Visits recorded by GA4 | — |
| Engagement rate | Share of sessions that were "engaged": lasted over 10 seconds, or had a key event, or had 2+ page views | Engaged sessions ÷ Sessions |
| Leads | Calls, WhatsApp chats, forms | — |
| CVR | Conversion rate: share of clicks that became leads | Leads ÷ Clicks × 100 |
| CPL / CPA | Cost per lead / per action | Spend ÷ Leads |
| Close rate | Share of leads that became paying customers | Customers ÷ Leads × 100 |
| Cost per customer | What one paying customer cost in ads | Spend ÷ Customers |
| Average ticket | Average invoice per job (AOV) | Revenue ÷ Jobs |
| ROAS | Return on ad spend: revenue per ₺1 of ads | Revenue ÷ Ad spend |
| ROI | Return on investment: profit per ₺1 of ads | (Gross profit − Spend) ÷ Spend × 100 |
| Break-even ROAS | The ROAS where ads exactly pay for themselves on the first job | 1 ÷ Gross margin |
| LTV | Lifetime value: what a customer is worth over the whole relationship | Ticket × visits/yr × years × margin |
| CAC (full) | All acquisition costs per new customer | (Ads + agency + tools + staff) ÷ New customers |
Gross margin is the share of an invoice left after the direct costs of that job (parts and labour). If a ₺4,000 job costs ₺2,400 in parts and mechanic time, the gross profit is ₺1,600 and the gross margin is 40%.
A worked funnel: Kaya's "Kış bakımı" campaign
Kaya runs a one-month winter maintenance (kış bakımı) campaign. All figures are illustrative, chosen to make the math easy: spend ₺9,000, 20,000 impressions reaching 8,000 people, average ticket ₺4,000, gross margin 40%.
| Step | Calculation | Result |
|---|---|---|
| Impressions | given | 20,000 |
| Frequency | 20,000 ÷ 8,000 people | 2.5 |
| CPM | 9,000 ÷ 20,000 × 1,000 | ₺450 |
| Clicks (CTR 3%) | 20,000 × 3% | 600 |
| CPC | 9,000 ÷ 600 | ₺15 |
| Sessions in GA4 | ~90% of clicks recorded (some leave before the page loads, block tracking or decline the cookie banner) | ~540 |
| Leads (CVR 8%) | 600 × 8% | 48 |
| CPL | 9,000 ÷ 48 | ₺187.50 |
| Customers (close rate 50%) | 48 × 50% | 24 |
| Cost per customer | 9,000 ÷ 24 | ₺375 |
| Revenue | 24 × ₺4,000 | ₺96,000 |
| ROAS | 96,000 ÷ 9,000 | ≈ 10.7 |
| Gross profit | 96,000 × 40% | ₺38,400 |
| ROI | (38,400 − 9,000) ÷ 9,000 × 100 | ≈ 327% |
| Break-even ROAS | 1 ÷ 0.40 | 2.5 |
ROAS, ROI and break-even ROAS
These three answer different questions, and mixing them up is how businesses lose money while the report looks great.
ROAS · uses revenue
"For every ₺1 of ads, how much did customers pay us?" Kaya: ₺96,000 ÷ ₺9,000 ≈ 10.7. It ignores what the jobs cost you.
ROI · uses profit
"After paying for parts, labour and the ads, how much did we gain per ₺1?" Kaya: (₺38,400 − ₺9,000) ÷ ₺9,000 ≈ 327%.
Break-even ROAS
"What is the lowest ROAS where ads don't lose money on the first job?" It is 1 ÷ gross margin. With 40% margin: 2.5. Below 2.5, Kaya loses money on that first visit.
A ROAS of 3 sounds healthy. But if your margin is 25%, your break-even ROAS is 1 ÷ 0.25 = 4, so a ROAS of 3 loses money on the first job. Always compare ROAS with your break-even number, not with a number from a blog.
The lifetime view
A good car repair customer comes back. If a typical Kaya customer returns about twice a year for three years: ₺4,000 × 2 × 3 = ₺24,000 revenue, × 40% margin = ₺9,600 gross profit over the relationship (illustrative). Against that, even ₺1,000 to win a customer can be worth it long term. That only shows up if your lead sheet records returning customers, which Module 08 sets up.
All of this is only as good as one column: "became a customer?" in your lead sheet. Platforms can count clicks and leads for you. Nobody but your shop can count paid invoices.
Incrementality means customers you got because of the ads, who would not have come anyway. Some of Kaya's 24 were regulars who searched "Kaya Oto Servis," saw the ad on top and clicked it. They would have come without the ad. Module 09 shows a simple way to test this.
An ad got 12,000 impressions and 240 clicks, costing ₺3,600. What are the CTR and CPC?
CTR = 240 ÷ 12,000 × 100 = 2%. CPC = ₺3,600 ÷ 240 = ₺15.
A campaign shows ROAS 3. Your gross margin is 25%. Is it profitable on the first job?
No. Break-even ROAS = 1 ÷ 0.25 = 4. A ROAS of 3 is below break-even, so the first job loses money (unless customers come back often enough to make it up).
Which number needs data that no ad platform can give you: CPL, CTR or cost per customer?
Cost per customer. It needs the count of paying customers, which only your own lead sheet or CRM knows.
The tool stack and how it connects
- What each free tool does, in one sentence
- How tags, triggers and variables work in Google Tag Manager
- How data flows from a visitor's phone to your dashboard
- Which tools a car repair shop needs now and which can wait
You'll meet ten tool names in this manual. Nearly all are free; you pay only for the ads. Before the tour, one word you'll see everywhere:
A tag is a small piece of code on your website that sends information to a tool ("someone viewed this page," "someone tapped the phone number"). A cookie is a small file the browser stores so a tool can recognise the same visitor across pages and visits.
| Tool | What it does (plain words) | Kaya needs it? |
|---|---|---|
| Google Analytics 4 (GA4) | Records what visitors do on the site. Built as Account → Property → Data stream. Every action is an event; important ones are key events. | Now |
| Google Tag Manager (GTM) | A "box" of code you install once; then you add and change tracking inside GTM without editing the website each time. | Now |
| Google tag (gtag.js) | Google's single tag used by both GA4 and Google Ads. Install it directly or, better, through GTM. | Now (via GTM) |
| Google Ads conversion tracking | Counts conversions from ads and feeds Google's automatic bidding. Uses its own tag or imports GA4 key events. | When ads run |
| Google Search Console | Shows which Google searches showed and clicked your site for free (organic): impressions, clicks, queries. Links into GA4. | Now |
| Google Business Profile (GBP) Performance | The report inside your Google profile: views, searches, calls, directions, website clicks, messages, bookings. | Now |
| Meta Pixel + Conversions API (CAPI) + Events Manager | Pixel = browser tag for Facebook/Instagram ads; CAPI = a server-to-server copy of the same events; Events Manager = where you see and test them. | When Meta ads run |
| Microsoft Clarity | Heatmaps and session recordings: watch how people use your pages. Free. | Soon |
| Data Studio (called Looker Studio until April 2026) | Free dashboards that combine GA4, Google Ads, Search Console and Google Sheets. | After a month of data |
| Microsoft Advertising UET tag | Bing Ads' conversion tag. Only needed if you run Bing ads. | Probably never |
Bing has under 1% of search in Türkiye (StatCounter, Sep 2026), so the Bing UET tag is low priority for a local shop. Google has about 73% and Yandex about 25%. Yandex has its own analytics tool, but this manual sticks to the Google and Meta stack where your ad money goes.
Google renamed Looker Studio back to Data Studio on 11 April 2026; free use continues. Tutorials and videos from 2022–2026 still say "Looker Studio." It is the same product.
Tags, triggers and variables (the GTM vocabulary)
GTM has three building blocks. Once these click, every tracking recipe on this page reads like a sentence.
Tag = what to send
"Send a GA4 event called phone_click."
Trigger = when to send it
"When someone clicks a link whose address starts with tel:."
Variable = a detail used by both
"Click URL" (the address of the link that was clicked), "Page path," and so on.
So a GTM recipe reads: "When [trigger] happens, send [tag], using [variables]." You also get a Preview mode to test before you Publish changes to the live site.
Kaya's website is on WordPress. The admin installs GTM once with a plugin. After that, every new piece of tracking (phone taps, WhatsApp, forms, the Meta Pixel) is added inside GTM, without asking the web developer to change the theme each time.
Create every account (GA4, GTM, Google Ads, Meta Business) under the business's own Google/Meta login, and give agencies or freelancers user access. If someone leaves, the data stays with the shop.
In GTM, which part decides when something is sent: the tag, the trigger or the variable?
The trigger. The tag is what gets sent, and variables are details (like Click URL) used by tags and triggers.
Which tool shows calls and direction requests made directly from your Google profile on Maps?
Google Business Profile's Performance report. Those actions happen on Google, not on your website, so GA4 never sees them.
UTM parameters: labelling every link you control
- What UTM tags are and the five parameters that matter
- A naming convention that keeps reports clean (and Turkish-character-free)
- Ready-made tagged links for Instagram, GBP, flyers, WhatsApp and Meta ads
- Why you must not add manual UTMs to Google Ads
When someone taps the link in your Instagram bio or scans the QR code on a flyer, GA4 often can't tell where they came from. The visit lands in a vague bucket like "direct" or "referral." UTM parameters fix that.
UTM parameters are labels added to the end of a link, after a ?, in the form name=value joined by &. They don't change the page the visitor sees. GA4 reads them and records the visit under the source, medium and campaign you wrote. (UTM stands for "Urchin Tracking Module," the old name of the tool Google bought to build Analytics.)
The five parameters
| Parameter | Question it answers | Examples |
|---|---|---|
utm_source | Who / where sent the visit? | google, instagram, facebook, flyer, whatsapp |
utm_medium | What type of channel? | cpc, paid_social, social, organic, email, qr |
utm_campaign | Which campaign / offer? | kis_bakimi_2026, fren_kampanya_ekim |
utm_content | Which ad, creative or link, to tell variants apart | video_a, carousel_b, bio_link |
utm_term | Which keyword (paid search), or any extra detail | fren_balata_degisimi |
Google's rule: always use at least source, medium and campaign. GA4 also understands utm_id (a campaign ID) and utm_source_platform; you'll see utm_id in the Meta example below. Google's free Campaign URL Builder (ga-dev-tools.google/campaign-url-builder) does the same job as the builder further down this page.
Naming rules
- All lowercase. GA4 treats
Instagramandinstagramas two different sources. - No spaces, no Turkish characters. Use
_or-. Writekis_bakimi, notKış Bakımı. Characters like ı, ş, ğ get encoded into unreadable strings like%C4%B1. - Use standard mediums so GA4's automatic "default channel group" sorts visits correctly:
cpcfor paid search,paid_socialfor paid social,socialfor unpaid posts,email,sms. GA4 has no default channel for print, soqrvisits show up as "Unassigned" in channel reports; that's fine, read them by source/medium instead. After a week, check in GA4 (Reports → Acquisition → Traffic acquisition) that your visits landed in the channel you expected. - Keep a shared "UTM log": one Google Sheet listing every tagged link, where it's used and when it was created. Everyone on the team copies names from it.
| Where the link lives | source | medium | campaign / content pattern |
|---|---|---|---|
| Instagram bio | instagram | social | profile / bio_link |
| Facebook page button | facebook | social | profile / page_button |
| Google Business Profile website button | google | organic | gbp_listing |
| Meta ads (Facebook/Instagram) | dynamic | paid_social | dynamic campaign and ad names |
| Flyer QR code | flyer | qr | kis_bakimi_2026 / one value per distribution spot |
| WhatsApp status or broadcast | whatsapp | social | month + topic, e.g. ekim_duyuru |
| SMS / email to customers | sms or newsletter | sms / email | month + topic |
| Google Ads | No manual UTMs. Auto-tagging handles it (see below). | ||
Examples for Kaya
Below, kayaotoservis.example stands in for Kaya's domain.
| Placement | Tagged link |
|---|---|
| Instagram bio | https://kayaotoservis.example/?utm_source=instagram&utm_medium=social&utm_campaign=profile&utm_content=bio_link |
| GBP "Website" button | https://kayaotoservis.example/?utm_source=google&utm_medium=organic&utm_campaign=gbp_listing |
| GBP appointment link | https://kayaotoservis.example/randevu?utm_source=google&utm_medium=organic&utm_campaign=gbp_appointment |
| Flyer QR code | https://kayaotoservis.example/kampanya?utm_source=flyer&utm_medium=qr&utm_campaign=kis_bakimi_2026&utm_content=sanayi_dagitim |
| WhatsApp status | https://kayaotoservis.example/?utm_source=whatsapp&utm_medium=social&utm_campaign=ekim_duyuru |
Clicks from your Google profile's Website button otherwise mix with ordinary organic Google traffic in GA4. Tagging that one link lets you see profile visitors on their own. utm_medium=organic keeps them in the Organic Search channel; some practitioners use utm_source=gbp instead. Pick one and stay consistent.
Generate the QR code from the full tagged link (or from a short link that redirects to it). Use a different utm_content for each place you hand flyers out (the sanayi industrial area, a petrol station, a car wash) to see which spot works.
Meta ads: dynamic parameters
Meta can fill in the campaign and ad names for you. In each ad, find the URL parameters field (under the website link, not inside the Website URL box itself) and paste:
utm_source={{site_source_name}}&utm_medium=paid_social&utm_campaign={{campaign.name}}&utm_content={{ad.name}}&utm_id={{campaign.id}}
Meta swaps each {{…}} for the real value when someone clicks. {{site_source_name}} becomes fb, ig, msg (Messenger) or an (Audience Network). Other options: {{adset.name}}, {{adset.id}}, {{ad.id}}. IDs survive if you rename a campaign; names are readable. Using both is the safe choice.
Because Meta copies your campaign and ad names into reports, give them a readable pattern: 2026-10_kis-bakimi_istanbul_video-a (date, offer, area, creative). Lowercase, no Turkish characters, no spaces.
Google Ads: auto-tagging, not UTMs
Auto-tagging makes Google Ads add a gclid (Google Click ID) to your landing page link on every ad click. It is on by default for new accounts. When Google Ads and GA4 are linked, GA4 uses the gclid to show the exact campaign, ad group and keyword. In GA4, auto-tagging takes priority over manual UTMs.
Adding manual UTMs to Google Ads on top of auto-tagging, or using website redirects that strip the gclid from the link. Keep auto-tagging on, link Ads to GA4 (Module 05), and leave the gclid alone. You will need it again in Module 08.
UTMs on internal links (a link from your homepage to your own randevu page). A UTM restarts the visit with a new source, so the person who came from a Google ad suddenly "comes from" your homepage. Only tag links that live outside your site.
Fill in the fields; the tagged link updates as you type. Values are lowercased, spaces become hyphens and special characters are encoded. Prefilled with Kaya's Google Business Profile link.
The builder also turns Turkish letters into plain ones (ı→i, ş→s, ğ→g, ç→c, ö→o, ü→u), so Kış Bakımı becomes kis-bakimi. Do the same by hand when you type names anywhere else, including campaign and ad names in Meta.
Your colleague tags the Instagram bio with utm_source=Instagram and you tag stories with utm_source=instagram. What happens in GA4?
GA4 shows two separate sources, "Instagram" and "instagram," and splits your numbers between them. Always use lowercase and copy names from the shared UTM log.
Should you add utm_source=google&utm_medium=cpc to your Google Ads links?
No. Keep auto-tagging on; it adds a gclid that GA4 reads (and that takes priority over manual tags). Manual UTMs on Google Ads add nothing and can cause confusion.
Where do Meta's dynamic parameters like {{campaign.name}} go?
In the ad's URL parameters field, not inside the Website URL. Meta replaces them with the real values on each click.
Setting up GA4 (with GTM)
- How GA4 is organised: account, property, data stream
- The day-one settings beginners forget: data retention, internal traffic, links
- What enhanced measurement tracks automatically, and what it misses
- How to check that data is actually arriving
GA4 records what people do on your website. It is free and it is the hub most other tools connect to, so set it up first.
Step by step
- Create the account and property. At analytics.google.com, sign in with the business's Google account and create an account ("Kaya Oto Servis") and a property. Set the time zone to Türkiye and the currency to Turkish lira (TRY) so days and revenue match your books.
- Add a web data stream. Choose "Web," enter your site address, and keep enhanced measurement switched on. Copy the Measurement ID (G-…).
- Install it through GTM. Create a GTM container at tagmanager.google.com (one container per site) and install its code on every page; on WordPress, a GTM plugin does this. In GTM, add a Google tag with your Measurement ID, firing on all pages. Click Preview, browse your site, then Publish.
- Set data retention to 14 months. Admin → Data collection and modification → Data retention. GA4 keeps detailed event data for only 2 months by default. The setting is not retroactive: data older than 2 months at the time you change it is already gone. It affects Explorations (custom analyses), not the standard reports.
- Filter out your own visits. Admin → Data streams → your stream → Configure tag settings → Define internal traffic: add the shop's office IP address. Then in Admin → Data filters, switch the "Internal traffic" filter from Testing to Active. Otherwise every time the admin checks the price page, it counts as a visitor.
- Link Google Ads. Admin → Product links → Google Ads links. This lets GA4 read the gclid and show campaign details, and lets Google Ads import your key events (Module 07).
- Link Search Console. Admin → Product links → Search Console links. You need Editor rights in GA4 and to be a verified owner in Search Console. It adds two reports, "Google Organic Search Queries" and "Google Organic Search Traffic"; data arrives about 48 hours later. One property links to one Search Console site.
- Check data is arriving. Open Reports → Realtime and visit your own site from a phone on mobile data (not the office Wi-Fi, which you just filtered out). For detailed testing, GTM Preview mode also opens GA4's DebugView (Admin → DebugView), which shows each event as it arrives.
An IP address is the network address your internet connection uses. Search "what is my IP" on the shop computer to see it. Many Turkish home and office lines change IP from time to time, so check it again if your own visits start showing up.
What enhanced measurement gives you for free
With enhanced measurement on, GA4 records these events without any setup:
| Event | What it records | Trust it for… |
|---|---|---|
page_view | Each page load | Yes |
scroll | Visitor reached 90% of the page | Micro conversion |
click (outbound) | Clicks to other websites | Rough only |
view_search_results | Searches on your site | Yes |
form_start, form_submit | Form interactions | Not as a lead count |
video_start etc. | Embedded YouTube video engagement | Yes |
file_download | Downloads of PDFs and other files | Yes |
Automatic form tracking is unreliable: it can fire on search boxes and on failed submissions, and it misses many modern forms that send without reloading the page. And enhanced measurement does not track taps on phone (tel:) or email (mailto:) links. Module 06 sets these up properly in GTM.
Key events: mark only the macros
When an event has arrived at least once, it appears in Admin → Events (or Data display → Events). Mark only your macro events from Module 01 as key events: phone_click, whatsapp_click, generate_lead, and optionally directions_click. You can also create a key event in advance by typing its exact name.
Marking page views or scrolls as key events. If those flow into Google Ads as conversions, the automatic bidding will hunt for people who scroll, not people who call. Keep the key event list short.
An engaged session is a visit that lasted more than 10 seconds, or had a key event, or had 2 or more page views. Engagement rate is engaged sessions ÷ all sessions. Bounce rate is the opposite share.
On day one the admin sets the time zone and TRY, keeps enhanced measurement on, changes retention to 14 months, filters the office IP, and links Google Ads and Search Console. Total time: about an hour. Nothing is marked as a key event yet, because the phone, WhatsApp and form events don't exist until Module 06.
You set up GA4 in January and only change data retention to 14 months in June. Can you analyse January in Explorations?
No. The change isn't retroactive. With the default 2 months, detailed data from January was already deleted by June. Standard reports still show aggregate numbers, but Explorations can't.
Why shouldn't you use GA4's automatic form_submit as your lead count?
It can fire on search boxes and failed submissions and misses forms that send without a page reload. A thank-you page or a form plugin's success event is more reliable.
What does linking Search Console to GA4 add?
Reports on organic Google search: the queries and landing pages that brought free search traffic ("Google Organic Search Queries" and "Google Organic Search Traffic"), with about a 48-hour delay.
Tracking each customer action
- GTM recipes for phone taps, WhatsApp clicks, forms and "get directions" links
- How to count direction requests and calls that happen on Google, not on your site
- How to track phone calls in Türkiye, where Google's call forwarding numbers aren't available
- What each number really means (a tap is not a call)
A car repair customer rarely "buys online." They tap the phone number, send a WhatsApp message, fill a short booking form, or ask Google Maps for directions and drive over. Each of those needs its own tracking. This module goes through them one by one, then sums them up in a table.
1 · Website visits and clicks
Google Ads and Meta count clicks on the ad. GA4 counts sessions on your site. Expect fewer sessions than clicks: some people leave before the page loads, some block cookies, and some decline your cookie banner (Module 10). In Kaya's illustrative funnel, 600 clicks became about 540 sessions. Clicks from your Google profile appear in GBP Performance as "Website clicks," and in GA4 under the UTM you added in Module 04.
2 · Phone taps (tel: links)
A tel: link is a phone number written as a link, like <a href="tel:+902160000000">. On a phone, tapping it opens the dialler with the number filled in. Ask your web developer to make every phone number on the site a tel: link; it helps customers and makes tracking possible.
The GTM recipe:
- Turn on click variables. GTM → Variables → Configure → tick all the Clicks built-in variables (Click URL, Click Text and the others).
- Create the trigger. Triggers → New → Click – Just Links → "Some link clicks" → Click URL starts with
tel:. Name it "Click – tel". - Create the tag. Tags → New → Google Analytics: GA4 Event. Event name
phone_click; add a parameterlink_url={{Click URL}}. Fire it on the "Click – tel" trigger. - Test. Click Preview, tap the phone number on your site, and check that the tag shows as "fired" in GTM and that
phone_clickappears in GA4 DebugView. Then Publish. - Mark it as a key event in GA4 once it appears in the events list (Module 05).
Written out as settings, the trigger and tag look like this:
TRIGGER "Click – tel"
Type: Click – Just Links
Fires on: Some Link Clicks
Condition: Click URL starts with tel:
TAG "GA4 – phone_click"
Type: Google Analytics: GA4 Event
Event name: phone_click
Parameter: link_url = {{Click URL}}
Trigger: Click – tel
In plain words: "When someone clicks a link whose address starts with tel:, send GA4 an event called phone_click and note which number they tapped."
This counts taps on the number, not completed calls. Some people tap and hang up; desktop visitors often read the number and dial it by hand, which is never tracked. Treat phone_click as a strong signal, and count real calls in your lead sheet (Module 08).
3 · WhatsApp clicks (wa.me links)
Same recipe, different trigger and event name:
TRIGGER "Click – WhatsApp"
Type: Click – Just Links
Fires on: Some Link Clicks
Condition: Click URL matches RegEx wa\.me|api\.whatsapp\.com|web\.whatsapp\.com
TAG "GA4 – whatsapp_click"
Type: Google Analytics: GA4 Event
Event name: whatsapp_click
Parameter: link_url = {{Click URL}}
Trigger: Click – WhatsApp
In plain words: "If the clicked link goes to any of WhatsApp's three web addresses, send whatsapp_click." (The "RegEx" condition lets one rule match several addresses; the | means "or" and \. means a real dot.) Mark whatsapp_click as a key event, and send the Meta Contact event on the same trigger (Module 07).
Many floating WhatsApp buttons come from third-party widgets that sit inside an iframe (a page within the page). GTM can't see clicks inside it. Buttons that aren't real links may need GTM's "All Elements" click trigger instead. Test in Preview: if nothing fires when you tap the button, this is why. The simplest fix is a plain link to https://wa.me/90XXXXXXXXXX.
And again: a click is not a message. Someone can open WhatsApp and never press send. Count real chats in WhatsApp Business; its labels (e.g. "Yeni müşteri – reklam," "Randevu verildi," "İş tamamlandı") make the weekly count quick.
4 · Booking and quote forms
Methods ranked from most to least reliable:
- Thank-you page. After the form is sent, the site shows a separate page such as
/tesekkurler. In GTM, a Page View trigger where Page Path starts with/tesekkurlerfires a GA4 eventgenerate_lead. Simple and robust. ("Starts with" rather than "equals" because WordPress usually adds a trailing slash:/tesekkurler/.) - The form plugin's own success event (a "dataLayer push"). Many WordPress form plugins offer this; ask the developer.
- GTM's Form Submission trigger, which only works with standard HTML forms.
- Enhanced measurement's
form_submit: not recommended as a key event (Module 05).
TRIGGER "Page – thank you"
Type: Page View
Fires on: Some Page Views
Condition: Page Path starts with /tesekkurler
TAG "GA4 – generate_lead"
Type: Google Analytics: GA4 Event
Event name: generate_lead
Parameter: form_name = randevu
Trigger: Page – thank you
If people can reach /tesekkurler without sending the form (from a search engine or a bookmark), you'll count fake leads. Ask the developer to keep the page out of search results (a "noindex" setting) and don't link to it from menus.
Ask the developer to add hidden fields to the form that store the visitor's gclid and UTM values. Each lead then arrives with its source attached, which you need for Module 08.
5 · Direction requests
Most direction requests happen on Google Maps, not on your website.
- GBP Performance → Directions: how many people asked Google for a route to you. Google adjusts it for repeat taps, cancellations and spam. Free; look at it monthly.
- Google Ads local actions: if your ads use a location asset (your address, linked from GBP), Google Ads automatically creates conversions for directions, clicks to call, website visits and other engagements from your listing. Useful to see ad-driven direction requests; but they are soft signals, so think twice before using them as main bidding goals.
- On your website: a "Yol tarifi al" (get directions) link to Google Maps is tracked like a phone tap. Trigger: Click URL matches RegEx
google\.com/maps|maps\.app\.goo\.gl|goo\.gl/maps; eventdirections_click. (Use one RegEx rule: separate conditions in one GTM trigger must all be true, so two "contains" lines would never fire.)
A direction request is not a visit. And GBP "Calls" counts taps on the call button, not completed calls. Both are useful trends, not customer counts. GBP numbers also include activity driven by your Google Ads, so they aren't purely "free" results.
6 · Phone calls in Türkiye
In many countries, Google Ads can show a special Google forwarding number in your ads and on your site, record each call's length, and count calls over, say, 60 seconds as conversions. Türkiye is not on the list of countries where Google forwarding numbers are available. So two features don't work for a Turkish shop:
- Call reporting (call length, time, caller area code), and
- Website call conversions (Google swapping the number on your website to track calls).
What still works: call assets (your number shown in the ad) and location assets. Without forwarding numbers, Google's "calls from ads" conversions are based on taps on the call button, not real call length. Plus your own tel: tracking from step 2. Google's country list can change, so check it in Google Ads Help before you set up.
One number per channel: get two or three extra virtual numbers from a Turkish cloud phone system (bulut santral / sanal santral) provider, and use one only in Google Ads, one only on Meta and Instagram, one only on flyers. The phone system's call log then tells you calls per channel. Ask every caller "Bizi nereden duydunuz?" ("Where did you hear about us?") with a fixed list of answers. US call-tracking services such as CallRail don't serve Türkiye; some Turkish providers advertise dynamic call-tracking numbers, but check carefully that the product is current and integrates with GA4 before you pay.
Kaya's two service advisors answer the phone. They open the lead sheet on the reception tablet, ask "Bizi nereden duydunuz?" at the end of every first call, and pick from a dropdown: Google ad · Google Maps · Instagram ad · Instagram post · Flyer · Friend/referral · Regular customer · Other. Kaya also puts a separate virtual number on its Google ads. Two minutes a call; it gives the owner more truth than any dashboard.
Summary: action → tracking → where it shows
| Customer action | How to track it | Where you see it | What it really means |
|---|---|---|---|
| Clicked the ad | Built in | Google Ads, Meta Ads Manager | An ad click |
| Visited the site | GA4 Google tag + UTMs / auto-tagging | GA4 Traffic acquisition | A session (fewer than clicks) |
| Tapped the phone number on the site | GTM tel: trigger → phone_click | GA4, Google Ads, Meta (Contact) | A tap, not a call |
| Tapped call in a Google ad | Call asset | Google Ads (calls from ads) | A tap (no forwarding numbers in TR) |
| Tapped call on the Google profile | Built in | GBP Performance → Calls | A tap |
| Clicked WhatsApp on the site | GTM wa.me trigger → whatsapp_click | GA4, Google Ads, Meta (Contact) | Opened WhatsApp |
| Started a chat from a click-to-WhatsApp ad | Built in | Meta Ads Manager (conversations) | A chat started |
| Sent the booking form | Thank-you page → generate_lead | GA4, Google Ads, Meta (Lead/Schedule) | A real lead |
| Asked for directions on Maps | Built in; location asset for ads | GBP Performance; Google Ads local actions | Interest, not a visit |
| Clicked "Yol tarifi al" on the site | GTM maps-link trigger → directions_click | GA4 | Interest, not a visit |
| Called (any route) | Number per channel + "Bizi nereden duydunuz?" | Phone system log, lead sheet | A real call |
| Became a paying customer | Lead sheet "became customer?" + invoice | Lead sheet → offline import (Module 08) | The result |
Add a campaign code (kampanya kodu) to flyers and offers, such as "EKIM10." When a customer mentions it at the counter, you know exactly where they came from, with no technology at all.
Your GTM WhatsApp trigger fires in Preview when you tap a text link, but not when you tap the floating green button. What is the likely cause?
The floating button is probably a third-party widget inside an iframe (or not a real link), so GTM can't see the click. Replace it with a plain wa.me link, or use an "All Elements" trigger if it isn't in an iframe.
Why can't Kaya use Google Ads call reporting to count calls longer than 60 seconds?
Call reporting depends on Google forwarding numbers, which are not available in Türkiye. Kaya counts call-button taps instead, and uses separate numbers per channel plus "Bizi nereden duydunuz?" for real calls.
Which form-tracking method is the most reliable for a beginner?
A thank-you page (e.g. /tesekkurler) shown only after a successful submission, with a GTM Page View trigger firing generate_lead.
Google Ads and Meta conversion tracking
- Why ad platforms need conversion data, not just GA4
- Google Ads conversion actions, GA4 import, and enhanced conversions
- Meta Pixel, Conversions API, standard events and how to test them
- How to avoid counting the same lead twice
GA4 tells you what happened. The ad platforms need to know too, for two reasons: so their reports show which ads produced leads, and so their automatic bidding (Google's Smart Bidding, Meta's delivery system) learns which people to find more of. If you tell them nothing, they optimise for clicks.
A conversion action (Google Ads) or event (Meta) is a named action the platform counts, such as "Form – randevu" or Lead. Primary conversions in Google Ads are counted in the "Conversions" column and used for bidding; secondary ones are reported only.
Google Ads
The conversion actions Kaya needs
- Calls from ads, via the call asset (counted as call-button taps in Türkiye, Module 06).
- Phone taps on the website (
phone_click). - Booking form sent (
generate_lead). - WhatsApp clicks on the website (
whatsapp_click). - Directions, from the website link or the location asset; optional, as a secondary action.
- Later: paying customers, uploaded offline (Module 08).
Two ways to feed website conversions in
A · Import GA4 key events
Link GA4 and Google Ads (done in Module 05), then in Google Ads go to Goals → Conversions → New → Import → Google Analytics 4 and pick your key events. One setup, one place to maintain. Simplest for a beginner.
B · Google Ads conversion tag
Create a website conversion action in Google Ads and fire its tag from GTM on the same triggers as your GA4 events. Data arrives in Ads a little more directly, and it is the base for enhanced conversions.
Using both A and B for the same action and leaving both as Primary. Every form is then counted twice, and bidding thinks you get double the leads. If you use both, set one to Secondary.
Enhanced conversions send hashed (scrambled one-way) contact data that the customer typed into your form, such as email or phone, along with the conversion. Google matches it to signed-in Google users, so conversions are still counted when cookies are lost. Enhanced conversions for leads uses the same matching to connect a later offline sale back to the ad (Module 08). Since April 2026, enhanced conversions for web and for leads share a single on/off setting in Google Ads.
Turn enhanced conversions on in Google Ads (Goals → Settings, or in the conversion action) and follow the setup it offers for your tag. Collect only data your form already asks for, and make sure your privacy notice covers it (Module 10).
Check that Google Ads conversions run on the same tag via GTM that your consent banner controls (Module 10), and use Google's Tag Assistant (tagassistant.google.com) to see which Google tags fire on a page.
Meta (Facebook, Instagram, WhatsApp ads)
Meta Pixel
Browser code on your website. Install it through Events Manager's guided setup, a WordPress/CMS integration, or GTM. It fires events like Contact when someone taps WhatsApp.
Conversions API (CAPI)
Sends the same events from your server to Meta. Fewer events are lost to ad blockers, iOS privacy settings and Safari. Many site builders and plugins offer a one-click integration.
Run the Pixel and CAPI together. Because the same event then arrives twice, Meta deduplicates it: both copies carry the same event name and the same event_id, and Meta keeps one. Good plugins and the guided setup handle this for you. In Events Manager, check Event Match Quality: a higher score means Meta can match more events to real accounts, and sending hashed email or phone improves it.
Meta standard events for a car repair shop
| Event | Meaning (Meta's definition, paraphrased) | Kaya fires it when… |
|---|---|---|
Contact | Person starts contact by phone, SMS, email or chat | Tap on phone number or WhatsApp button |
Lead | Person submits their details, expecting to be contacted | Booking/quote form sent (thank-you page) |
Schedule | Person books an appointment to visit a location | Online appointment booked (if the form books a slot) |
FindLocation | Person searches for your location | "Yol tarifi al" clicked |
ViewContent | A key page is viewed | Price or service page viewed (micro) |
Purchase | A purchase is completed, with value | Paid job, sent back later via CAPI (Module 08) |
Test before you trust
- In Events Manager, open your dataset (pixel) → Test events.
- Enter your website address and open the site from there (on a computer or your phone).
- Tap the phone number, the WhatsApp button, send a test form. Each event should appear within seconds, marked as received from the browser, the server, or both (deduplicated).
- Delete your test form entry from the lead sheet so it isn't counted as a lead.
For click-to-WhatsApp ads, Meta counts "conversations started" without any Pixel; the chat happens in WhatsApp, not on your site. What happens after the chat starts (appointment, paid job) is invisible to Meta unless you tell it, which is the next module's job. Since 2025, Meta also reports landing page views without a Pixel, and the old "Aggregated Event Measurement" tab where you ranked 8 events is gone; there is nothing to configure there.
A dataset is Meta's current name for the container in Events Manager that holds your Pixel, CAPI and offline events together. Older tutorials call it "the pixel."
Kaya imports phone_click, whatsapp_click and generate_lead from GA4 as primary conversions in Google Ads, and keeps local actions (directions) as secondary. On Meta, its WordPress plugin installs the Pixel and CAPI together; GTM sends Contact on phone and WhatsApp taps and Lead on the thank-you page. The admin runs Test events after every website update.
Kaya imports generate_lead from GA4 and also fires a Google Ads conversion tag on the same thank-you page. Both are Primary. What goes wrong?
Each form is counted twice in the Conversions column, and Smart Bidding thinks leads are twice as frequent as they are. Make one of them Secondary.
Why run Meta CAPI as well as the Pixel, and how does Meta avoid counting events twice?
CAPI sends events from the server, so fewer are lost to blockers and iOS/Safari limits. Meta deduplicates using the same event name and event_id on the browser and server copies.
Which Meta standard event fits a tap on the WhatsApp button on Kaya's website?
Contact: a person starts contact by phone, SMS, email or chat.
From lead to paying customer
- How to design a simple lead sheet that every staff member can fill in
- How "closing the loop" turns lead counts into customer counts
- The basics of sending paying-customer data back to Google Ads and Meta
- When to start, and what to check first
Everything so far counts leads. But a lead is not a customer: some callers only want a price, some book and don't show up. To know what ads really earn, you have to record what happens after the call or chat. This is called closing the loop.
The lead sheet
Every lead, whatever its route (call, WhatsApp, form, walk-in), goes into one Google Sheet or simple CRM (customer relationship management software). The columns:
| Date | Name | Phone | Channel | Source | Campaign | Service | Quote ₺ | Customer? | Invoice ₺ | gclid |
|---|---|---|---|---|---|---|---|---|---|---|
| 06.10 | A. Y. | 05xx… | Call | Google ad | fren_ekim | Brakes | 3,200 | Yes | 3,450 | — |
| 06.10 | S. K. | 05xx… | Instagram ad | kis_bakimi_2026 | Maintenance | 4,500 | Booked | — | ||
| 07.10 | M. D. | 05xx… | Form | Google ad | kis_bakimi_2026 | Timing belt | 9,800 | Yes | 9,800 | Cj0K… |
| 07.10 | E. T. | 05xx… | Call | Google Maps | — | A/C | 1,800 | No | — | |
| 08.10 | B. A. | 05xx… | Walk-in | Regular | — | Tyre change | 800 | Yes | 800 | — |
Mock rows; names abbreviated, all values illustrative. Scroll sideways on a phone.
- Channel = how they contacted you (call, WhatsApp, form, walk-in).
- Source = where they heard about you, from "Bizi nereden duydunuz?" or the form's hidden UTM fields. Use a dropdown with fixed answers so no one types "insta," "IG" and "Instagram" for the same thing.
- Customer? = No / Booked / Yes. Update it when the job is done and paid.
- gclid = the Google click ID from the form's hidden field (Module 06), if the lead came through a Google ad and a form. Needed only for the classic Google upload below.
Add a "Returning?" column (Yes/No). It lets you see how many ad-won customers come back, which is the lifetime value from Module 02.
Names and phone numbers are personal data under KVKK, Türkiye's data protection law. Restrict who can open the sheet, don't share it by public link, and keep it only as long as you need it. Module 10 covers consent before any of this data goes to Google or Meta.
Level 1: the manual loop (everyone)
Once a week, filter the sheet by source and count: leads, booked, paid, revenue. Divide each platform's spend by its paid customers to get cost per customer by source. This needs no technology beyond the sheet, and it is the number the owner cares about.
Illustrative week: Instagram ads brought 30 WhatsApp chats → 9 appointments → 6 paid jobs. Meta spend that week was ₺2,400, so cost per paying customer from Instagram = ₺2,400 ÷ 6 = ₺400, close to the ₺500 limit in the measurement plan. Meta Ads Manager showed only "30 conversations started."
Level 2: send paying customers back to the platforms
Start this once tracking has run cleanly for 4–8 weeks and the sheet is filled in reliably, and only after the KVKK review in Module 10.
Google Ads
- Classic offline conversion import: capture the
gclidwith each lead (hidden form field). When the job is paid, upload a row with gclid, conversion name (e.g. "Paid job"), date/time and value. Auto-tagging must be on. - Enhanced conversions for leads (Google's current recommendation): instead of relying only on the gclid, Google matches the hashed email or phone number collected in your form. Google says it is easier and more durable than gclid-only import; it reports a median of about 10% more conversions (Google's own figure).
- How to upload: Google's help now points to Data Manager (inside Google Ads) as the easiest route; check whether your account also still offers a manual file or Google Sheet upload under Goals → Conversions. Developers: since 15 June 2026, offline and enhanced-conversions-for-leads uploads go through the Data Manager API; the old Google Ads API route is blocked. Menus change often, so follow the current Help page when you set this up.
Meta
- Meta's old standalone Offline Conversions API was discontinued on 14 May 2025. Offline events (like a paid job) now go through the regular Conversions API into your dataset, with an
action_sourcesuch asphysical_storeorsystem_generated, matched on hashed email or phone. - For click-to-WhatsApp leads, Meta's Conversions API for business messaging can report that a chat became a lead or a purchase (it uses a click ID,
ctwa_clid, attached to ad-originated messages). It requires the WhatsApp Business Platform (API, usually via a provider), not the free app, and events must be sent within 7 days. - Check in Events Manager whether a manual file upload of offline events is offered for your dataset; otherwise this needs a CRM integration or a developer.
Long sales cycles: a customer who chats on Monday and pays three weeks later may fall outside the platform's attribution window (Module 09), so the upload won't be credited to the ad. Your sheet still knows. Always reconcile platform numbers with the sheet.
GA4 can also receive a close_convert_lead event (Module 01), but for a beginner, uploading paid jobs to Google Ads is the more valuable step: it changes what Smart Bidding chases.
What is the difference between the "Channel" and "Source" columns in the lead sheet?
Channel is how the person contacted you (call, WhatsApp, form, walk-in). Source is where they heard about you (Google ad, Instagram ad, Maps, flyer, referral). A WhatsApp chat can come from an Instagram ad or from a flyer.
What does Google's "enhanced conversions for leads" match on, instead of only the gclid?
Hashed first-party contact data, such as the email or phone number the customer entered in your form.
Meta's Offline Conversions API was retired in May 2025. What replaces it?
The regular Conversions API, sending offline events (with an action_source like physical_store) into your dataset.
Attribution: who gets the credit?
- What attribution means and which models GA4 and Google Ads still offer
- Conversion windows, and click-through vs view-through
- Why Google, Meta and GA4 never agree, and why that's normal
- A practical stance: blended cost per customer
Customers rarely see one ad and call. A typical path: an Instagram ad on Monday, a Google search on Thursday, a call on Friday.
Attribution is the set of rules that decides which ad or channel gets the credit for a conversion when the customer touched several. An attribution model is the rule itself (e.g. "the last click gets everything"). A conversion window (or lookback window) is how many days after an ad interaction a conversion can still be credited to it.
The models you can choose
| Where | Models available | Windows (defaults) |
|---|---|---|
| GA4 | Data-driven (default: Google's machine learning splits credit based on observed paths), paid and organic last click, Google paid channels last click | Acquisition key events 30 days (or 7); other key events 90 days (or 30/60) |
| Google Ads | Data-driven and last click | Click 30 days (1–90); engaged-view 3 days; view-through 1 day |
| Meta | Attribution setting per ad set | 7-day click + 1-day engage-through + 1-day view |
First click, linear, time decay and position-based models were removed from GA4 and Google Ads in 2023; Google cited under 3% usage. Old tutorials still mention them.
Click-through
The person clicked the ad, then converted within the window. On Meta, since 3 March 2026, only link clicks count here (website, call, message, lead-form clicks).
View-through / engage-through
The person only saw the ad (view) or liked, commented, shared, saved or watched it (engage-through, 1 day on Meta) and converted later. Possible influence, hard to prove. For a garage, treat these with caution.
One customer, three different stories
Why the numbers disagree
- Each platform credits itself. Meta and Google can both claim the same booking.
- Different windows and models (7-day click on Meta, 30-day click on Google Ads, data-driven in GA4).
- Different dates. Google Ads reports a conversion on the date of the ad click; GA4 on the date the conversion happened. A Thursday click and Friday call land on different days.
- View-through and modelled conversions. Ad platforms count view-throughs that GA4 never sees, and each tool estimates ("models") conversions from people who declined cookies in its own way.
- Reporting delays of 24–48 hours or more.
- Double counting if both the Google Ads tag and an imported GA4 key event are Primary for the same action (Module 07).
A practical stance for a small business
- Never add up platform conversions. Google says 40 and Meta says 30 does not mean 70 leads.
- Use the blended number. Total ad spend across all platforms ÷ total new paying customers (from the lead sheet) = blended cost per customer. This is the number the owner should see first.
- Compare weekly. If ads report 60 leads but the sheet shows 25 new customers, trust the sheet and find out why (spam forms, wrong numbers, slow replies).
- Test incrementality simply. In a normal season, pause one channel for 2–3 weeks, or run it only in some districts, and watch whether total bookings drop. Brand-name search ads in particular often look better than they are, because people searching your name would have found you anyway.
Illustrative month: Google Ads ₺6,000 + Meta ₺4,000 = ₺10,000 total. Google reports 38 conversions, Meta 31 (69 "total"). The lead sheet shows 52 real leads and 26 new paying customers from ads. Blended cost per customer = ₺10,000 ÷ 26 ≈ ₺385, inside the ₺500 target. That one line goes at the top of the owner's report.
Keep Meta on its default attribution setting while you learn. Meta's "Compare attribution settings" view in Ads Manager shows conversions by window without changing delivery, which helps when you want to see how many were view-through.
Which attribution models remain in GA4 and Google Ads?
Data-driven and last click (GA4 offers two last-click variants: paid and organic, and Google paid channels). First click, linear, time decay and position-based were removed in 2023.
A customer clicks a Google ad on 30 September and books on 2 October. On which date does each tool report the conversion?
Google Ads: 30 September (the click date). GA4: 2 October (the conversion date). Monthly totals can differ for this reason alone.
What is "blended cost per customer" and why use it?
Total ad spend across all platforms divided by total new paying customers from your own records. It avoids double counting between platforms and measures what the owner actually cares about.
Privacy and consent in Türkiye
- What KVKK's cookie guide requires from your website banner
- How Google Consent Mode v2 connects the banner to your tags
- Why uploading customer lists counts as a transfer of data abroad
- İYS rules for SMS and email, and why some data always goes missing
This module summarises published guidance and law-firm summaries so you know what questions to ask. Rules and penalties change. Before you collect or upload customer data, talk to a KVKK consultant or lawyer, and ask your accountant (mali müşavir) about anything tax-related.
KVKK and cookies
KVKK is Türkiye's personal data protection law (Law No. 6698) and also the short name of the authority that enforces it (Kişisel Verileri Koruma Kurumu). Açık rıza means explicit consent: a clear, active "yes" for a specific purpose. An aydınlatma metni is the information notice that tells people what you collect and why.
KVKK published a draft guide on cookies (Çerez Uygulamaları Hakkında Rehber) in 2022, announced the final guide in late 2024, and published an updated version in July 2025. In practice, according to law-firm summaries of the guide:
- No consent needed for cookies strictly needed to transmit the communication or to provide a service the user asked for (a login session, a shopping cart).
- Explicit consent before setting analytics, advertising/marketing and remarketing cookies. That covers GA4, the Google Ads tag, the Meta Pixel and Microsoft Clarity.
- The banner offers Accept all, Reject all and Preferences with equal prominence; no pre-ticked boxes; consent is an active opt-in, can be withdrawn at any time, and the design avoids "dark patterns" (tricks that push people to accept).
- A separate cookie policy / aydınlatma metni is required.
Google Consent Mode v2
Consent Mode passes the visitor's banner choice to Google tags through four signals: ad_storage, analytics_storage, ad_user_data and ad_personalization (the last two were added in v2).
Basic mode
Google tags don't load at all until the visitor consents. Simple and strict; no data from people who decline.
Advanced mode
Tags load with "denied" defaults and send cookieless pings, which lets Google model (estimate) conversions from people who declined.
Since March 2024, Google requires Consent Mode for advertisers using its measurement and remarketing for users in the EEA (plus the UK and Switzerland). Türkiye is not in the EEA, so that enforcement doesn't directly cover Turkish visitors. But KVKK already requires consent for these cookies, so you need a banner anyway, and Consent Mode is the standard way to make Google tags obey it. Any visitors from the EEA (tourists, expats) fall under Google's EEA rule.
Use a Google-certified consent management platform (CMP) that supports Consent Mode v2 and has a GTM template. Set every default to denied, then test: open the site in a private window, click Reject all, and confirm in GTM Preview that marketing tags don't fire with cookies. Install the CMP before marketing tags go live.
A CMP (consent management platform) is the service that shows your cookie banner, stores each visitor's choice and passes it to your tags.
Customer data, uploads and transfers abroad
GA4, the Meta Pixel and CAPI, and any customer list upload (Google Customer Match, Meta custom audiences, offline conversion imports from Module 08) send personal data to companies abroad. Under KVKK Article 9, as amended by Law 7499 from 1 June 2024, transfers abroad rely on an adequacy decision (none issued yet, per the source used here), standard contracts (which must be notified to the Authority within 5 business days of signing), or, only for occasional transfers, explicit consent. Hashing the email or phone before upload doesn't by itself make it non-personal data.
On 21 July 2026, KVKK announced that obtaining data from third parties (for example, bought lists) does not by itself give you the right to use it for advertising: people must first be informed and then, where needed, give explicit consent as a separate declaration; silence, or simply not hanging up or refusing, is not consent. Never buy phone or email lists. Keep consent records.
Kaya's booking form adds an aydınlatma metni link and a separate, unticked consent checkbox for marketing use. Before starting offline uploads, the owner asks the shop's KVKK consultant whether the notice and transfer basis cover sending hashed phone numbers to Google and Meta. Until then, Kaya uses the manual loop (Module 08, Level 1), which keeps the data in-house.
İYS for SMS and email
Commercial SMS, email and calls to consumers require prior consent, and the sender must be registered in İYS (İleti Yönetim Sistemi, the national message management system) under Law 6563, even for a single promotional SMS. Transactional messages ("your car is ready") are exempt. B2B recipients (registered tradespeople and merchants) don't need prior consent, but you still must be registered in İYS. Fines are per violation and the amounts change yearly; check the current figures. When you do send campaign messages, tag their links with utm_medium=sms or utm_medium=email (Module 04).
Data you will never see
Browser tags (GA4, the Pixel) lose events to iOS privacy settings, Safari's tracking prevention, ad blockers and declined consent. Expect GA4 to show fewer sessions than ad clicks. This is normal. Meta CAPI and Google's enhanced conversions recover part of it; your lead sheet catches the rest. Don't chase perfect numbers.
Later, not now. Server-side GTM moves tag processing to a server you control (e.g. on Google Cloud or a hosting service): better data quality and control, but it costs money and needs technical skills. Google tag gateway for advertisers serves Google tags through your own domain, with a near one-click setup on Cloudflare; it does not override consent choices and doesn't defeat every ad blocker. Both are nice-to-haves after the basics run cleanly.
Under KVKK's cookie guide, can Kaya's banner show only an "OK" button?
No. Analytics and advertising cookies need explicit, active consent. The banner needs Accept all, Reject all and Preferences with equal prominence, and no pre-ticked boxes.
What are the four Consent Mode v2 signals?
ad_storage, analytics_storage, ad_user_data and ad_personalization.
Does hashing customer phone numbers before uploading them to Meta remove KVKK obligations?
No. Hashing alone doesn't make the data non-personal, and the upload is a transfer abroad. Get advice on your notice, consent and transfer basis first.
Dashboards and the reporting routine
- A one-page dashboard layout that answers the owner's questions first
- A 15-minute weekly check and a one-hour monthly review
- How to judge whether a campaign works, and when you have too little data to tell
- How to run simple tests without fooling yourself
Tracking is only useful if someone looks at it on a fixed day and makes decisions. This module gives you the layout and the routine.
The dashboard layout
Build it in Data Studio (free; formerly Looker Studio). It connects natively to GA4, Google Ads and Search Console. Meta data and your lead sheet come in through a Google Sheet: either copy Meta's numbers in by hand each week, or use a paid connector. Arrange it top-down, from money to detail:
- Scorecards: ad spend · leads · CPL · new customers · cost per customer · revenue · ROAS.
- Leads by week, one line per channel.
- Campaign table: campaign · spend · clicks · leads · CPL · customers · cost per customer.
- Lead type breakdown: phone / WhatsApp / form / directions.
- GBP actions and organic search trends (GBP Performance, Search Console).
| Campaign | Spend | Clicks | Leads | CPL | Cust. | ₺/cust. |
|---|---|---|---|---|---|---|
| Google · fren (brakes) | ₺3,500 | 230 | 16 | ₺219 | 9 | ₺389 |
| Google · kış bakımı | ₺2,500 | 170 | 12 | ₺208 | 6 | ₺417 |
| Meta · WhatsApp · kış bakımı | ₺4,000 | 520 | 24 | ₺167 | 11 | ₺364 |
| Total | ₺10,000 | 920 | 52 | ₺192 | 26 | ₺385 |
All figures are made up for illustration, consistent with Kaya's examples in Module 09 (₺10,000 spend, 26 customers, ₺4,000 average ticket).
A scorecard is a dashboard tile showing one number, often with the change from the previous period. A connector is what pulls data from a source (GA4, a Sheet) into Data Studio.
The routine
Weekly · Monday, 15–20 min
Monthly · 1 hour
Ticks are saved in this browser only, so you can use the list as a reusable checklist (untick to reset).
How to judge if a campaign works
- Primary test: cost per paying customer is at or below what you can afford (from margin and lifetime value, Module 02), and total bookings are rising compared with the same period before.
- Secondary: CPL and lead quality (close rate). A cheap CPL with a 10% close rate can be worse than an expensive CPL with a 60% close rate.
- Diagnostic signals: CTR, CPC and engagement rate explain why something works or not. They don't tell you whether it works.
In the mock dashboard, the Meta WhatsApp campaign has the cheapest CPL (₺167) and the cheapest customer (₺364). The Google kış bakımı campaign costs ₺417 per customer: still under the ₺500 limit, so "fix" (try a new ad text), not "stop." But with 6 customers, a single extra job would move that number a lot, which brings us to the next point.
Small numbers lie
- With a few dozen leads a month, one good or bad week swings CPL a lot. Don't judge an ad on 3 leads.
- Rule of thumb (not a statistical standard): wait at least about 2 weeks and several dozen clicks, or 10+ leads per variant, before deciding.
- New campaigns and edits trigger platform learning phases, which make the first days noisy. Avoid daily changes.
- Seasonality matters a lot for garages (winter tyres, pre-holiday checks before bayram trips). Compare like with like: this November with last November, not with October.
Pausing an ad after two days because "it got no calls." Two days of a small local budget is far too little data. Let it run, and fix tracking first if a key event shows zero.
Testing without fooling yourself
- Test one thing at a time: headline, image, offer, or landing page.
- Tell variants apart with
utm_contentand clear ad names (Module 04). - Keep a test log and a change log in the same sheet: date, what changed, result, decision. When a chart jumps, the log explains why (a theme update, a new offer, a price change).
Campaign A: CPL ₺150, close rate 20%. Campaign B: CPL ₺300, close rate 60%. Which costs less per paying customer?
A: ₺150 ÷ 0.20 = ₺750 per customer. B: ₺300 ÷ 0.60 = ₺500 per customer. B is cheaper per customer despite the higher CPL.
On Monday, whatsapp_click shows zero for last week, after 15–20 a week before. What do you check first?
Tracking health: open GTM Preview and tap the WhatsApp button. A sudden zero usually means a website change broke the trigger (a new widget or theme), not that interest vanished. Compare with WhatsApp Business chats in the lead sheet.
Why compare November with last November rather than with October?
Car repair demand is seasonal (winter tyres, maintenance before winter and holidays). Comparing different seasons mixes the ad effect with the season effect.
The setup order checklist
- The order to set everything up so that nothing depends on a later step
- Which module explains each step
Work through this list in order. Ticks are saved in your browser, so you can come back over several days. The first two steps need no technology at all.
Kaya's admin did steps 1–2 on a Monday morning, steps 3–8 over two afternoons with the web developer on the phone, and launched the first Google and Meta campaigns only after Test events and DebugView showed every event arriving. Offline uploads waited until week seven.
Why does the consent banner come before the Google tag and the Meta Pixel?
Under KVKK, analytics and advertising cookies need explicit consent before they're set. If the tags go live first, they collect data without consent until the banner arrives.
Which two steps need no technology and can start today?
Writing the measurement plan and creating the lead sheet (with "Bizi nereden duydunuz?").
Common mistakes
Thirteen ways beginners waste money or fool themselves, with the module that prevents each one.
| # | Mistake | Fix |
|---|---|---|
| 1 | Launching ads before tracking works | Plan + lead sheet + key events first (01, 12) |
| 2 | Leaving GA4 data retention at 2 months | Change to 14 months on day one (05) |
| 3 | Mixed-case or inconsistent UTMs (Instagram, instagram, IG) | Lowercase, a UTM log, the builder (04) |
| 4 | UTMs on internal links, or manual UTMs on Google Ads | Tag only outside links; keep auto-tagging (04) |
| 5 | Counting the same action twice (Ads tag + imported GA4 key event, both primary) | One primary per action (07) |
| 6 | Marking page views or scrolls as key events | Only macros are key events (01, 05) |
| 7 | Trusting enhanced-measurement form_submit as the lead count | Thank-you page → generate_lead (06) |
| 8 | Treating phone taps or GBP "Calls" as completed calls, and "Directions" as visits | Count real calls in the lead sheet (06, 08) |
| 9 | Adding up Google + Meta + GA4 conversions | Blended cost per customer (09) |
| 10 | No consent banner, an "Accept only" banner, or tags firing before consent | CMP with Consent Mode v2, defaults denied (10) |
| 11 | Not re-testing after website changes (a theme update can silently break triggers) | Weekly tracking-health check (11, 12) |
| 12 | Judging campaigns after 2–3 days or 3 leads | Wait ~2 weeks / 10+ leads per variant (11) |
| 13 | Ignoring the offline step, optimising for leads that never pay | Close the loop (08) |
Glossary
- Attribution
- Rules deciding which ad or channel gets credit for a conversion. GA4 and Google Ads offer data-driven and last click.
- Auto-tagging
- Google Ads adds a
gclidto ad clicks so GA4 and offline uploads can identify the click. Keep it on. - Blended cost per customer
- Total ad spend on all platforms ÷ new paying customers from your own records.
- Break-even ROAS
- 1 ÷ gross margin. The ROAS below which ads lose money on the first job.
- CAPI
- Meta Conversions API: sends events from your server to Meta, alongside the Pixel.
- CMP
- Consent management platform: shows the cookie banner, stores choices and passes them to tags.
- Consent Mode v2
- Google's way for tags to respect the banner, using four signals (
ad_storage,analytics_storage,ad_user_data,ad_personalization). - Conversion window
- How many days after an ad interaction a conversion can still be credited to it.
- CPL / CPA
- Cost per lead / per action: spend ÷ leads.
- CTR
- Click-through rate: clicks ÷ impressions × 100.
- Data Studio
- Google's free dashboard tool, called Looker Studio until April 2026.
- Dataset
- Meta's container in Events Manager for Pixel, CAPI and offline events.
- Enhanced conversions
- Google Ads feature that sends hashed form data (email/phone) to match conversions more reliably; "for leads" connects later offline sales.
- Engaged session
- A GA4 visit over 10 seconds, or with a key event, or with 2+ page views.
- Event / key event
- Any action GA4 records / an important one you mark (formerly "conversion").
- gclid
- Google Click ID, added to landing page links by auto-tagging.
- GTM
- Google Tag Manager: a container for tags, triggers and variables.
- İYS
- İleti Yönetim Sistemi: Türkiye's registry for commercial SMS, email and call consent.
- KVKK
- Türkiye's personal data protection law (No. 6698) and its authority.
- Lead sheet
- One shared sheet or CRM where every lead, its source and whether it paid is recorded.
- Macro / micro conversion
- An action that is almost a lead / a sign of interest before a lead.
- Measurement plan
- One page: goal → KPIs → events → tools.
- Offline conversion import
- Uploading "this lead paid" data to Google Ads or Meta.
- Pixel
- Meta's browser tag on your website.
- ROAS / ROI
- Revenue ÷ ad spend / (gross profit − ad spend) ÷ ad spend.
- Tag / trigger / variable
- In GTM: what to send / when to send it / details used by both.
- UTM parameters
- Labels on a link (source, medium, campaign, content, term) that tell GA4 where a visit came from.
- View-through
- A conversion after someone only saw (didn't click) an ad.
Sources
Paraphrased; checked October 2026. Platform menus and rules change often.
- Google Analytics Help: key events vs conversions
- Google Analytics Help: recommended events
- MeasureSchool: GA4 enhanced measurement
- Analytics Mania: track clicks with GA4 and GTM
- Google Analytics Help: engagement rate and bounce rate
- Nice Looking Data: GA4 data retention settings
- Google Analytics Help: Search Console links
- Google Business Profile Help: performance metrics
- Sterling Sky: interpreting GBP performance
- Meta for Developers: Pixel standard events reference
- AdsUploader: Meta Conversions API guide
- Microsoft Learn: about Clarity
- PPC Land: Data Studio name returns (April 2026)
- Google Analytics Help: URL builders and UTM parameters
- utm.new: Meta dynamic URL parameters
- Google Ads Help: auto-tagging
- Boei: tracking WhatsApp clicks with GTM
- Google Ads Help: Google forwarding numbers (country list)
- Google Ads Help: tracking calls to a number on your website
- Google Ads Help: tracking call clicks
- CallRail: countries served
- Google Ads Help: local actions conversions
- Google Ads Help: offline conversion imports
- Google Ads Help: upgrade to enhanced conversions for leads
- Google Ads Help: configure the Google tag for enhanced conversions for leads
- CustomerLabs: Meta offline conversions after the Offline Conversions API
- AWS docs: Meta Conversions API for business messaging
- Google Analytics Help: attribution settings
- Search Engine Land: Google retires attribution models
- Google Ads Help: conversion windows
- Nice Looking Data: why GA4 and Google Ads conversions don't match
- Jon Loomer: click-through attribution now means link clicks
- Jon Loomer: Meta ads attribution 2026
- Jon Loomer: Aggregated Event Measurement tab removed
- KVKK: Çerez Uygulamaları Hakkında Rehber (PDF)
- Erdem & Erdem: KVKK updates cookie guide (July 2025)
- Mondaq: KVKK cookie guide compliance roadmap
- DESAFE: cookie guide published (Dec 2024)
- KP Law: cookie guide summary
- Güneş Partners: cross-border transfer under Law 7499
- KVKK: guide on transferring personal data abroad
- Anadolu Ajansı: KVKK announcement on third-party data for advertising (July 2026)
- Simo Ahava: Consent Mode v2 for Google tags
- Google Ads Help: about Consent Mode
- Güneş Partners: what is İYS
- Analytics Mania: introduction to server-side tagging
- Loves Data: Google tag gateway
- Google Ads Help: Google tag gateway for advertisers
- StatCounter: search engine market share, Türkiye