FM04: Call path, spend mix, and early-warning safety case

Contract FM04, revision 2 · Scenarios 9, 14, 15, 16 · Base text is black. All agent-added text must stay inside the blue progress section.

End goal

Reach a defensible end state in which real mobile landing sessions can reach the phone dialer quickly, strictly more than 50% of spend is attributable to location-specific keywords, and a daily evidence ledger exposes a shortage of local urgent calls well before day 14.

Deliverable A: Landing and phone-widget usability proof.

Verify every active final URL and representative mobile/desktop paths for response, redirects, content integrity, phone-widget visibility, tap behavior without completing a call, accessibility blockers, and performance risks using screenshots and repeatable checks.

Must not place a real call or expose personal data. Must not change or deploy the production site, consent layer, phone widget, or tracking.

Screenshot placeholder: mobile landing and phone-widget state
Deliverable B: Location-spend and operating model.

Calculate keyword-level and campaign-level spend so location-specific terms account for strictly more than 50% of the measured period, with an explicit classification table; define a daily ledger joining spend, impressions, ad clicks, widget-click conversions, and privacy-safe connected/local/urgent call outcomes.

Must not classify a keyword as location-specific from campaign name alone. Must not invent client response-time or caller-quality facts, and must not recommend more spend before delivery and measurement integrity are separated.

Screenshot placeholder: location-specific spend-share evidence
Deliverable C: Failure-prevention verdicts for scenarios 9, 14, 15, and 16.

Each verdict includes evidence, a negative/failure-path check, an owner, and an intervention trigger before day 14; scenario 15 can pass only with a reproducible spend share above 50%.

Must not claim a visually appealing page converts well without behavioral evidence. Must not treat widget clicks as proof of connected local urgent calls.

FM04 execution receipt · 2026-09-17 · Contract revision 2

Audit status: DONE for the authorized read-only audit and parent handoff. The corrected target outcome is not marked green: current location-specific spend is 9.898015765671%, widget-only click volume is not verifiable from the current event schema, and nearby urgent call quality has no separate outcome evidence.

Corrected goal carried forward: strictly more than 50% of spend on location-specific keywords, at least five verified Google-Ads-originated phone-widget clicks, and separately evidenced nearby urgent call quality. A widget click is not a connected call, and a connected call is not automatically nearby or urgent.

Scope and identity: Google Ads customer 4891907898, Csupi Autómentés, HUF, Europe/Budapest, auto-tagging enabled. Active target scope is 21 campaigns with the current EXACT | structure. Measurement property is GA4 266986146 and the site container is GTM-TH67S8M. The parent is task 01a0a269-78d2-7191-9709-7009b8d01715 on local.

Safety boundary: No Ads, budget, campaign, keyword, ad, GTM, GA4, consent, website, or deployment mutation was issued. No paid ad was clicked, no fake gclid was created, no synthetic conversion was sent, no form was submitted, no real call was placed, no caller PII was read, and no private evidence was published.

1. Deliverable A, all active final URLs and response integrity

Fresh read-only URL probe at 2026-09-17T11:38:20Z (13:38:20 CEST) used curl -sS -L with the exact active URL inventory from the Ads readback. Result: 21/21 HTTP 200, 21/21 final paths unchanged, and no redirect observed. Every response had a title, an H1, one GTM-TH67S8M marker, one tracking-consent.js, one phone-reveal.js, one widget-phone, and at least one gfn-track-phone phone link. The response body sizes were 47,700 to 54,808 bytes and the observed HTML response times were 0.206 to 0.423 seconds. This is a response check, not a Core Web Vitals lab measurement.

