Performance marketing portfolio

Yellammavari
Harikiran

Google Ads & Meta Ads · Measurement and conversion tracking

I plan and run paid campaigns end to end — keyword and audience research, landing pages, ad copy, and the GA4 + GTM tracking underneath it, so every lead can be traced back to the click that produced it.

Yellammavari Harikiran
10+Live projects
10+Ad accounts managed
10+GA4 + GTM installs
100+ICP frameworks built

About

Campaigns are only as good as the data behind them.

Five stacked blocks labelled Plan, Build, Track, Read and Optimise, forming the sequence of running a performance marketing account
Plan, build, track, read, optimise — each layer only holds if the one under it was done properly.

I came into performance marketing through execution — building live pages, wiring tracking, and reading the reports afterwards.

My work sits across two halves that most beginners keep separate. On one side: keyword research, ad groups, RSA copy, negative keyword hygiene, audience and ICP definition, creative briefs. On the other: GTM containers, GA4 events, conversion actions, call tracking, and dataLayer wiring so the platform learns from clean signals.

I have worked on live accounts across EdTech and emergency healthcare — including the tracking build and Google Ads account for an EdTech institute, and a call-driven ambulance campaign in Hyderabad.

Core skills

What I actually do, day to day

Google Ads

  • Search campaign builds
  • Keyword research & ad group mapping
  • RSA copy, sitelinks, callouts
  • Negative keyword cleanups
  • Search terms & N-gram analysis
  • tCPA / Max Conversions bidding
  • Performance Max & asset groups

Meta Ads

  • Campaign structure & budget splits
  • ICP and audience research
  • Creative briefs & hook writing
  • 1:1, 4:5, 9:16 creative sets
  • Lead form vs landing page tests
  • Pixel + CAPI event setup

Measurement

  • GTM containers, tags, triggers, variables
  • GA4 events & key event configuration
  • Google Ads conversion actions
  • Enhanced conversions
  • Call tracking & call quality filtering
  • Microsoft Clarity, Search Console
  • Looker Studio reporting

Web & CRO

  • Lead-gen landing pages
  • WordPress & static hosting (Netlify, Vercel)
  • Form capture to Sheets / CRM
  • Page speed & mobile fixes
  • On-page SEO, meta tags, schema markup

Reporting

  • Monthly MoM performance workbooks
  • Query & landing page level deep dives
  • Change logs & test documentation
  • Client-ready decks and summaries

AI workflow

  • Claude / ChatGPT for research & copy
  • Bulk keyword and search term clustering
  • Creative and angle ideation at scale
  • Rapid landing page prototyping

Client work

Two accounts, two different problems

Both of these were live, with real budget and a real client on the other side of the report. Metrics shown are from the periods I worked on the account.

Cognitec — EdTech, Chennai

Tracking + Google Ads cognitec.in
GA4 traffic acquisition report showing sessions by default channel group, with paid search accounting for most sessions
GA4 traffic acquisition, 1 May – 17 Aug 2026 — sessions split by channel.
Google Ads account overview showing clicks, impressions, conversions and cost for all campaigns between March and August 2026
Google Ads account overview, 27 Mar – 17 Aug 2026 — all campaigns.

The problem. A training institute with dozens of program pages — Master's, specialisation and PG batches — and no reliable way to tell which page or which channel produced an enquiry. Leads were arriving; nobody could say what earned them.

What I did. Built the measurement layer the account was missing: a GTM container, GA4 with key events configured for every real lead action, Microsoft Clarity for session behaviour, Google Ads conversion actions matched to those events, and an Apps Script capture that writes each form lead into a sheet with its source attached.

What the channel report shows. Paid search tracks total sessions almost exactly — on the peak day, 58 of 70 sessions. Organic contributed 7, direct 3. That is a useful and uncomfortable finding: traffic here is bought, not earned, so the flat mid-June to early-July stretch is close to the site's true baseline. It reframes the conversation from “how do we improve the ads” to “what happens the month we stop.”

What the account delivered. 283 conversions from 2,520 clicks on 24,800 impressions — a 10.2% click-through rate, which is strong for education search — at ₹213k spend, or roughly ₹753 per conversion and ₹85 per click. The two peaks are enrolment pushes; the near-zero trough between them lines up exactly with the flat stretch in the GA4 channel chart above, which is the cleanest confirmation that this site's traffic follows the ad spend rather than the other way round.

