Project Case Studies

What each engagement started from, what I built, and what it produced. Seven projects across banking, insurance, lending and e-commerce.

Halyk Bank · Digital Marketing Lead → Head of Digital Marketing2020–2023

Super App Growth: 700K to 7M MAU

10×MAU growth
$1.5Retail CAC
103KYouTube subs
2.5Mkino.kz MAU
$3M+UA budget/yr (from $200K)

Joined as the second digital marketing hire at Kazakhstan's largest bank. The entire UA was outsourced to an agency on a 30% commission model, running almost exclusively on brand queries. KPI was cost-per-install with zero visibility into downstream revenue. Onboarding conversion sat at 17%, thousands of new users churned every month after reinstalling because they had to redo full KYC video verification. The analytics setup was unreliable and nobody trusted the reports.

Built mobile attribution from zero with Adjust.

Used AppsFlyer as a negotiation lever during vendor selection to get free audiences, smart banners, and smart links bundled into the Adjust contract. Configured attribution across Google UAC, Meta, TikTok, Yandex, and affiliate channels. Firebase SDK for Google conversions, Adjust SDK for Amplitude reporting.

Moved from agency to in-house.

Eliminated the 30% commission model by building an in-house media buying team at 1% billing. Grew the annual UA budget from ~$200K to $3M+ by proving ROI to leadership over successive quarters. Hired and managed a team of 3 specialists.

Direct contracts with Google, Yandex, TikTok.

Negotiated dedicated account management, beta product access (Smart Bidding for app campaigns, new TikTok ad formats), and local-currency billing, removing FX risk and eliminating a layer of markup.

Kafka integration for KYC skip on reinstall.

Conceptualized and co-architected a Kafka event that detected existing bank clients reinstalling the app and auto-skipped the full KYC video verification flow. The result: +30% conversion lift on reinstall cohorts at zero media cost.

Event taxonomy for 15+ product lines.

Designed and maintained Amplitude event taxonomy covering loans, deposits, investments, payments, transfers, gov-tech, insurance, cinema tickets, and travel, for both B2C and B2B segments.

YouTube: 0 to 103K subscribers.

Built the channel content strategy, designed all thumbnails personally, and managed production. Grew from zero to 103K subscribers making the bank one of the most subscribed financial channels in Kazakhstan.

Managed the whole Halyk ecosystem.

Ran digital marketing across all Halyk products simultaneously: Onlinebank B2B (scaled from 0 to 300K MAU, CAC $7), kino.kz (from 200K to 2.5M MAU in one year), Halyk Insurance (3× ROAS), plus Leasing, Travel, Invest, and Market products.

Monthly active users, 3 years700K → 7M
Onboarding conversion (reinstall cohort)17% → 83%
Annual UA budget$200K → $3M+
Agency commission eliminated30% → 1%
Organic / paid traffic split70/30
Retail CAC at peak$1.5
AdjustFirebaseAmplitudeKafkaGoogle UACMeta AdsTikTok AdsGTMTechnical SEOAppsFlyerYandex Direct
Discuss a similar engagement
Bereke Bank · Head of Digital Marketing2023–2024

Full Rebuild: $650K Recovered, +25% Revenue

+25%Revenue YoY
5% → 67%SMB onboarding CR
$100 → $5SMB CAC
$650KRecovered from agencies
130KYouTube subs

Bereke Bank was rebranded from Sberbank Kazakhstan after the Russian sanctions. I joined as Head of Digital Marketing inheriting a chaotic state: $650K frozen across 3 agencies from the Sberbank era, $50K/month burning on bot traffic and mobile game ad inventory, GTM non-existent, and analytics completely broken. The SMB onlinebank product had 24 onboarding screens with a 5% conversion rate.

Recovered $650K from agencies.

Spent months working through legal and accounting to get the full $650K back and moved all media buying in-house.

Killed $50K/month in wasted spend on day one.

First campaign audit immediately surfaced bot traffic networks and mobile game inventory. Stopped all affected campaigns immediately.

GTM from zero: retail, SMB, and website in parallel.

Implemented GTM architecture where dataLayer conversion events fire only on confirmed CRM API success, not on form submit.

Attribution pipeline into DWH and dashboards.

Connected Google Ads API, Meta API, TikTok API, and AppsFlyer raw export into the bank's data lake. Built automated PowerBI and Qlik dashboards.

Gov API integration: IIN/BIN validation + smart routing.

Co-architected a verification engine integrating Kazakhstan's tax database (Salyk) and citizen registry to route leads to corporate onboarding or retail app funnels.

SMB onboarding redesign: 24 screens to 5.

Removed every unnecessary step from the SMB onboarding flow. Conversion rate went from 5% to 67%. CAC dropped from $100 to $5.