#Active campaign and IDRSA ad IDExact final URLProbe
1EXACT | Generic | Budakeszi 40 km · 16650800567824788626478https://csupiautomentes.hu/?utm_source=google&utm_medium=cpc&utm_campaign=Automentes-Search-O&utm_content=altalanos&utm_term=nonbrand200 · same path · all markers
2EXACT | Buda | Primary · 23974835198824788626418https://csupiautomentes.hu/automentes-buda?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Buda_Search&utm_content=buda&utm_term=nonbrand200 · same path · all markers
3EXACT | Érd | Primary · 23974835201824788626421https://csupiautomentes.hu/automentes-erd?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Erd_Search&utm_content=erd&utm_term=nonbrand200 · same path · all markers
4EXACT | M31 | Primary · 24246214458824788626451https://csupiautomentes.hu/automentes-m31?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Autopalyak_Search&utm_content=autopalya-M31&utm_term=nonbrand200 · same path · all markers
5EXACT | M7 | Primary · 24257365147824788626454https://csupiautomentes.hu/automentes-m7?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Autopalyak_Search&utm_content=autopalya-M7&utm_term=nonbrand200 · same path · all markers
6EXACT | Biatorbágy | Secondary · 24257365156824788626463https://csupiautomentes.hu/automento-biatorbagy?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_biatorbagy_Search&utm_content=biatorbagy&utm_term=nonbrand200 · same path · all markers
7EXACT | Budakeszi | Primary · 24257365150824788626457https://csupiautomentes.hu/automento-budakeszi?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_budakeszi_Search&utm_content=budakeszi&utm_term=nonbrand200 · same path · all markers
8EXACT | Budaörs | Primary · 23974835216824788626436https://csupiautomentes.hu/automento-budaors?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Budaors_Search&utm_content=budaors&utm_term=nonbrand200 · same path · all markers
9EXACT | Csepel | Primary · 24257365153824788626460https://csupiautomentes.hu/automento-csepel?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_csepel_Search&utm_content=csepel&utm_term=nonbrand200 · same path · all markers
10EXACT | Diósd | Primary · 23974835204824788626424https://csupiautomentes.hu/automento-diosd?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Diosd_Search&utm_content=diosd&utm_term=nonbrand200 · same path · all markers
11EXACT | M0 | Primary · 24246214449824788626439https://csupiautomentes.hu/automento-m0?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_m0_Search&utm_content=autopalya-M0&utm_term=nonbrand200 · same path · all markers
12EXACT | M1 | Primary · 24246214452824788626442https://csupiautomentes.hu/automento-m1?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_m1_Search&utm_content=autopalya-M1&utm_term=nonbrand200 · same path · all markers
13EXACT | M5 | Primary · 23979397390824788626445https://csupiautomentes.hu/automento-m5?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Autopalyak_Search&utm_content=autopalya-M5&utm_term=nonbrand200 · same path · all markers
14EXACT | M6 | Primary · 24246214455824788626448https://csupiautomentes.hu/automento-m6?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_m6_Search&utm_content=autopalya-M6&utm_term=nonbrand200 · same path · all markers
15EXACT | Piliscsaba | Primary · 24257365162824788626469https://csupiautomentes.hu/automento-piliscsaba?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_piliscsaba_Search&utm_content=piliscsaba&utm_term=nonbrand200 · same path · all markers
16EXACT | Pilisvörösvár | Primary · 24257365159824788626466https://csupiautomentes.hu/automento-pilisvorosvar?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_pilisvorosvar_Search&utm_content=pilisvorosvar&utm_term=nonbrand200 · same path · all markers
17EXACT | Pomáz | Primary · 23974835207824788626427https://csupiautomentes.hu/automento-pomaz?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Pomaz_Search&utm_content=pomaz&utm_term=nonbrand200 · same path · all markers
18EXACT | Solymár | Primary · 23974835213824788626433https://csupiautomentes.hu/automento-solymar?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Solymar_Search&utm_content=solymar&utm_term=nonbrand200 · same path · all markers
19EXACT | Szentendre | Primary · 23974835210824788626430https://csupiautomentes.hu/automento-szentendre?utm_source=google&utm_medium=cpc&utm_campaign=2606_Automentes_Szentendre_Search&utm_content=szentendre&utm_term=nonbrand200 · same path · all markers
20EXACT | Törökbálint | Primary · 24257365168824788626475https://csupiautomentes.hu/automento-torokbalint?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_torokbalint_Search&utm_content=torokbalint&utm_term=nonbrand200 · same path · all markers
21EXACT | Zsámbék | Primary · 24257365165824788626472https://csupiautomentes.hu/automento-zsambek?utm_source=google&utm_medium=cpc&utm_campaign=EXACT_zsambek_Search&utm_content=zsambek&utm_term=nonbrand200 · same path · all markers