The Performance Max episode. A PMax campaign was serving on children's YouTube content and pulling an audience with the wrong price expectation. I helped diagnose the placement and audience mismatch, cut the waste, and rebuild the campaign with tighter signals before relaunch.

Role
Tracking build · GA4 reporting · Google Ads support confirm
Period
[[MONTH YYYY – MONTH YYYY]]
Stack
GTM · GA4 · Microsoft Clarity · Google Ads · Apps Script
Shipped
Full tracking stack · lead capture to sheet with source attribution · channel reporting · PMax diagnosis and rebuild
Result
283 conversions · 10.2% CTR · ₹753 per conversion (27 Mar – 17 Aug 2026)
Tracked form_submit Enquiry click_to_call Phone Call whatsapp_click WhatsApp Lead brochure_download Soft Lead GA4 key events → Ads conversions

24×7 Ambulance Service — Emergency healthcare, Hyderabad

Landing page + Call campaign 24x7ambulanceservice.in
24x7 Ambulance Service landing page - hero section with Call Now button, fleet photograph and trust stats
Live landing page — persistent call bar, single-action hero, real fleet photograph.
24x7 Ambulance Service landing page on mobile - stacked hero, full-width call button and sticky Call / WhatsApp bar
Mobile — stacked hero, full-width call button, sticky Call / WhatsApp bar.

The problem. Emergency intent has no research phase. Someone searching for an ambulance in Hyderabad needs the phone to ring in seconds, from a page that loads on a weak mobile connection and asks for nothing except the call.

What I did. Built a single-page, call-first landing page for emergency and non-emergency transport across Hyderabad and Telangana — ICU ambulances, oxygen ambulances and dead body transport. A blue bar pinned to the top of the viewport carries Call Now at every scroll position. The hero states availability before it states anything else, and the primary button is the phone number rather than a vague label, so the action is obvious to someone reading in a panic.

Trust, above the fold. Fifteen-minute response, 500+ vehicles, round-the-clock dispatch, 10,000+ patients served — four claims a caller can scan in two seconds. The vehicle photograph is the client's own fleet, not stock, because a real number plate does more for credibility than any badge.

Two channels, kept separate. On mobile the hero stacks, the call button goes full width, and a sticky bottom bar gives Call and WhatsApp equal weight without covering the content. Every call button pushes a call_now_click dataLayer event carrying a cta_location parameter — topbar, hero, sticky — and WhatsApp fires its own event, so the report shows which position on the page earns the call and which visitors prefer to message instead of dial.

Campaign. Search campaign built from a large Keyword Planner pool, clustered into emergency, non-emergency transfer, ICU shifting, dead body transport and locality-led ad groups, with RSA copy written per intent instead of one set reused across all of them.

Role
Landing page build · Search campaign build · conversion tracking
Period
Aug 2026 – present confirm
Objective
Emergency phone and WhatsApp leads, mobile-first
Coverage
Hyderabad & Telangana
Stack
GTM · GA4 · Google Ads · dataLayer events · WhatsApp click-to-chat
Shipped
Single-page LP (desktop + mobile) · 3 call CTA positions · WhatsApp channel · intent-clustered ad groups with RSA copy per cluster
Result
[[__ calls in first __ days · cost per call ₹__]] add when live data exists
Tracked call_now_click cta_location: topbar call_now_click hero call_now_click sticky whatsapp_click WhatsApp Lead GA4 key event → Ads conversion

Media planning

One plan per landing page

Different offers need different structures. These are the Google Ads plans I have built, each mapped to its own landing page, objective and conversion action.

Project / landing page Market Campaign type Objective Bid strategy Primary conversion Daily budget
24×7 Ambulance Service
single-page call LP
Hyderabad & Telangana Search + Call assets Emergency call leads Max Conversions call_now_click + whatsapp_click ₹2,000 / day
Cognitec
program & batch pages
Chennai, India Search + Performance Max Course enquiries [[tCPA / Max Conv.]] form_submit ₹6,000 / day

Daily budgets shown are the campaign caps set in the account, not amounts spent. Full plans available on request.

Plan structure

Campaign → ad group → keyword → landing page → conversion. Every keyword can be traced to the ad group that owns it, the page it lands on and the action that counts as a result — so nothing in the account is spending without a destination.

