Case studies Storyseller Systems, 4 min read

Driving ₱5M Revenue from Meta Ads for a Complex B2B Service

Role. Social Media Strategist. Marketing team of two (myself and a video editor) reporting into a leadership team of a CEO, a tech lead, and two engineers.

₱5M
closed revenue
₱20
cost per qualified lead
~6 months
of running ads

Context

Storyseller Systems sells a high-ticket, customized “business command center” system. It centralizes data across operations like inventory, sales, and expenses, eliminates manual reporting between departments, and gives business owners real-time visibility into how the business actually runs.

The reality:

Deal size ran ₱250K to ₱1M+ per client, on a consultative sales cycle rather than an impulse buy, for a product that was highly technical and hard to explain in a single ad. Before ads, leads came mostly from referrals and networks like BNI. Demand was inconsistent and non-scalable, and even internally, messaging wasn’t clear. The business had no reliable acquisition engine.


Challenge: Selling Something People Don’t Know They Need

The core problem wasn’t just traffic. It was awareness + perception. Business owners didn’t realize they had a problem in the first place. The product felt “non-essential” at first glance, cheaper alternatives like Google Sheets and basic dashboards already existed, and there was no strong proof of concept in the ads themselves. Even worse, the previous agency had produced generic, surface-level ads that generated clicks but no real conversations. The issue wasn’t the ads. It was messaging and positioning.


Insight: Sell the Pain, Not the Product

Once I deeply understood the business, the shift was clear:

You don’t sell dashboards. You sell the cost of not having clarity.

Instead of explaining features, we reframed everything around losses, missed savings, and operational blind spots, and most importantly around problems only larger businesses would recognize. That distinction naturally filtered out low-quality leads before they ever reached a call.


Strategy: Build a Messaging-First Ad System


1. Numbers-First Hook Frameworks

We tested multiple high-impact angles:

Loss framing (best performer)

  • “This contractor lost ₱10,000,000 on one project…”

  • “You could be losing ₱10M–₱20M without realizing it”

Savings framing

  • “You’re missing out on saving ₱20M in your projects”

Fear of missing out

  • “90% of construction businesses are making this mistake”

Iteration insights:

The ₱10M range got a strong response. Go lower and it was ignored, go higher and it stopped being believable. The key was credible, painful numbers.


2. Industry-Specific Focus (Critical shift)

Instead of broad targeting, we narrowed down to one primary winning industry: Construction. It had clear cost structures, large and measurable losses, and a strong emotional response to inefficiency that other industries didn’t share. We later expanded into Distribution (using the same blindness-and-loss framing) and Manufacturing, which sat close enough to distribution to transfer directly.


3. Creative Testing System

We didn’t just test ads. We tested variables systematically.

Each cycle (every ~2 weeks):

  • ~10 creatives live at once

  • Variations in:

  • hooks (loss vs savings vs FOMO)
  • scripts
  • visuals
  • speaker (male vs female)
  • attire (casual vs industry-aligned)

Unexpected but critical findings:

  • Industry-aligned appearance matters: a formal, engineer-like presenter read as more trustworthy than a casual one

  • Long-form ads outperform short: more context led to better-qualified leads, not just more clicks

  • Speaker matters: male presenters consistently performed better in construction

This wasn’t guesswork. It came from repeated testing.


Audience Targeting: Qualifying Through Messaging

Initially, we generated thousands of messages, but many of those leads couldn’t actually afford the service. Instead of changing price, we changed who the ads spoke to.

Key shift:

We designed messaging that only larger companies would relate to: large-scale losses (₱10M+), complex operational problems, multi-department coordination issues. That naturally filtered small businesses out and qualified buyers in, before a single message was even sent.


Funnel: Ad → Message → Call → Close

The funnel was simple, but intentional:

  1. Ad: a high-emotion, problem-driven hook

  2. Message (Messenger): initial qualification and problem validation

  3. Discovery Call: a deep dive into operations to demonstrate value

  4. Close: a high-ticket contract

A qualified lead could relate to large-scale operational problems, was comfortable with high-ticket pricing, and had complexity that was genuinely worth solving.


Optimization: Learning From Real Conversations

We didn’t rely only on metrics. We read messages daily, analyzed objections, and pulled insights straight from sales calls, then fed those insights back into the ads and iterated the messaging continuously. Conversations were the primary signal; CTR and frequency were supporting signals; message quality mattered most of all.


Results

Over ~6 months of running ads:

  • ₱5M in closed revenue

  • ₱3M in receivables

  • ~₱5M+ in pipeline (unsigned but active deals)

Efficiency:

  • ~₱20 cost per qualified lead

Additional impact:

  • Shift from referral-based to scalable acquisition

  • Clear messaging across the entire business


Key Wins

  • Construction became a repeatable acquisition channel

  • Messaging clarity improved sales conversion

  • Distribution strategy expanded into new industries


Takeaway

If the product is complex, the ad has to be simple, specific, and painful. That’s the rule this campaign ran on.

Three decisions made the difference:

  • Making an invisible problem (operational blindness) visible with real numbers

  • Narrowing to one industry where the pain was measurable, not abstract

  • Filtering for buyers who could afford to care, instead of chasing volume

None of that shows up in a media buying dashboard. It shows up in the DMs, which is why reading conversations, not just metrics, was the real optimization loop.

↑↓ to move, Enter to open, Esc to close