2. Representative desktop and mobile checks

Path and viewportRepeatable read-only resultScreenshot and limit
Fresh direct homepage, desktop default 1747 × 1044phone-reveal-ready, H1 AUTÓMENTÉS, top business number visible, 10 visible gfn-track-phone tel links, floating widget visible at 66 × 66 px, no horizontal overflow.CUA screenshot captured during this run. No phone link was clicked.
Fresh direct homepage, mobile 390 × 900Top business number and hero call-to-action visible, menu button present, floating widget visible at 62 × 62 px near the lower-right, document scroll width 375 px, no horizontal overflow.CUA screenshot captured during this run. This proves rendered reachability, not a real paid interaction.
/automento-budakeszi, mobile 390 × 900H1 AUTÓMENTÉS BUDAKESZI, top business number visible, widget href=tel:+36706262777, widget aria label present, scroll width 375 px, no horizontal overflow.CUA screenshot captured during this run. Representative browser console returned zero error or warning entries.
Homepage with ?utm_medium=cpc, mobile 390 × 900Paid-session class phone-reveal-paid phone-reveal-ready, masked number plus visible Szám mutatása controls, widget visible, five visible reveal buttons, 10 tel links, no horizontal overflow.Safe paid-path screenshot captured without a gclid and without clicking the page. No synthetic conversion was created.

The paid-path reveal control is backed by the live phone-reveal.js source, which calls event.preventDefault() before reveal and copy, while retaining the tel: href and gfn-track-phone class. Because that retained class is intentionally observed by GTM, the control itself was not clicked. The live tap-to-dial path therefore remains an explicitly unperformed behavioral check, not a false pass.

3. Failure-path checks for landing and phone UX

Failure pathRead-only resultInterpretation
Historical extensionless mismatch candidates /automentes-diosd, /automentes-pomaz, and /automentes-budakesziHTTP 404, no redirect, and none is used by the 21 active final URLs.Stale path is exposed as a hard failure if reintroduced. Current active inventory is not using it.
Unknown path /automento-fm04-nonexistentHTTP 404, no redirect.Negative probe behaved as an explicit missing-page response, not as a silent content fallback.
Paid masking and consent surfaceMasked state and cookie-settings control rendered without obscuring the floating widget. No consent click or phone click was used.Presentation friction was not observed in this state. Consent-to-attribution and tap telemetry remain unproved.
Browser runtime failureRepresentative Budakeszi mobile CUA console read returned an empty error/warning list.No console failure was observed in that representative path. This does not replace resource-level monitoring or a lab performance run.

Scenario 9 verdict: PREVENTED at the checked technical layer. All 21 active URLs responded with intact marker content, and representative direct, paid-state, desktop, and mobile paths rendered the phone route without overflow or console errors. Residual per-page interaction and performance risk is UNKNOWN because a real paid session and lab performance trace were not permitted.

Scenario 14 verdict: PREVENTED for observed UI visibility, with the five-click target still UNKNOWN. The widget is visible and labelled on desktop and mobile, the paid masked state exposes a clear reveal control, and the mobile layout has no overflow. No live tap was performed, and the current event model does not isolate the floating widget, so this is not conversion or call-quality proof.

4. Deliverable B, keyword-level location-spend classification