Team education.

Ran structured training sessions on value-based bidding, Firebase event setup, and attribution logic.

Revenue year-on-year+25%
SMB onboarding conversion5% → 67%
SMB customer acquisition cost$100 → $5
Recovered from legacy agency contracts$650K
Wasted spend stopped$50K/mo
YouTube subscribers built130K
GTMAppsFlyerMeta CAPITikTok Events APIAirflowPowerBIQlikOctober CMSGov APIJavaScript / DataLayer
Discuss a similar engagement
Halyk Insurance · Fractional consultant2021–2022 · 2024–Present

Insurance Analytics: $350K a Month From Paid, and 3× ROAS

~$350KMonthly revenue from paid traffic
10,100Policies a month sold through paid
ROAS, first engagement
100 → 100KSEO clicks per month
30% / 90%KASKO and OGPO funnel conversion

Two engagements with the same insurer. The first ran in 2021 and 2022, when the agency bought brand traffic and no product analytics existed. The second started in 2024 on a Nuxt 3 site that runs standalone and inside the bank superapp, where about 85% of payments happen. Meta was reporting 29,839 purchases in 30 days against 1,858 add to carts, and GA4 reported no revenue at all because the ecommerce tags had never been switched on.

Rebuilt the unit economics across five product lines.

Paid traffic carries about $350K of policy revenue a month, roughly 10,100 policies, across KASKO, travel, property, accident and brand campaigns. Breaking that down per product showed none of the five campaign categories was selling its own target product: each was working as a compulsory motor insurance acquisition channel, and 35 to 45% of the volume was renewals that the paid channel was taking credit for. Direct conversion ran from 8.7% on travel down to 0.47% on property. That moved budget allocation and reset what the paid report is allowed to count as a win.

Consolidated the Amplitude taxonomy.

Over 200 events across 18 naming prefixes became 35 standard events. PII came out of the event properties to meet bank compliance, and a layer property separates standalone web from superapp WebView. The project carries more than 679,000 events a month, so naming drift compounds quickly.

Deduplicated purchases.

payment_completed became the single canonical purchase event, deduplicated on insert_id down to a duplicate ratio below 1.05. Purchase tags for Pixel, CAPI and Metrika got a 24 hour idempotency guard keyed on the order number, and zero value events are now skipped so they stop distorting Meta optimisation.

Switched GA4 ecommerce back on.

Three GA4 tags had sendEcommerceData disabled and an empty settings table, so GA4 received bare purchase events with no order number, value, currency or items. All three now read from the data layer and revenue reports correctly.

Recovered the click IDs the SPA was deleting.

router.replace stripped the query string before Meta Pixel and Google Ads could read a click ID, and _fbc was present on only 1.64% of purchases. A setup tag now runs ahead of the pixel and writes _fbc, _fbp and nine click IDs into cookies, with a three tier fallback inside the CAPI tag. Verified on production across three navigations.

Found tags nobody owned.

A network and cookie capture on the live site turned up a second GA4 stream and two extra Google Ads conversion IDs firing from outside the managed container. Both were duplicating conversions and duplicating reported cost.

Specified the closed loop into CRM.

A policy attribution table holds policy, channel, premium and hashed identifiers as one source of truth, with 90 day matching on national ID to recover superapp sales and a dispatch queue that sends conversions to Meta, Google, TikTok and Yandex.

First engagement, 2021 and 2022.

Product campaigns for KASKO, OGPO, travel and property replaced the brand agency and returned 3× ROAS in the first full year. Redundant OTP steps came out of the funnels, KASKO reached 30% conversion and OGPO and travel around 90%. A Python pipeline generated the event taxonomy from the Figma API, and organic search went from 100 to 100,000 clicks a month.

Policy revenue from paid traffic~$350K/mo
Policies a month sold through paid10,100
First full year against brand baseline3× ROAS
KASKO and OGPO funnel conversion30% / 90%
SEO clicks per month100 → 100K
Product lines with unit economics rebuilt5
AmplitudeGA4GTMMeta CAPIsGTM / StapeYandex MetricaNuxt 3Figma APIPythonGoogle AdsTechnical SEO
Discuss a similar engagement
Bank CenterCredit · Fractional growth analytics consultant2024 · 2025–Present

Conversion Tracking Rebuilt Across Retail, Business and Leasing

118 → 11GTM tags after migration
18Products mapped entry to success
3Funnels instrumented to their success screen
4Ad platforms on deduplicated conversions
100KYouTube and a Silver Play Button

The bank ran a shared GTM container of 720 tags. Campaigns optimised on form submits rather than on opened products, there was no event taxonomy below the lead, and none of the web properties delivered conversions server side. Retail, business banking and leasing each carried their own stack, and the numbers coming out of them did not agree.

