Performance at a glance

Attribution Last-Click · 28D
0 selected
Loading…

Creative that's earning its keep

Ad Spend CTR Conv CPA ROAS Status

Campaigns

Campaign Spend Impr. Clicks CTR CPC Leads Cost/Lead Schedules Cost/Sched Purchases Cost/Purch ROAS Status

Ad Sets grouped by audience targeting

Rolled up from ad-level data — one row per ad set.
Ad sets · ranked by spend

Audiences where your spend is landing

Client Intake · The Six A Frame

Brand Hub

Before we build anything, we map the business, the people, and every reason someone stops scrolling. The clearer this is, the more hooks, stories and CTAs we can pull from it later.

Fill in what you can. Leave the rest blank, we'll finish it together on the kickoff call. Nothing here is locked — the work starts at the brand level and ripples out from there.

Saved
01
What we sell

Product

Start with the thing. Every angle, hook, and story we write later is a translation of the product — the offer, the benefits, the price, the point of difference. The clearer this is, the sharper everything downstream gets. Even if it's a service, we word it as "product".

Loading…
03
Why we win

Authentic Positioning

Now we plant the flag. Looking at the competitor map above — where are we genuinely different, and where are we measurably better? Authenticity is the foundation; positioning is the angle we point it.

Positioning assets to collect
0 / 5
04
Who we win with

Audiences

The specific people we're building this for. Not "everyone" — the real humans whose lives change when they find your brand. Define up to three.

Audience assets to collect
0 / 5
05
Who we are

Archetype

The character the brand plays. The way it walks into a room. Not what it sells — who it is. Pick the one that feels most like the brand, use the examples as a gut-check.

Archetype assets to collect
0 / 4
06
What we say

The Hook Book

The hooks come first. Every hook is a different reason someone stops scrolling. Off the back of each one we build the story that earns the attention, then the CTA that turns it into a move. The more hooks documented here, the more content and ad variations we can pull later.

The Core Promise
Hook · the stop
Story · the hold
CTA · the move
Hook Book assets to collect
0 / 5
07
What we build with

Assets

Everything we need to actually do the work. What you have, what we build, what we need access to.

Brand assets · existing
0 / 12
Brand assets · to create
0 / 10
08
Reference

Business Info

Who we're working with and how to reach you. Kept at the bottom because it's reference — the strategy work above is what actually moves the brand.

0% complete

Projects what's getting done

Campaign Calendar what ships when

Mon
Tue
Wed
Thu
Fri
Sat
Sun

Goals start with why

Before the product, the brand, any of it — this comes down to why. Get honest about why this matters, what you want, and what you're willing to change. The right path shows itself.

Saved

Competitors who you're up against

Track who you're competing with, what they do well, and where you're different. Paste a URL — we'll grab the favicon.

Saved

Inspiration moodboards + references

Create moodboards per campaign, brand, or theme. Add images or text notes — captions, taglines, palette ideas.

Saved

Channels how you reach them

Delete 95% of the busywork. Pick which channels are on the table, then write the plan for each one you tick. Skip what doesn't apply.

Saved

Whiteboard journey maps & workflows

Drag from the toolbar to add a box. Drag boxes to move. Click the arrow handle on a box's edge, then click another box to connect. Double-click a box to rename. Delete key removes selected.

100%
Saved

Campaigns from angle to delivery

Campaigns → Angles + Avatar → Hooks (story, CTA) → Channels & Delivery. A campaign picks the angle and the avatar it speaks to. Inside are the hooks — each with a story and a call to action. When it's ready, pick the channels and either spin it into a project or schedule it on the calendar.

Loading…

Files & Notes links, docs, every asset

Loading…

Ad Tracking Setup true attribution from click to won deal

Step 1 · Paste the right template into each ad platform

Each platform has its own macro syntax. Paste ONCE per ad (or ad set) into the platform's URL Parameters field — the platform auto-fills the values for every click, forever.

Ads Manager → edit an ad (or ad set) → Tracking → URL parameters.

Uses Meta's own macros — {{campaign.name}}, {{adset.name}}, {{ad.name}} auto-substitute at click time. We also capture fbclid on the landing page (Step 2) for CRM match-back.

Step 2 · Paste this on your landing page (in the <head>)

Captures UTMs + Meta's fbclid + Google's gclid from the URL, stores them in a 30-day cookie (so visitors who click today and convert next week still get attributed), and injects the values into any matching hidden form fields.

<script>
(function () {
  var fields = ['utm_source','utm_medium','utm_campaign','utm_content','utm_term','fbclid','gclid'];
  var q = new URLSearchParams(location.search);
  var data = {};
  fields.forEach(function (k) {
    var v = q.get(k);
    if (v) {
      data[k] = v;
      // 30-day first-touch cookie — captures the FIRST click that brought them.
      document.cookie = 'br_' + k + '=' + encodeURIComponent(v) + '; path=/; max-age=' + (60*60*24*30) + '; SameSite=Lax';
    } else {
      var m = document.cookie.match(new RegExp('br_' + k + '=([^;]+)'));
      if (m) data[k] = decodeURIComponent(m[1]);
    }
  });
  // Fill any hidden form input whose name matches (utm_source, fbclid, etc.).
  Object.keys(data).forEach(function (k) {
    document.querySelectorAll('input[name="' + k + '"]').forEach(function (el) { el.value = data[k]; });
  });
  window.brTracking = data;
})();
</script>