Fresh Google Ads API readback covered customer 4891907898, active target campaign IDs only, and the closed customer-timezone period 2026-08-18 through 2026-09-16. The scope query required campaign.status = ENABLED and the 21 current target IDs. It did not filter keyword status, so cost from a criterion later paused or removed during the period was not silently dropped. Cost is metrics.cost_micros / 1,000,000.

Campaign-level reconciliationSpend HUFImpressionsAds clicks
EXACT | Generic | Budakeszi 40 km · 16650800567125,693.622,485180
EXACT | Buda | Primary · 239748351982,548.4921
EXACT | Pomáz | Primary · 239748352073,025.8021
EXACT | Szentendre | Primary · 239748352101,076.3571
EXACT | M5 | Primary · 23979397390618.06101
Other 16 active target campaigns0.00Not used for the spend sumNot used for the spend sum
Active target total132,962.322,506184

The keyword classifier normalizes case and Hungarian accents, tokenizes the keyword text, and marks a row location-specific only when the keyword itself contains one of these explicit tokens: biatorbagy, budakeszi, budaors, buda, csepel, diosd, erd, pomaz, szentendre, solymar, pilisvorosvar, piliscsaba, zsambek, torokbalint, m0, m1, m5, m6, m7, or m31. The buda token was explicitly included in the corrected rerun. Campaign names and ad-group names were not used as classification evidence.

Keyword textCampaign contextCriterion statusSpend HUFClass
autómentőGeneric · 16650800567PAUSED55,966.73generic
autómentésGeneric · 16650800567PAUSED51,888.03generic
autó szállításGeneric · 16650800567PAUSED6,591.78generic
autómentés pomázPomáz · 23974835207ENABLED3,025.80location-specific
buda autómentésBuda · 23974835198PAUSED2,548.49location-specific
érd autómentőGeneric / Érd group · 16650800567PAUSED1,815.98location-specific
non stop autómentésGeneric · 16650800567PAUSED1,773.71generic
budaörs autómentőGeneric / Budaörs group · 16650800567PAUSED1,657.24location-specific
0-24 autómentésGeneric · 16650800567PAUSED1,218.72generic
autómentő szentendreSzentendre · 23974835210ENABLED1,076.35location-specific
autómentő szentendreGeneric / Szentendre group · 16650800567REMOVED1,053.92location-specific
sos autómentésGeneric · 16650800567PAUSED1,012.95generic
autópálya autómentésGeneric / M31 group · 16650800567PAUSED731.71generic
autómentő pomázGeneric / Pomáz group · 16650800567PAUSED702.37location-specific
autómentő szentendreGeneric / Szentendre group · 16650800567PAUSED688.20location-specific
autópálya autómentésM5 · 23979397390PAUSED618.06generic
autómentő budaörsGeneric / Budaörs group · 16650800567PAUSED592.28location-specific
All remaining keyword rows21-campaign scopezero cost0.00no spend effect

Reproducible scenario 15 calculation: the query sums integer micros before rounding: location-specific cost L = 13,160.631008 HUF (13,160,631,008 micros), generic cost G = 119,801.685072 HUF (119,801,685,072 micros), and total T = L + G = 132,962.316080 HUF (132,962,316,080 micros). The displayed campaign-level total rounds to 132,962.32 HUF. Share is L / T × 100 = 9.898015765671220248%. The strict test is 2 × L > T, or 26,321.262016 > 132,962.316080, which is false. Therefore scenario 15 is not passed.

Two anti-error checks are explicit: buda autómentés is counted as location-specific even though its criterion was later paused, while autópálya autómentés in the M5 campaign is generic because the keyword text has no route token. Conversely, location terms inside the Generic campaign are counted as location-specific. This prevents campaign-name-only classification.

Scenario 15 verdict: EXPOSED. Generic terms consumed 90.101984234329% of the measured active-target spend, leaving location-specific terms at 9.898015765671%. No spend recommendation or Ads mutation was made before separating delivery and measurement integrity.