Campaign audit.

Every active campaign across Google Ads, Meta and TikTok, with a ranked list of fixes.

Amplitude taxonomy 4.0.

172 events covering the payment scenarios in the business banking app, alongside product audits of onboarding, cash loans, payments and the post authorisation area, a payroll cohort study and reporting for the board.

GTM migration.

118 relevant tags pulled out of a shared 720 tag container and rebuilt as 11 dynamic tags.

Team education.

Sessions on analytics fundamentals, GA4, GTM and campaign measurement.

YouTube to 100K subscribers.

Growth strategy support that took the channel to the Silver Play Button.

Instrumented three business banking funnels to their success screen.

Walked sole trader registration, POS and card issuing end to end with a live capture of more than 193 requests. The product has no single success call, so the emitter anchors on the success route instead and the event id combines the front end session with the product. Verified on 8 runs out of 8 and shipped as a rebuilt container.

Mapped 18 products from entry to success.

Entry, process and success routes for every product on the business platform. That map is what makes per product conversion and funnel reporting possible.

Qualified leasing conversions against the state registry.

Conversions now carry entity type, size and registered name from the government lookup, values are tiered on organisation size rather than pattern matching, and rejections fire as their own events. Two non leasing forms had been sending leasing conversions and are now scoped out.

Restored conversion tracking in the same cycle a release broke it.

Developers moved form submits onto OTP and a workflow gateway, and the passive interceptor began reporting every lead as unqualified. Diagnosed live in the browser and replaced with active qualification, with the fix built into the shipped container version.

Reviewed and specified the server side conversion orchestrator.

Validator, identity resolver and conversion forwarder feeding Meta, Google, TikTok, Yandex and AppsFlyer, closed on national ID bound at the first OTP, with browser and server deduplicated on the application id. The bank development team builds against this specification.

Automated the CPA and CAC calculation.

Advertising cost ingestion through Airflow into the bank warehouse and Power BI, replacing a monthly spreadsheet built by hand.

Put bottom funnel goals into Yandex Direct.

Three composite goals on the GTM triggers that already existed, with product detail kept in a visit parameter. Retargeting runs on funnel stage instead of visits, and no new data layer events were needed.

Strategy, media planning and SEO.

Digital strategy for the year, media plans across more than 12 campaigns, SEO audits for the business banking and leasing sites, and on page, schema and AI search work on the retail flagship.

GTM tags after migration118 → 11
Products mapped entry to success18
Verification runs on the new emitter8 / 8
Funnels instrumented to their success screen3
YouTube subscribers and a Silver Play Button100K
Ad platforms on deduplicated conversions4
MAP
Growth Roadmap 2026

19 initiatives with owners, scope, implementation specs and acceptance criteria.

DOC
Digital Growth Strategy 2026

Six workstreams, around 600 lines including code, covering server side delivery, offline attribution and form validation.

GTM
Business banking container

Route anchored emitter, three funnel stages across Meta, Google, TikTok and Yandex, advanced matching and enhanced conversions, deduplicated on event id.

SDK
AppsFlyer OneLink, Flutter spec

iOS associated domains, Android app links, SDK init order and more than 15 QA cases.

ETL
CPA and CAC automation

Airflow into the bank warehouse and Power BI in place of a manual monthly calculation.

AmplitudeAppsFlyerFlutterGTMGA4Meta CAPITikTok Events APIYandex DirectGovTech APIAirflowPythonPower BIGoogle Ads APINext.js
Discuss a similar engagement
Appteka.kz · Fractional SEO and analytics consultant2024–Present

SEO Built From Zero on a SPA: 0 → 82K Organic Clicks a Month

0 → 82KOrganic clicks a month at peak
$1.35MRevenue measured over 24 months
14.5 → 7.5Average position in search
51,650Orders over 24 months
210KMonthly active users at handover

An online pharmacy with a catalogue of more than 10,000 items on a Vue and Nuxt single page app, running as its own site and as a storefront inside a banking superapp. Organic search was close to zero because Googlebot could not render the catalogue. There was no ecommerce measurement either, so orders, refunds and the value of each entry point were invisible.

Built search visibility on a client rendered catalogue.

Generated titles and descriptions across more than 10,000 pages, Schema.org markup for products, organisation, breadcrumbs and FAQ, sitemap and robots rules, pagination handling, soft 404 cleanup, and rendering specifications for server side rendering or prerender.

Added GA4 with a full ecommerce data layer.

select_product, view_product, add_to_cart, initiate_checkout, purchase and refund. Refunds are in there because a pharmacy with delivery returns enough orders to move every number below them.

Audited Core Web Vitals against a real budget.

