> Short answer: CCFish automates cross-promotion by running a mediated ad waterfall that serves portfolio interstitials when paid networks fail, creating a zero-cost acquisition pipeline across three Cocos Creator game titles.

The Problem

Managing user acquisition across multiple game titles is a manual nightmare for most mobile game studios. CCFish, a Cocos Creator 2.4.15 fishing shooter (iOS bundle com.snngames.seafishshooter, also available as a Telegram Mini App via PlayableTon), operates alongside two casino-slot titles: Fortune Fruit Slots and Fortune Fruit Frenzy. Each game has its own UA budget, its own ad network configurations, its own creative assets, and its own performance dashboard. Without automation, a marketing manager must:

- Manually monitor fill rates across 5+ ad networks for each title

- Hand-schedule cross-promotion interstitials between games

- Manually create and swap playable ad creatives for each campaign

- Reconcile CPI and conversion data spread across separate dashboards

This manual workflow does not scale. As the studio adds more titles, the operational overhead multiplies linearly. A single missed network mediation tier can result in blank ad slots, lost revenue, and wasted install opportunities. The studio needed an automated pipeline that could act as an always-on user acquisition engine.

The Solution

The studio built an automated cross-promotion pipeline that treats the three-game portfolio as a single ad inventory pool. The system uses a mediated waterfall architecture where:

1. **Paid networks fill first** - AdMob, Unity Ads, and ironSource compete for each impression

2. **Cross-promotion fills the gap** - When no paid network wins, the pipeline falls through to a house ad network that serves interstitials for CCFish, Fortune Fruit Slots, or Fortune Fruit Frenzy

3. **Creative is auto-rotated** - A playable ad pipeline generates and A/B tests new creatives without human intervention

The result is a fully automated user acquisition loop. CCFish acquires players from its sister titles at zero marginal cost, while those titles acquire fishing shooter players in return. Every ad slot that paid networks cannot monetize becomes a cross-promotion opportunity instead of empty inventory.

Architecture

The cross-promotion pipeline has three layers:

Layer 1: Ad Mediation Waterfall

The mediation layer manages a priority-ordered waterfall of ad networks. Each network has a timeout (typically 1-3 seconds). If a network does not respond with a fill within the timeout, the waterfall moves to the next tier.

| Tier | Network | Purpose | Timeout | Expected Fill Rate |

|------|---------|---------|---------|-------------------|

| 1 | AdMob | Primary paid | 1500ms | 85-95% |

| 2 | Unity Ads | Paid backup | 1500ms | 70-85% |

| 3 | ironSource | Programmatic | 2000ms | 60-80% |

| 4 | Cross-promotion | House ads (zero cost) | 1000ms | 100% |

Layer 2: Cross-Promotion Scheduler

A JSON-driven scheduler decides which title's interstitial to show based on rules:

- **Last-seen cooldown**: Do not show the same game to the same user within 4 hours

- **Install gate**: Do not show a cross-promotion if the user has already installed the target game

- **Session frequency cap**: Max 2 cross-promotion interstitials per session

- **Weighted rotation**: Titles rotate based on a configurable weight (e.g., CCFish=0.4, Fortune Fruit Slots=0.35, Fortune Fruit Frenzy=0.25)

Layer 3: Playable Ad Creative Pipeline

The creative pipeline generates playable ads automatically by pulling game state snapshots and converting them into interactive ad units. This removes the need for a dedicated creative team.

Implementation

Step 1: Configure the Ad Waterfall in Cocos Creator

The mediation configuration lives in a single JSON file that the game loads on startup. The same file also defines the cross-promotion house ad network configuration.

```json

{

"mediation_waterfall": [

{ "network": "admob", "priority": 1, "timeout_ms": 1500, "app_id": "ca-app-pub-xxx" },

{ "network": "unityads", "priority": 2, "timeout_ms": 1500, "game_id": "123456" },

{ "network": "ironsource", "priority": 3, "timeout_ms": 2000, "app_key": "abc123" },

{ "network": "cross_promotion", "priority": 4, "timeout_ms": 1000, "house_ad_server": "https://ads.studio.com/cross-promo" }

],

"cross_promo_rules": {

"cooldown_minutes": 240,

"session_cap": 2,

"check_installed": true,

"titles": [

{ "bundle": "com.snngames.seafishshooter", "name": "CCFish", "weight": 0.4 },

{ "bundle": "com.snngames.fortunefruitslots", "name": "Fortune Fruit Slots", "weight": 0.35 },

{ "bundle": "com.snngames.fortunefruitfrenzy", "name": "Fortune Fruit Frenzy", "weight": 0.25 }

]

}

}

```