Campaign Search — Emergency Ambulance Maximise Conversions · objective: phone call leads Ad group 01 Emergency ambulance Ad group 02 ICU shifting Ad group 03 Non-emergency transfer Keywords ambulance near me emergency ambulance hyderabad Keywords icu ambulance ventilator ambulance Keywords patient transport hospital discharge ambulance Landing page Single-page call LP Call CTA at topbar, hero and sticky bar · one action per screen Conversion call_now_click · whatsapp_click Fired with a cta_location parameter, registered as a GA4 key event, imported as a Google Ads conversion action

Keyword to ad group mapping

A Keyword Planner export arrives as one undifferentiated list. The work is deciding which queries share an intent tight enough to sit behind the same ad — and which ones look relevant but are someone shopping for a toy, applying for a driving job, or looking for the free government service. Those go to the negative list before launch, not after the first month of wasted spend.

Raw export Keyword Planner pool unsorted, mixed intent ambulance near me icu ambulance hyderabad ambulance driver jobs ventilator ambulance cost 108 ambulance number patient transport service dead body transport ambulance toy for kids hospital discharge ambulance free ambulance service Sorted by intent, not volume Ad group 01 — emergency ambulance near me emergency ambulance hyderabad · ambulance service near me Ad group 02 — ICU shifting icu ambulance hyderabad ventilator ambulance cost · cardiac ambulance Ad group 03 — non-emergency transfer patient transport service hospital discharge ambulance · bed to bed transfer Ad group 04 — dead body transport dead body transport ambulance freezer box ambulance · mortuary van Negative list — excluded, not an ad group ambulance driver jobs · ambulance toy · free ambulance · 108 number job seekers, shoppers and government-service searches: no commercial intent

Ad copy sets

A responsive search ad is not one ad, it is an inventory the system assembles. The craft is filling every slot with copy that still makes sense in any combination, then pinning only the one line that must never be dropped — and writing a different first headline for each ad group, so an ICU search and a discharge-transfer search never read the same ad.

What the searcher sees SPONSORED 24x7ambulanceservice.in ICU Ambulance In Hyderabad | Available Right Now ICU-equipped ambulances with trained paramedics. 15-minute response across Hyderabad & Telangana. Fixed, transparent pricing — call now. Pin sparingly One pinned headline holds the promise that must always appear. Everything else rotates, so the system can find the combination that earns calls. Pin all fifteen and it is no longer responsive. Asset inventory — ad group 02, ICU shifting PIN 1 ICU Ambulance In Hyderabad H2Available Right Now H315-Minute Response Time H4Trained Paramedics On Board H5Fixed Transparent Pricing H6Ventilator & Cardiac Support … 15 headline slots filled PIN 1 ICU-equipped ambulances with trained paramedics… D2Call now for immediate dispatch, any hour D3Bed-to-bed transfer across Telangana 4 description slots filled Headline 1, written per ad group — never one set reused across all of them emergency Ambulance In Hyderabad | Call Now icu shifting ICU Ambulance In Hyderabad non-emergency transfer Hospital Discharge Ambulance dead body transport Freezer Box Ambulance Service

GTM & GA4 · How I install tracking

A fixed sequence, run the same way on every account

The order matters — skip a step and the conversion data is wrong for weeks before anyone notices.

Foundation check

Google Ads billing active and auto-tagging on, GA4 property linked to Ads, GTM container created and installed in the page head, site edit access confirmed.

Click capture

Capture gclid, gbraid, wbraid and UTM parameters on landing, persist them for the lead's decision window, and auto-populate hidden form fields so the lead arrives with its source attached.

Event layer

Define the dataLayer events that matter for this business — form submits, call clicks, WhatsApp clicks, downloads, checkout steps — with parameters that describe where on the page the action happened.

GA4 configuration

Register the events, mark the real ones as key events, add the parameters as custom dimensions so they show up in reports rather than being silently dropped.

Conversion actions

Create the matching conversion actions in Google Ads, set primary vs secondary deliberately, wire enhanced conversions, and assign values where the business has a known lead value.

Offline and CRM loop

Where leads close on the phone, hash email and phone and push closed-won events back through Data Manager so bidding learns from revenue instead of raw form fills.

Pre-launch audit

Full check in Tag Assistant and GA4 DebugView, real-time verification of every event, then a documented sign-off before spend starts.

First 30 days

Watch, log, and leave the structure alone. No campaign changes for the first thirty days so the learning period produces a readable baseline.

Google Tag Manager workspace showing GA4 configuration, click event and custom event tags with their firing triggers

A live GTM container, tag by tag

