Webotic
Free audit
Back to case studies
/ 01 · zoo-de-rabatCulture & leisure90 days
CLIENT CASE · CULTURE · 2026

Zoo de RabatHow we cut visitor CPA by 35% in 90 days, off-season.

Zoo de Rabat needed to fill the park between school holidays, when attendance collapses. In 90 days, the atelier wired Google, Meta and TikTok onto a full server-side tracking stack, measured tickets scanned at the gate, and pulled visitor CPA down 35%.

SCOPEGoogle Ads · Meta Ads · TikTok · 90 days
−35%Visitor CPAvs pre-campaign baseline
×4.2Media spend ROItickets sold / media
+45%Attendanceoff-peak periods · 90 days
+180%Site trafficCasablanca + Rabat
STACK
  • Google Ads Search
  • Performance Max
  • Meta Advantage+
  • TikTok Smart+
  • GTM Server-Side
  • Meta CAPI
  • GA4 + BigQuery
  • Looker Studio
  • Consent Mode v2
  • Offline Conversions API
01

The challenge · a park invisible between school holidays

Zoo de Rabat is one of the three most identifiable family outings in the capital, but its attendance follows a roller-coaster curve: massive peaks during school holidays and public-holiday weekends, then 40 to 60% weekly drops the rest of the year. Management came to us with a simple observation: 70% of annual revenue is concentrated on 25% of the calendar. The rest of the time the ticket booths run empty while operating costs do not pause. On the acquisition side, the park had an active Facebook page, a brochure site and a recent online ticketing platform, but no structured paid campaign. Communication leaned 90% on family word of mouth and organic reach from the social pages — levers that cannot be steered. The few previous Meta campaigns had been launched as post boosts, without CAPI, without a clean GA4, without ticket-level tracking. Nobody knew what a visitor actually cost. Media budgets were set by gut feel, validated at month-end on cash-register sentiment, and switched off whenever cash flow tightened. The audience was dual: Rabat and Casablanca families with children aged 4 to 12, and 18-30 year-old adults on the Casa-Rabat axis for weekends. The average distance Moroccan families accept for a zoo outing is 80 km. The objective agreed at kick-off: cut visitor CPA by at least 25% and lift attendance outside school holidays by at least 30%, within 90 days, on a media budget capped at 35,000 MAD per month across the whole setup.

  • 70% of annual revenue concentrated on 25% of the calendar — brutal seasonality.
  • No CAPI pixel, no clean GA4, no ticketing import: CPA unknown.
  • Media budgets set by feel, cut whenever cash flow tightened.
  • Dual audience: families 4-12 in Casa+Rabat, 18-30 year-olds for weekends.
02

The approach · measure before you scale, three channels not one

Before we touched a single dirham of media, we set a non-negotiable rule with management: no campaign would launch until ticketing was measured all the way through to the ticket actually sold. Most Moroccan advertisers scale blind because they measure the click, not the sale. On a leisure business with an average basket of 80 to 140 MAD per family, a 30% attribution leak on Safari iOS is enough to turn a real ROAS of 4 into an apparent ROAS of 2.2 — and to get budgets cut by the board. The technical bet: everything goes server-side. A GTM Server container hosted on the zoo.webotic.cloud subdomain, Meta CAPI deduplicated through event_id, GA4 measurement protocol on the server side, and crucially the ticketing system connected via the Offline Conversions API to feed back the tickets actually scanned at the park entrance — not just online purchases. On channels, we refused the single-platform option. Meta alone would have been cheaper on CPM but capped family reach within 80 km of Rabat. Google Search would have captured intent but starved the top of funnel. And TikTok, ignored by nearly every Moroccan cultural attraction, offered a 12-22 MAD CPM on a parents-and-young-adults audience still under-monetized. We split the work: Google Ads Search + Performance Max for pure intent capture (family outing Rabat, zoo Morocco, kid activity Rabat); Meta Advantage+ Shopping and Lead with immersive 9:16 video creatives targeting families within 80 km of Rabat and Casablanca; TikTok Smart+ with Spark Ads UGC shot on site for the 18-30 weekend audience. Explicit rejects: no classic Google Display (low CPM, lower quality), no Snapchat (parent audience too thin in Morocco), no paid performance influencers during the measurement window to keep attribution clean.

  • Golden rule: no scaling without offline measurement down to the scanned ticket.
  • 100% server-side tracking: GTM SS + Meta CAPI + Offline Conversions API.
  • Three complementary channels rather than one: intent + reach + young adult.
  • Media budget capped at 35,000 MAD/month, atelier fees on a fixed MAD retainer.
03

Execution · day 0 to day 90, week by week