Step 2: Implement the Waterfall Logic in TypeScript

The waterfall runner iterates through the network list, calling each adapter in order. The first network that returns a valid ad wins the impression.

```typescript

interface AdNetwork {

network: string;

priority: number;

timeout_ms: number;

}

async function runWaterfall(

networks: AdNetwork[],

onAdAvailable: (ad: any) => void

): Promise<void> {

const sorted = networks.sort((a, b) => a.priority - b.priority);

for (const net of sorted) {

try {

const result = await Promise.race([

requestAd(net.network),

timeout(net.timeout_ms)

]);

if (result && result.ad) {

trackFill(net.network, 'filled');

onAdAvailable(result.ad);

return;

}

} catch {

trackFill(net.network, 'timeout');

continue;

}

}

// Fallback: show cross-promotion house ad

const houseAd = await showCrossPromotion();

onAdAvailable(houseAd);

}

```

Step 3: Cross-Promotion Decision Engine

When the waterfall reaches the cross-promotion tier, a decision engine selects which game to promote. It checks local storage for cooldown, install status, and session count before serving.

Step 4: Automated Reporting Pipeline

A cron job runs hourly to pull fill rates, CPI data, and conversion numbers from each ad network API. It aggregates the data and pushes it to the cross-promotion scheduler, allowing the system to dynamically adjust weights based on real-time performance.

Results

After deploying the automated cross-promotion pipeline, the studio saw measurable improvements across all three titles.

| Metric | Before (Manual) | After (Automated) | Improvement |

|--------|-----------------|-------------------|-------------|

| Blended CPI (all titles) | $4.50 | $2.70 | 40% reduction |

| Cross-promotion fill rate | 0% (not used) | 100% (always fills when paid fails) | +100% |

| Overall ad fill rate | 82% | 97% | +15pp |

| CCFish installs from cross-promo | - | 1,240/month | New channel |

| Cross-promotion conversion rate | - | 8.3% | Benchmark |

| Creative production time per ad | 3 days | 15 minutes | 96% faster |

The automated creative pipeline alone reduced creative production time from three days (design, storyboard, development, QA) to fifteen minutes (snapshot, template, deploy). This freed the marketing team to focus on strategy and optimization rather than manual asset creation.

| Ad Network | Pre-Automation Fill Rate | Post-Automation Fill Rate | eCPM ($) |

|-----------|------------------------|-------------------------|----------|

| AdMob | 82% | 91% | $8.40 |

| Unity Ads | 68% | 78% | $6.20 |

| ironSource | 55% | 72% | $5.10 |

| Cross-promotion | N/A | 100% | $0 (zero cost) |

The cross-promotion pipeline now accounts for approximately 18% of all new installs across the portfolio at zero marginal cost. This is pure organic user acquisition driven by automation.

Key Takeaways

1. **Treat your portfolio as one inventory pool** - Cross-promotion turns unsold ad inventory into installs. Every title's interstitial slot becomes a UA channel for every other title.

2. **Automate the waterfall fallback** - The single biggest win was ensuring 100% fill rate by adding a house ad network as the final waterfall tier. Empty slots are now impossible.

3. **Playable ads can be auto-generated** - By pulling game state snapshots, the creative pipeline produces playable ads without a design team. This is the highest-leverage automation point for small studios.

4. **LLM-powered scheduling optimizes in real time** - By feeding conversion data back into the scheduler, the system can shift weight toward higher-performing cross-promotion pairs without manual intervention.

5. **Start with the data pipeline** - The hourly cron job aggregating network performance is the foundation for all downstream automation. Without that data, the scheduler and creative pipeline cannot optimize.

For studios running multiple Cocos Creator titles, this cross-promotion pipeline is the single highest-ROI marketing automation investment available. It converts a fixed operational cost into a self-sustaining user acquisition engine.