The GA4 Google Tag fires once on initialisation; everything after it is a named event with a named trigger. Click tags cover the real CTAs — Book Free Demo, Enroll Now, WhatsApp float. Custom HTML tags catch server-side and form events pushed from the site, so generate_lead fires from an application, an opt-in or a webinar registration without needing three separate tags. Scroll depth is bucketed at 25 / 50 / 75 / 90 to read drop-off rather than just page views.

Naming convention matters more than tag count: any tag here can be traced to its trigger and its GA4 event without opening it.

GA4 Home report showing active users and event count for the last 7 days against the previous period and the Training and Certification peer benchmark

Reading GA4, not just installing it

Active users up 86% and event count up 153% week on week — but the number I actually watch is the peer benchmark band underneath. The blue line sitting above the Training & Certification median for four straight days says the lift is real demand, not a tracking artefact or a bot wave, which is the first thing to rule out when traffic jumps that fast.

Comparison window: last 7 days vs previous period · peer group: Training & Certification

Google Ads Goals summary showing the Phone call lead goal with four primary conversion actions and their conversion counts

Conversion actions, grouped into goals

The Phone call lead goal carries the account: 661 website click-to-call conversions and 67 calls placed straight from the ads over the period. Grouping them into one goal means bidding optimises toward “a call happened” rather than being split across four separate signals.

What I would flag in this account. Two of the four actions have logged nothing recently, and two of them are near-duplicates both set to Primary — the classic setup for double counting a single call. An audit here means demoting the redundant action to Secondary and confirming the Business Profile call action is still wired to a live listing, before any bid strategy is asked to learn from this data.

Window: 31 May – 17 Aug 2026 · 4 primary actions on the Phone call lead goal

Meta Ads & ICP models

Audience first, creative second

Before writing a single hook I build an ICP model for the account: who buys, what triggers the purchase, what they are afraid of, and which objection the creative has to clear. The creative brief comes out of that document, not out of a swipe file.

The ICP framework

Every account starts with the same five questions, answered in writing before anything is designed. Two documents come out of it: a creative brief and an audience build. Skip it and you end up testing executions of a message nobody needed.

Five questions the document has to answer before any creative is written 01 Segment Who actually buys? Not who could buy. The people already paying for this. 02 Trigger Why this week? The event that moves someone from aware to in-market. 03 Objection What stops them? Price, trust, timing, or the fear of choosing wrong. 04 Alternative Versus what? Including doing nothing, which is the usual winner. 05 Angle The one line that clears the objection for that segment. Nothing else. Output one — creative brief Hook, visual, proof, call to action The hook states the trigger. The proof answers the objection. The call to action names the next step. One angle per creative — a creative arguing three things at once tests nothing. Output two — audience build Cold, warm, retargeting Interests and behaviours drawn from the segment, not guessed. Lookalikes seeded from buyers, not all traffic. Budget split stated up front.

Creative sets

Every concept is laid out per placement, so nothing important lands where the app covers it.

hook visual + proof call to action 1:1 — 1080×1080 Feed, square hook visual + proof call to action 4:5 — 1080×1350 Feed, tallest allowed app UI covers this hook, below the top overlay visual + proof call to action caption & button cover this 9:16 — 1080×1920 Story, Reel Same angle, three frames A square crop of a vertical creative loses the hook. A vertical stretch of a square one loses the proof. So each placement gets its own layout, not a resize. On 9:16 the top and bottom bands belong to the app. Anything important there is not seen.
1:1Feed creative
1080×1080
9:16Story / Reel
1080×1920
16:9Right column / desktop
1200×628
1:1Offer variant
1080×1080
9:16Testimonial variant
1080×1920
4:5Feed variant
1080×1350

Certifications

Verified credentials

Google Skillshop

Google Ads Search Certification

Search campaign strategy, bidding and optimisation.

Verify credential →

Google Skillshop

Google Ads Display Certification

Display targeting, creative and audience strategy.

Verify credential →

Google Skillshop

Google Analytics 4 Certification

GA4 property setup, events, reporting and attribution.

Verify credential →

[[ISSUER]]

[[CERTIFICATION NAME]]

[[one line on what it covers]]

Verify credential →
Image placeholderCertificate badges strip
16:9 · 1600×900px
Image placeholderSDM Classes course completion certificate
16:9 · 1600×900px
Image placeholderOptional: Meta Blueprint / HubSpot badge
16:9 · 1600×900px
WhatsApp