5. Read-only measurement and call-quality evidence

SignalFresh value in 2026-08-18 to 2026-09-16What it proves and what it does not prove
GA4 event tel_szam_katt, Google / cpc, mobile18 events, 14 sessionsPaid-source phone-link event activity. It does not identify the floating widget, prove unique clicks, prove one-to-one attribution, or prove a connected call.
GA4 event tel_szam_katt, all non-paid and unavailable sources24 additional events across organic, direct, unavailable, Bing organic, and ChatGPT assistant rowsRaw event totals cannot be treated as Ads-originated.
Ads action 6509672057, Phone click proxy (GA4) - Secondaryall_conversions=17.59, conversions=0.0, last conversion 2026-09-14, MANY_PER_CLICK, GA4 custom, non-call proxyProvider-reported proxy activity. It does not prove five widget-only clicks or a connected call.
Ads action 897422774, Tel szám kattintásall_conversions=15.0, conversions=0.0, last conversion 2026-09-14, WEBPAGE, secondaryAnother broad phone-link proxy, not a widget-only or connected-call count.
Website-call and ad-call pathsEnabled configurations exist, but no current performance row or recent connected-call evidence was returned. The AD_CALL path recorded 0 current conversions.Configuration and zero rows are not evidence of call quality. Connected, nearby, and urgent outcomes remain UNKNOWN.

The current GTM evidence uses a broad Click URL contains tel: trigger for phone-link events. The live page assigns gfn-track-phone widget-phone to the floating widget, but the current provider event rows do not expose a widget-specific dimension. Therefore the 18 paid GA4 events and 17.59 Ads all-conversion value are retained as proxies, not promoted to the corrected five verified widget-click gate.

6. Daily ledger definition and early-warning controls

Daily join key: one complete Europe/Budapest date, with the normal provider reporting-delay note. No caller name, phone number, recording, transcript, vehicle registration, or exact address is stored. Missing outcome fields are UNKNOWN, never zero.

FieldSource and reproducible ruleOwner
date, evidence_timeClosed local date and timestamp for each readback.Ads operator
ads_cost_huf, impressions, ads_clicksGoogle Ads API campaign and keyword rows in the 21 active-target scope.Ads operator
location_specific_cost_huf, location_share_pctApply the explicit keyword-text token classifier above. If total cost is zero, share is UNKNOWN. Pass requires location_specific_cost_huf × 2 > total_cost_huf.Ads operator
ga4_paid_phone_events, ads_proxy_all_conversions, ads_proxy_conversionsRead GA4 tel_szam_katt with source/medium split and Ads action 6509672057 separately. Do not force the two totals to match.Measurement owner
verified_widget_clicksCount only unique Google-Ads-originated floating-widget clicks with one matching event and preserved paid attribution. A broad tel: event without a widget discriminator is UNKNOWN.Measurement owner
connected_callsYes only when the operator or phone provider confirms an answered conversation. Missing is UNKNOWN.Csupi call-answering owner
connected_nearby_callsConnected call plus a coarse in-region yes/no/unknown classification based on caller-stated location and an owner-approved service-area rule. No precise location is retained.Csupi call-answering owner
connected_urgent_callsConnected call plus a separate urgent vehicle-help yes/no/unknown disposition.Csupi call-answering owner
connected_nearby_urgent_callsIntersection of connected, nearby, and urgent fields. Never backfill from a widget click or an Ads campaign location.Csupi call-answering owner

Current ledger baseline: the supplied FM04 tracker did not contain a completed daily join. Current aggregate evidence therefore records verified_widget_clicks=UNKNOWN and connected_nearby_urgent_calls=UNKNOWN. GA4's 18 paid phone-link events and Ads proxy values remain separate evidence rows.

