Answer-ready summary
What happened in this case study?
Meta-attributed purchases rose 33% and reported ROAS improved from 2.2x to 2.9x in 90 days after a server-side Conversions API build closed a 38% purchase-reporting gap.
An Islamabad-based menswear brand selling formal and smart-casual pret nationwide was spending PKR 2.4 million a month on Meta at a reported 2.2x ROAS, while Shopify order records told a different and larger story. Most buying happens inside the Instagram in-app browser on Android in Pakistan, and the brand's browser pixel was seeing barely six in ten purchases. A March theme update had also silently broken event deduplication, so Events Manager was simultaneously missing and double-counting orders. The ad account was optimizing against a distorted picture of what was actually selling.
The rollout used 4 implementation phases: technical cleanup, architecture, content, and authority building.
At a glance
Case summary
- Industry
- Menswear fashion (D2C ecommerce)
- Market
- Pakistan (Islamabad)
- Duration
- 90 days
- Client type
- Ecommerce
- Services used
- Server-side tracking setup, Conversions API implementation, Server-side GTM implementation
- Starting problem
- An Islamabad menswear brand was spending PKR 2.4M a month on Meta while the browser pixel reported 38% fewer purchases than Shopify recorded, with no deduplication and an Event Match Quality of 4.3.
- Work completed
- Reconciled four data sources into one measurement baseline, rebuilt the Shopify data layer, deployed server-side GTM with a deduplicated Conversions API stream and normalized Pakistani identifiers, and added courier-confirmed delivered and returned events for the COD truth layer.
- Evidence type
- illustrative_composite
Results and proof
Measured impact at 90 days
The top-line numbers are separated from the narrative so buyers, search engines, and answer engines can understand the outcome before reading the full execution notes.
Meta-attributed purchases
Up 33% against the 8-week pre-build baseline (1,610 to 2,142 per month)
Reported Meta ROAS
Improved from 2.2x to 2.9x (+31%)
Event Match Quality
Improved from 4.3 to 7.4 out of 10
Events Manager vs Shopify variance
Reduced from -38% missing / +11% duplicated to under 6% net
Measured metrics
Before and after
Challenge context
Challenge context
An Islamabad-based menswear brand selling formal and smart-casual pret nationwide was spending PKR 2.4 million a month on Meta at a reported 2.2x ROAS, while Shopify order records told a different and larger story. Most buying happens inside the Instagram in-app browser on Android in Pakistan, and the brand's browser pixel was seeing barely six in ten purchases. A March theme update had also silently broken event deduplication, so Events Manager was simultaneously missing and double-counting orders. The ad account was optimizing against a distorted picture of what was actually selling.
Browser pixel reporting 38% fewer purchases than Shopify order records at the Week 2 reconciliation
Event Match Quality at 4.3/10 with hashed email and phone missing on roughly 7 in 10 purchase events
Zero deduplication between the pixel and the Shopify-native Meta integration after a theme update, double-counting about 11% of events
PKR 2.4M monthly Meta spend with delivery algorithms learning on partial and duplicated conversion signal
68% of orders on cash-on-delivery, so reported purchase value overstated banked revenue by the RTO rate
GA4, Shopify, and Events Manager disagreeing on weekly purchase counts by 30-45%, making budget decisions guesswork
Execution roadmap
Implementation phases
The page now presents the process as a scannable roadmap before the long-form breakdown, improving buyer comprehension and passage-level retrieval.
Phase 1
Measurement audit and reconciliation (Weeks 1-2)
Phase 2
Server-side tracking build (Weeks 3-5)
Phase 3
Signal quality and audience rebuild (Weeks 4-8)
Phase 4
Optimization and compound gains (Weeks 8-12)
The Client
An Islamabad-based D2C menswear brand, founded in 2018, selling formal shirts, smart-casual pret, and trousers nationwide through a Shopify storefront. The brand employed a four-person in-house team — a performance marketer, a media buyer, a designer, and an operations lead — and outsourced nothing except analytics work. Monthly online revenue sat around PKR 22 million, with 68% of orders on cash-on-delivery and the remainder split between prepaid card and wallet payments.
Meta was the growth engine: Facebook and Instagram campaigns absorbed roughly PKR 2.4 million a month, with a smaller Performance Max campaign on Google covering branded and best-seller queries. The wedding season from October through March roughly doubled demand, and the brand’s revenue curve followed it. Team culture was measurement-friendly — they had dashboards, they had GA4, and they checked Events Manager weekly. That diligence is exactly what made the problem visible: three systems that should have agreed on how many orders the store took per week disagreed by a margin too wide to ignore.
They approached the engagement not with “our ads are broken” but with a sharper observation: Meta said ROAS was 2.2x and falling, yet the P&L said paid was comfortably profitable. Both could not be right. The brief was to find out which number was lying.
The Problem
The brand’s buyers are overwhelmingly mobile. Roughly 81% of sessions came from Android devices, and most Instagram traffic landed in the in-app browser, where cookie persistence is short, cross-site identification is degraded, and browser-side pixels quietly fail more often than they fire. On top of that structural loss, a March theme update had removed the event_id from the checkout snippet that tied browser events to the Shopify-native Meta integration’s server events.
The result was measurement chaos in both directions:
- Under-reporting: the browser pixel recorded roughly 38% fewer purchases than Shopify order records showed over the eight weeks we audited. Retargeting audiences built on purchase events were missing thousands of actual buyers.
- Over-reporting: with
event_idparity broken, the pixel and the Shopify integration double-counted about 11% of events that did come through. Meta’s “deduplicated” column in Events Manager read effectively zero. - Weak identity: Event Match Quality sat at 4.3 out of 10. Checkout collected phone numbers late in the COD form and email optionally, and neither was hashed and passed in a format Meta could match. In a market where the phone number is the customer’s primary identifier, that omission was expensive.
- COD distortion: 68% of orders were cash-on-delivery, and about 22% of those came back as refused or undeliverable. Meta was being told every order placed was full-value revenue, so delivery algorithms optimized toward order-placed volume, not delivered revenue.
- Decision paralysis: weekly purchase counts disagreed across GA4, Shopify, and Events Manager by 30-45%. The media buyer wanted to scale the best ad sets; the founder could not tell which ad sets actually were the best.
The P&L-versus-dashboard contradiction resolved simply: Meta was seeing fewer purchases than reality, so ROAS on the platform looked worse than the business experienced, and the account had spent six months making budget decisions against a distorted scoreboard.
Phase 1 — Measurement Audit and Reconciliation (Weeks 1-2)
Book a free strategy call - we'll audit your current setup and identify the highest-impact fixes.
Before touching a tag, we pulled eight weeks of data from four sources: Shopify order exports (with fulfillment and courier status), Meta Events Manager (browser and server streams separated), GA4 purchase events, and courier-confirmed delivery records.
| Data source | Avg weekly purchases | Variance vs Shopify |
|---|---|---|
| Shopify orders | 403 | — |
| Meta browser pixel | 250 | -38% |
| Meta Events Manager (combined) | 448 | +11% (duplicates) |
| GA4 purchases | 358 | -11% |
The reconciliation produced three findings that shaped the whole build. First, the browser pixel was structurally blind to a large share of in-app browser checkouts, so no amount of pixel tuning would close the gap. Second, the duplicate stream meant the brand could not simply turn on a parallel Conversions API feed without making over-reporting worse — deduplication had to be engineered, not assumed. Third, delivered revenue ran about 15% below placed revenue after refusals and returns, which meant the optimization target itself needed a COD correction layer.
We also benchmarked identity: of the events Meta did receive, hashed phone was present on 29% and hashed email on 22%. Event Match Quality of 4.3 confirmed Meta could barely connect conversions back to people. The deliverable from Phase 1 was a measurement plan — one event schema, one event_id source of truth, a defined identifier set, and a go/no-go on server-side infrastructure. The gap in rupee terms made the internal sell easy: roughly PKR 15-16 million of quarterly delivered revenue was invisible to the ad account that drove it.
Phase 2 — Server-Side Tracking Build (Weeks 3-5)
The build ran on a server-side GTM container hosted on a first-party subdomain of the brand’s own domain, deployed through Cloudflare Workers so events travel in a first-party cookie context the in-app browser cannot strip.
Data layer rebuild. The Shopify theme’s event layer was rewritten to emit clean view_item, add_to_cart, initiate_checkout, and purchase events with PKR values, catalog-matching content IDs, order IDs, and a server-generated event_id written to the thank-you page. The browser pixel kept firing — but now carrying the same event_id as the server event, which is what allows Meta to deduplicate the pair correctly.
Conversions API stream. A Conversions API tag in the server container replaced the Shopify-native Meta integration, which was switched off to eliminate the duplicate feed. Every purchase event now carried the full identifier set: SHA-256 hashed email, hashed phone, first name, city, and the _fbp/_bc click context captured into a first-party cookie on landing, so click IDs survived the redirects that lose them inside Instagram’s browser.
Pakistani phone normalization. A small preprocessing step with outsized impact: checkout captures numbers as 03XX-XXXXXXX, while Meta’s matching expects E.164. We normalized to +923XXXXXXXXX before hashing. Phone match rate on purchase events rose from 29% to 88% over the following three weeks, and this single change moved Event Match Quality more than a point on its own.
The event schema every stream now followed:
| Event | Trigger | Key parameters |
|---|---|---|
view_item | PDP render | content_ids, value PKR, content_type |
add_to_cart | Cart add, client + server | content_ids, value, event_id |
initiate_checkout | Checkout step 1 | value, num_items, city |
purchase | Order placed (thank-you page) | value, order_id, event_id, hashed email/phone/name |
order_delivered | Courier delivery webhook | value, order_id |
order_rto | Courier refusal webhook | value, order_id, refusal reason |
COD truth layer. The brand’s courier management system already received delivery webhooks. We piped them into the server container as two custom events: order_delivered (confirmed value) and order_rto (refused or undeliverable). These fed Meta as custom conversions and value rules, so the ad account could finally see banked revenue rather than hoped-for revenue. GA4 received the same events via the Measurement Protocol, so finance, ads, and analytics reconciled on one definition of a sale — a definition the founder could sign off on because it matched the bank statement, not the ad platform.
Staged rollout. The new stack went live at 10% of traffic, then 50%, then 100% across nine days, with the Events Manager test tool and a duplicate-rate monitor validating each stage before widening. By the end of Phase 2, Meta’s deduplicated event share exceeded 95%, and Events Manager’s combined purchase count sat within 6% of Shopify’s.
Phase 3 — Signal Quality and Audience Rebuild (Weeks 4-8)
With clean signal flowing, the work turned to what Meta does with it. We deliberately froze creative and campaign structure during these weeks so that measurement effects would not get confused with media effects — an isolation discipline that made the final numbers attributable.
Event Match Quality climbed as identifier coverage matured: 4.3 at baseline, 6.1 by week 5, 7.4 by week 8. The audience architecture was then rebuilt on server events, which see the purchases the pixel missed:
| Audience | Old definition | New definition | Size change |
|---|---|---|---|
| Engaged shoppers (30d) | Pixel purchase, 30d | Server purchase, 30d | +61% |
| Cart abandoners (14d) | Pixel add_to_cart | Server add_to_cart + checkout, deduplicated | +44% |
| High-value buyers (180d) | Did not exist | Delivered value ≥ PKR 12,000 | New, 8,400 |
| RTO-prone exclusions | Did not exist | 2+ refused deliveries in 90d | New exclusion |
The high-value audience, seeded from courier-confirmed delivered revenue, replaced a stale 1% broad lookalike as the prospecting foundation. A value-based lookalike on the top sliver of that list became the primary scaling audience. Retargeting, previously starved by pixel blindness, was re-split into cart abandonment and recent-engagement tiers with frequency management, since thin audiences had been pushing display frequency above four per week.
One structural test made the most of the new signal: 30% of budget moved into an Advantage+ Shopping campaign, which leans heavily on the conversion data it receives — exactly the input that had just improved. Over the following four weeks that campaign’s cost per reported order ran 19% below the manual campaign set on comparable merchandise, and it became the scaling vehicle in Phase 4. The manual structure was kept as the control and for the seasonal formal-wear lines that need curated merchandising.
Delivery responded the way fuller signal usually makes it respond: cost per reported purchase began falling around week 5 and kept falling through week 8, without a rupee of additional spend behind it.
Phase 4 — Optimization and Compound Gains (Weeks 8-12)
How we helped a Pakistani business achieve measurable results.
With trustworthy numbers, budget decisions became boring in the best way. A Looker Studio dashboard reconciled Shopify, Events Manager, and GA4 weekly; variance stayed under 6% after week 9, and every Friday the team reviewed the same three numbers: delivered revenue by ad set, cost per delivered order, and RTO share by audience.
Three reallocations followed directly from the reconciliation. Budget moved toward two ad sets that delivered-revenue data exposed as far stronger than purchase-placed data had suggested. A retargeting line that looked efficient on duplicated events was cut when deduplicated numbers revealed its true cost. And the RTO exclusion list stopped the account from re-acquiring serial refusal customers — a quiet COD-market saving worth roughly PKR 180,000 a month in avoided dispatch and return logistics.
A note on what we did not do: no creative overhaul, no landing-page redesign, no budget increase. The Phase 4 gains came entirely from pointing existing spend at truthful numbers. That restraint is what makes the outcome attributable to measurement — and it is also why the brand’s team now treats tracking health as a quarterly review item rather than a one-off project.
By week 12, monthly Meta-attributed purchases stood 33% above the pre-build baseline. Of that lift, honest accounting says: Shopify orders themselves grew 19% in the period (real commercial growth on better delivery decisions), and the remainder is recovered signal — purchases Meta can finally see that it was previously missing. Reported ROAS rose from 2.2x to 2.9x on essentially flat spend; the true economics of the account had always been closer to the higher number, and now both systems agreed.
Final Results
Measured at day 90 against the eight-week pre-build baseline:
| Metric | Before | Day 90 | Change |
|---|---|---|---|
| Meta-attributed purchases (monthly) | 1,610 | 2,142 | +33% |
| Reported Meta ROAS | 2.2x | 2.9x | +31% |
| Event Match Quality | 4.3 | 7.4 | +3.1 points |
| Events Manager vs Shopify variance | -38% / +11% | under 6% net | Reconciled |
| Phone match rate on purchases | 29% | 88% | +59 points |
| Cost per Meta-reported order | PKR 2,340 | PKR 1,780 | -24% |
| Shopify orders (monthly) | 1,750 | 2,080 | +19% |
The distinction between the first and last rows is the honest read of this project: a third of the attribution lift is recovered visibility, and about a fifth is genuine order growth that better targeting produced once the ad account stopped optimizing half-blind. Both matter, and conflating them — in either direction — is how teams end up either over-crediting an analytics project or under-crediting one.
What Made This Work
1. Reconciliation before infrastructure. Two weeks of ledger work turned a vague suspicion into a quantified PKR-scale gap, which dictated exactly what the build had to fix. Teams that start with tags and finish with reconciliation usually rebuild twice.
2. Deduplication engineered, not assumed. The duplicate stream from the broken event_id parity would have doubled the damage had we layered a server feed on top. One source of truth for event IDs, verified in Events Manager’s deduplication column weekly, kept the pair of streams honest.
3. The phone number treated as the primary key. Normalizing 03XX to +92 before hashing did more for match quality here than any other single change. In Pakistan, the phone number is the customer identity — checkout flows and tracking setups that treat it as an afterthought pay for it in match rates.
4. A COD truth layer. Feeding order_delivered and order_rto back into the ad platform aligned optimization with banked revenue. In a 68% COD business, the gap between order-placed and delivered is not accounting noise; it is a targeting input.
5. Isolating measurement lift from media lift. Freezing creative and structure while signal quality stabilized meant the week-5-to-8 efficiency gains could be attributed to measurement with confidence — and the week-8-to-12 gains to deliberate reallocation.
What Teams Can Apply
- Reconcile before blaming performance. Pull your store’s order count and your ad platform’s conversion count for the same eight weeks. If they disagree by more than 10%, you have a measurement problem before you have a media problem — and no creative refresh will fix it. The double-counting pattern we found is common enough across Pakistani ecommerce that we treat the audit as a standing first step for any new account.
- If most of your orders are COD, send post-courier events. Order-placed events overstate revenue by your refusal rate. Delivered and returned events let the platform learn the difference between a customer and a courier rejection.
- Normalize Pakistani phone formats before hashing. It is a five-line preprocessing step and routinely the largest single Event Match Quality lever available to a local store.
- Keep pixel and server events, but make them a pair. Deduplication only works when both streams share an
event_id. Verify it in the platform’s own deduplication column, not in your tag manager’s preview mode. - Watch Event Match Quality weekly. It is the closest thing Meta offers to a health score for your identity pipeline. Below 5, your conversion data is barely connected to real people; above 7, audience and bidding systems are working with something close to the truth.
What teams can apply
Use the framework, not just the headline number.
For GEO, AEO, and classic SEO, the useful signal is the sequence: fix crawl access, build answerable category assets, improve conversion paths, and document proof in a format that humans and machines can cite.
The audit quantified the gap in rupees before any tag was written, so the build was scoped against a reconciled baseline instead of dashboard suspicion.
Phone numbers normalized from 03XX to +92 format before hashing lifted match rates more than any other single parameter in a market where phone is the primary identifier.
Courier-confirmed delivered and returned events let Meta optimize toward banked revenue, which matters when 68% of orders are cash-on-delivery.
Limitations
Context and limitations
Illustrative composite engagement; attribution recovery varies with COD share, in-app browser mix, and how much identifier data checkout actually collects. A store already sending clean server-side events will see smaller gains.
Questions
Case study FAQs
Is this Conversions API case study framework applicable in Pakistan?
Yes, and Pakistan's market conditions make it more valuable than the global averages suggest. Heavy Instagram in-app browser usage on Android, a 60-70% cash-on-delivery share in most fashion verticals, and phone numbers captured in 03XX local format all degrade browser-side signal faster than in card-first markets. The fix is the same everywhere: server-side events, normalized identifiers, and a reconciliation loop against your own order records.
How quickly can we expect results?
Signal recovery is immediate once the server-side container takes over, but ad delivery needs two to three weeks to relearn on the fuller event stream. Attributed purchase volume and cost-per-order improvements stabilized between weeks four and eight in this engagement. ROAS readings should only be judged after a full monthly cycle, so seasonal peaks and COD confirmation lag wash out.
Can you replicate this process for our business?
Yes. The reconciliation-first approach applies to any Shopify, WooCommerce, or custom-store setup selling into Pakistan. Fashion, beauty, electronics, and home-goods stores with high COD shares benefit most, because the courier-confirmed event layer aligns ad optimization with delivered revenue rather than order-placed revenue. Single-channel advertisers on Meta or Google both start with the same measurement audit.
Do you provide reporting during implementation?
Yes. Weekly checkpoints cover event health, deduplication rates, and Event Match Quality from day one. A reconciliation dashboard comparing Shopify orders, Events Manager, and GA4 is shared from the end of Phase 1, so the variance number that justified the project keeps being visible after it shrinks.
Next step
Want a similar rollout in Pakistan?
Share your current baseline and we will map a phased execution plan to your growth goals.