Works on GHL Funnels (add via Custom JS block), Webflow, WordPress, plain HTML — anywhere you can drop a <script> tag. For page builders like Leadpages that expose "URL parameter → field mapping" natively, use that instead.

Step 3 · Add matching custom fields in GHL

Sub-account → Settings → Custom Fields → New Custom Field. Create these as Text fields on the Contact object:

utm_source utm_medium utm_campaign utm_content utm_term fbclid gclid

Then in your GHL form's Field mapping, connect each hidden form input (from Step 2) to the matching custom field so the value ends up on the contact record.

Step 4 · Verify + notify me
  1. Build a test URL below → click it in an incognito window → submit the form.
  2. Open the contact in GHL — you should see all UTM + fbclid fields populated.
  3. Ping me — I'll extend the GHL sync to read those fields and expose per-campaign / per-creative metric keys backed by real closed-deal revenue.
Advanced · Server-side CAPI (bypasses iOS/adblock limits)

Meta's Conversions API sends conversion events directly from your server to Meta, bypassing browser blockers and iOS 14+ tracking limits. When a lead converts in GHL, we hash their email + attach the stored fbclid and fire an event to Meta so their reporting matches back to the exact ad. Match rate typically jumps from ~55% (browser pixel) to 85–95% (browser + CAPI).

Needs a Meta CAPI access token from the ad account. When you're ready, tell me and I'll wire the GHL → BrandRipple → Meta CAPI bridge (~1 session).

Manual URL builder (for one-offs)
Recent URLs
Build a one-off URL to see it here.

Tracking what's firing, what's missing

Meta CAPI — closed-loop attribution

When a deal closes in GHL, we fire a server-side conversion event to Meta with the stored fbclid + hashed email. Meta then attributes the sale to the exact ad — Ads Manager ROAS becomes real, and Meta's optimiser learns from won deals (not just form fills).

Landing-page script health check

Paste a landing-page URL to check if the BrandRipple capture script is installed and firing. We fetch the page and look for the marker cookie the script sets, plus verify the form fields it targets.

What each signal buys you
Meta Pixel — browser-side event tracking. Shows in Ads Manager, drives lookalikes + retargeting. Blocked by ~30% of traffic (iOS 14+, adblockers).
Meta CAPI — server-side event tracking. Bypasses adblockers, matches ~85–95% of conversions (vs. ~55% pixel-only). Needed for accurate CPA in 2026.
GHL contact capture — attribution glue: UTMs on the click → hidden form field → contact record → sales report. Without this, closed deals have no ad source.
Landing-page script — persists UTMs + fbclid + gclid across sessions (30-day cookie) and auto-fills any form. Not needed for GHL Funnels (built-in), essential for custom landers.
Google Analytics — cross-channel session data. Useful but not the source of truth — GHL + Meta + Google Ads own their own numbers.

Updates from your account team

Leave blank for today, or set a past date to backdate

Chat with your account team

Loading conversation…

Customer Journeys

Ecommerce Funnel
Lead-gen Funnel

Touchpoints

Every Conversion Event

Connectors

Meta Ads API —
Auto-connected via your BrandRipple agency Meta access. Pick which ad account belongs to this client. New client? Add it to the System User's assets in Business Manager first.
"Sync all" pulls spend, impressions, clicks, ROAS, conversions per ad + per campaign + daily metrics, plus real creative images — direct from Meta Graph API.
Advanced — use a custom token for this client
Override the agency token for this client only (e.g., a client-owned token, or a User token instead of the System User). Leave blank to keep using BrandRipple's agency access.
GoHighLevel —
Per-client integration. Use the guide below to grab a Private Integration Token (PIT) and the client's Location ID, then paste both in.
How to connect GHL — step by step
  1. Log in to this client's GHL sub-account (not the agency view — switch clients if needed).
  2. In the left sidebar click Settings (the gear icon, near the bottom).
  3. In the Settings sidebar click Private Integrations. If you don't see it, ask the agency admin — it may be disabled at the agency level under Agency Settings → Private Integrations.
  4. Click Create New Integration. Name it something like BrandRipple Reporting.
  5. Tick these read-only scopes (search each one in the scope picker):
    contacts.readonly opportunities.readonly calendars.readonly calendars/events.readonly conversations.readonly locations.readonly forms.readonly
  6. Click Create. GHL will show the token once — it starts with pit-. Copy it immediately and paste it into the token field below.
  7. Grab the Location ID from the browser URL while you're still on the Settings page — it's the string between /location/ and /settings:
    app.gohighlevel.com/v2/location/abc123xyz/settings
  8. Paste both values below. Click Test first — a green "connected" pill means it works. Then click Save.
  9. Once saved, GHL metrics (pipeline value, appointments, cost per won deal, tag revenue, show rate) appear in the metric picker within a minute or so on the next sync.
Direct integrations —
Private API tokens per client. Data lands in the dashboard within seconds of connecting.
Metric mapping
Map a metric like Schedule to whichever Meta pixel event your client actually fires. Useful when bookings come through as lead or complete_registration instead of the native schedule event.

Settings

Display Name
Shown in the welcome block on the sidebar.
Reset Layout
Restore the default dashboard layout. This will replace any custom widgets you've added.