Weeks 1 and 2, we shipped the measurement base before the first dirham of media. GTM Server container provisioned, zoo.webotic.cloud subdomain wired in DNS, Consent Mode v2 implemented to stay compliant with Law 09-08 and the CNDP. Meta pixel migrated to server-side CAPI with event_id deduplication, GA4 connected server-side, then the Offline Conversions API plugged into the ticketing database to feed back every ticket scanned at the park entrance with the originating click identified within 24 hours. Week 3, account structuring: three Meta campaigns (family prospecting Rabat 80 km, family prospecting Casa 80 km, 30-day site retargeting), one Google Search campaign with 12 intent-based ad groups, one Performance Max campaign powered by a manual feed, one TikTok Smart+ Conversions campaign. Week 4, live launch with media budget ramped progressively: 12,000 MAD in month one to let the Meta ad sets exit the learning phase (50 events / 7 days minimum), then 26,000 MAD in month two, 35,000 MAD in month three. On creative, the atelier produced 14 assets in 30 days in-house: 6 immersive 15-second videos shot on site with two test families, 4 static carousels staging the headline animals (panthers, big cats, primates), 4 TikTok Spark Ads UGC scripts. Weeks 5 to 8, first optimization wave: we cut two underperforming Meta ad sets (CPA above 32 MAD/click-ticket while the median was running at 19), reworked the creative angles (family humor > animal pedagogy, CTR gap ×2.1), and pivoted Google PMax to custom audience signals. Weeks 9 to 12, clean scaling: a 1% lookalike audience built on 90-day ticketing buyers fed back through Offline Conversions, Meta CBO activated on prospecting ad sets, and TikTok Smart+ switched to Purchase optimization (no longer click) once it hit 50 daily events. No technical incidents over the window. Three 30-minute steering calls a week, a Looker Studio dashboard streamed live to management and the head of ticketing.

  • W1-W2: server-side measurement base shipped before the first dirham of media.
  • W3-W4: three-channel structuring, progressive ramp 12k → 35k MAD/month.
  • W5-W8: weak ad sets cut, creative pivot family humor > pedagogy.
  • W9-W12: 1% lookalike on offline buyers, Meta CBO, TikTok on Purchase.
04

Results · numbers measured at day 90

Over the 90-day window, the full setup delivered a visitor CPA of 24 MAD against 37 MAD at pre-campaign baseline — that is −35%. Media spend ROI, calculated on tickets actually sold and scanned (not on the click), settled at ×4.2: for every 1 MAD invested in media, 4.20 MAD of tickets measured at funnel exit, excluding annual passes. Total attendance during off-peak periods (outside school holidays and public-holiday weekends) climbed 45%, right at the upper end of the original brief. Site traffic from Rabat and Casablanca jumped 180%, with 62% of it coming straight from Casablanca, an audience the park's organic communication was barely touching. Per-channel CPA breakdown: Google Ads Search 18 MAD (sharp intent, capped volume), Meta Advantage+ 22 MAD (volume engine, 58% of attributed tickets), TikTok Smart+ 31 MAD at day 90 but on a continuous downward curve (young weekend audience, lower lifetime value but measurable incremental reach). On tracking, the final audit confirmed a 31% conversion recovery vs a client-side only setup — a figure consistent with the 25-35% range expected on the Moroccan market in 2026. On seasonality, the park held its attendance through the February-April off-peak window with a +45% positive gap vs the same 2025 period, and in April the board approved the renewal of the setup on a 12-month rolling basis with media budget lifted to 48,000 MAD/month to cover the Ramadan and Aïd holidays.

  • Visitor CPA 24 MAD vs 37 MAD baseline · −35% over 90 days.
  • Media ROI ×4.2 measured on scanned tickets (not clicks) · 4.20 MAD revenue / 1 MAD media.
  • Attendance +45% outside school holidays · site traffic +180% Casa+Rabat.
  • Server-side tracking: 31% conversion recovery vs client-side only setup.
  • 12-month renewal approved · budget lifted to 48,000 MAD/month.

Webotic completely changed our digital approach. The results went past what we expected, especially during the months when filling the park was hardest.

Marketing DirectorZoo de Rabat

FREQUENTLY ASKED QUESTIONS

Have you worked with other culture or leisure operators in Morocco?
Yes. Beyond Zoo de Rabat, the atelier runs media-buying accounts for brick-and-mortar venues, restaurants, event halls and leisure operators across Casablanca, Rabat and Marrakech. The seasonality + offline attribution + family audience pattern shows up on most of those briefs, and the server-side playbook transfers directly.
How long before the first measurable results?
The first clean media signals show up in week 3 or 4, the time Meta and TikTok need to exit the learning phase (50 events / 7 days minimum per ad set). The CPA curve drops sharply between day 30 and day 60. The ×4.2 ROI was hit at day 90 on the Zoo account, after the second creative optimization wave and the switch to a lookalike on offline buyers.
What minimum budget to replicate this kind of result?
On a park, a museum or a leisure venue with online ticketing, the pragmatic floor sits at 25,000 MAD/month of media spend across all channels, excluding atelier fees and creative production. Below that, the three-channel mix breaks down because none of the three gets enough signal to optimize. The full month-one entry ticket (tracking setup + creatives + first media) starts at 32,000 MAD.
Is server-side tracking mandatory for this result?
Practically, yes. With a Moroccan family audience that consumes heavily on Safari iOS, client-side tracking alone loses 25 to 35% of conversions — including ticketing buyers. Without GTM Server + Meta CAPI + Offline Conversions API connected to the physical ticketing system, the measured CPA is mechanically inflated by 30% and the Meta algorithm optimizes on the wrong signal.
Does TikTok actually work for a zoo or a family attraction in Morocco?
For families with young children, Meta still wins on CPA. For the 18-30 year-old adults who drive weekend outing decisions in Casa and Rabat, TikTok Smart+ with Spark Ads UGC shot on site delivered measurable incremental reach, with a CPA of 31 MAD at day 90 and a continuous downward curve. It complements Meta rather than replacing it.
FREE AUDIT · 30 MIN

An attraction, a museum, a venue to fill? We look at your setup in 30 minutes

You give us read-only access to your Meta and Google Ads accounts and to your ticketing system. Within 48 hours we come back with a short document: server-side tracking, account structure, offline attribution, three quantified levers to activate the following week. No pitch, no slides — just the audit. If a collaboration does not make sense, we say so directly.

Request my audit