select_product, view_product, add_to_cart, initiate_checkout, purchase and refund. This is what put $1.35M of revenue and 51,650 orders on the record over 24 months. Refunds are in there because a pharmacy with delivery returns enough orders to move every number below them.

Traced the superapp entry point.

86% of banner traffic from the marketplace left before the page finished loading, while visitors who did load converted at 51.5%. The fix belonged in the handoff between the two apps rather than in the creative.

Cleaned up measurement.

Excluded the payment gateway from self referrals in GA4, built six remarketing audiences by purchase category, and specified a shared user id so the same person is not counted twice across web and superapp sessions.

Organic clicks a month at peak0 → 82,351
Revenue measured over 24 months$1.35M
Organic clicks over 16 months610K
Orders over 24 months51,650
Average position in search14.5 → 7.5
Active users over 24 months2.38M
GA4GTMJavaScript / DataLayerSchema.orgNuxt / VueGSC APICore Web VitalsAmplitudeTechnical SEO
Discuss a similar engagement
Jet Finance · JetCar / JetAuto · via partner agency · Fractional consultant2026–Present

Auto Lending: Tracking Audit and a Live Lead Pipeline

76GTM tags audited without code access
LiveSigned lead webhook in production
4Priority fixes scoped first
3Brands under one measurement plan

An auto lending group running three brands: the parent lender, a secured loan product and a used car marketplace. The tracking audit was done from outside the product, using network capture and the data layer while walking the live funnel, before any access to the repository. Loan disbursement was not recorded anywhere, and the one Google Ads conversion that did fire was hardcoded in the application at step three of the form, outside GTM and changeable only through a frontend release.

Audited a stack without access to it.

Rebuilt the measurement picture from network traffic and the data layer: 76 GTM tags and 26 triggers, two Meta pixel IDs initialised in the same base tag, two parallel Google Ads accounts firing on the same events, TikTok covering one product out of three, and consent mode unset across the container.

Ranked the findings into a working order.

Four fixes to make first: the missing disbursement event, the hardcoded conversion at the wrong funnel step, and the duplicate ad accounts and pixels. Identity and attribution wiring came next, then hygiene, including 31 paused tags left over from old tests.

Put Meta lead forms into the loan system.

A Cloudflare Worker verifies the inbound signature, resolves the page token from a system user with a cached key value store, maps the Russian language form fields, and signs its own request into the client system. Leads are deduplicated on their id, and transient failures return a 500 so the platform retries, which removes the need to run a queue. Personal data stays out of the logs.

Caught a field error before launch.

The field list requested form_name, which does not exist on the lead object in the Graph API and returns a 400 for every lead. One test lead surfaced it, the field came out, and the cost of adding it back properly is written down.

Chose the product analytics tool and wrote the implementation.

A GTM first specification that captures first touch attribution into user properties without waiting on backend work, so the funnel below the click becomes visible straight away.

GTM tags and 26 triggers audited from outside76
Signed webhook forwarding leads into the loan systemLive
Priority fixes identified and scoped4
Brands under one measurement plan3
Cloudflare WorkersMeta Graph APIMeta CAPIGTMGA4TikTok Events APIMixpanelYandex MetricaHMAC / WebhooksJavaScript
Discuss a similar engagement
Solva.kz · via partner agency · Fractional consultant2025–Present

Full Funnel Tracking on a Site We Could Not Change

1,400–1,800Applications a month at peak
~$7Cost per application
5Funnel steps recovered without code access

A Kazakhstani lender on a React single page app. None of the tracking recommendations were implemented on the client side across a full year, so every conversion had to be measured from outside the application without touching its code.

Rebuilt the funnel by intercepting the site's own requests.

Hooking fetch and XHR recovered all five steps, from the calculator through the payment schedule, the vehicle check, the application and its creation in the CRM, with no change to the client side code.

Sent server side conversions from the intercepted events.

Meta CAPI through a server container, a GA4 funnel and Google Ads conversions all read the same signal, so browser and server report the same numbers.

Moved campaign reporting onto CRM data.

Reporting now runs against applications recorded in the CRM rather than form events on the site. That put a real cost per application in front of the client, $5.8 on search and $6.1 on Performance Max, and gave the campaigns something accurate to optimise against.

Delivered the quarterly review as one document.

Google Ads, Meta, GTM, Core Web Vitals and SEO in a single audit, with a ranked roadmap and the next media plan attached.

Applications a month at peak1,400–1,800
Cost per application~$7
Cost per application, search and Performance Max$5.8 / $6.1
Funnel steps recovered without code access5
Reporting baseline after the auditCRM
GTMGA4Meta CAPIsGTM / StapeGoogle AdsBitrix CRMJavaScriptCore Web Vitals
Discuss a similar engagement

Working on something similar?

I start with a two-week audit. No long-term commitment upfront.

Get in touch