Time gateWarning or failure triggerRollback-safe interventionOwner
Every complete day d = 1 to 14If cost exists and cumulative location share is not strictly above 50%, flag the spend gate. If no denominator exists, keep UNKNOWN. If cumulative verified widget clicks are below ceil(5 × d / 14), flag pacing.Capture the same readback, mark the gate exposed, and hold the account unchanged pending a separately authorized decision.Ads operator
Day 3Any missing source-split event read, any paid event without a widget discriminator, or any paid click with no joinable ledger row.Reconcile definitions and provider lag. Do not count proxy activity as a click or call.Measurement owner
Day 7Fewer than 3 cumulative verified widget clicks, a spend-share warning on two consecutive complete days, or no current connected/nearby/urgent outcome rows.Escalate the exact missing link with a before-state receipt. No Ads, GTM, GA4, website, or budget change in this audit.Measurement owner and Csupi call-answering owner
Day 14Fail the corrected gate if verified widget clicks are below 5, location-specific spend is not strictly above 50%, or the connected-nearby-urgent ratio cannot be separately evidenced. Predominance requires connected_nearby_urgent_calls / connected_calls > 50% when connected calls exist. Zero or missing connected calls remains UNKNOWN and does not pass.Keep the failure exposed, preserve this provider state as the rollback point, and require an explicitly authorized human decision before any intervention.Ads operator, measurement owner, and Csupi call-answering owner

Scenario 16 verdict: EXPOSED. The tracker now defines a daily joined evidence model and trigger schedule, but the current supplied evidence does not contain a completed daily widget-to-call-quality ledger. The shortfall can be detected from the next complete read, but it is not yet proven historically.

7. Owned scenario verdict receipt

ScenarioVerdictEvidenceNegative or failure-path checkTrigger before day 14Owner
9 · Landing integrityPREVENTED at checked technical layer21/21 active URLs 200 with unchanged paths and expected content markers. Desktop and mobile direct paths plus a paid-state path rendered the phone route. Representative mobile console had no error or warning.Three stale route candidates and one unknown route returned explicit 404. Lab performance and per-page real interaction remain UNKNOWN.Any active URL non-200, redirect, missing marker, mobile overflow, missing widget, or representative console error.Web/site owner with Ads operator
14 · Phone UX frictionPREVENTED for observed UI visibility, five-click gate UNKNOWNWidget visible and labelled at 66 × 66 desktop and 62 × 62 mobile. Paid masking exposed five visible reveal controls and did not create overflow.No live tel click was performed because the control retains the GTM phone class. No synthetic conversion or real call is claimed.Any paid click without a widget-specific event, any missing widget or reveal control, or cumulative verified clicks below ceil(5 × d / 14).Measurement owner
15 · Location-spend mixEXPOSEDL=13,160.631008 HUF, T=132,962.316080 HUF, share 9.898015765671220248%. Strict test 2L > T is false.Keyword-text classifier explicitly counts location terms inside Generic and excludes generic M5 route wording despite campaign name.Any complete-day cumulative share at or below 50%, and hard fail at day 14 unless strictly above 50%.Ads operator
16 · Operations and reportingEXPOSEDDaily schema, separate click/proxy/call fields, and D3/D7/D14 thresholds are now defined. Current evidence has no completed daily join and call-quality fields are UNKNOWN.Source-split GA4 rows and zero/absent connected-call routes reject aggregate-tap-equals-call reasoning.Missing daily row, unresolved paid attribution, fewer than 3 clicks by day 7, or missing connected-nearby-urgent classification.Ads operator, measurement owner, and Csupi call-answering owner

8. Acceptance receipt

Known limits: A genuine paid-session click, a real floating-widget click, one-to-one event identity, connected call, nearby classification, and urgent classification were not performed or available. They are deliberately not claimed. This audit exposes the current gates and gives the next complete daily run a deterministic acceptance test.

Local privacy note: The tracker remains a private local artifact. No public review host was used because the evidence is customer-specific and the contract forbids publication.