One live, high-level read on every BINA landing page and client — classified by performance, refreshed automatically each week. It answers: what's making money, what's leaking it, what to scale, and who to call — across all clients and departments.
A single-file web app (index.html) hosted on Vercel. A weekly cron rebuilds the dataset and stores it in Vercel Blob; the app reads it from /api/data. No browser or manual export needed — everything is API-driven.
| Source | What it provides |
|---|---|
Base44 | Live roster: clients, landers + LPIDs, CPL/CPA targets, monthly budget, service areas, account manager / media buyer. |
Meta Ads API | Spend, clicks, CPC, CTR, CPM, impressions + per-creative Hook / Hold (fetched live in Creatives/Alignment). |
GHL · getPortfolioConversions | Leads, appointments, CPL, CPA, lead→appointment % per lander. |
Analysis baseline | Funnel step counts, pixel-event status, page↔ad alignment, creative notes. |
The Landers tab breaks "insufficient" into actionable buckets instead of one pile:
| Bucket | Meaning |
|---|---|
| ⏳ Ramping | A few leads (1–9) — still building signal, may graduate to a verdict. |
| 💀 Dead | Zero leads on live spend — dormant or wasting budget (sorted by spend). |
| Runs on Google, not Meta — low Meta volume is expected, judged separately. |
Landers now carry Meta AND Google spend — a Google lander with spend is judged on CPL/CPA exactly like Meta (see the channel filter). Only true organic landers (no ad spend at all) are judged on lead→appointment % (client follow-up); their status prefix is organic_*.
| Metric | Good ✅ | Gray zone | Bad 🚨 |
|---|---|---|---|
| LP Conv% | ≥ 5% | 3–4.9% | < 3% |
| CPL | ≤ $80 | $81–$149 | ≥ $150 |
| CPA | ≤ $450 | $451–$999 | ≥ $1,000 |
Each ad is scored from its Meta metrics — not one make-or-break rule. Every metric becomes a sub-score from −1 (its bad line) to +1 (its good line); the weighted average sets the verdict. Hover any creative card to see the exact breakdown.
| Metric | Good | Bad | Weight |
|---|---|---|---|
| CTR — clicks ÷ impressions | ≥ 1.5% | ≤ 0.8% | 2× |
| CPC — $ per click | ≤ $1.50 | ≥ $3.00 | 2× |
| CPM — $ per 1,000 impr | ≤ $20 | ≥ $50 | 1× |
| Hook — 3-sec views ÷ impr (video) | ≥ 30% | ≤ 15% | 1.5× |
| Hold — 25%-watched ÷ impr (video) | ≥ 25% | ≤ 12% | 1× |
| Stage | Metric | What it measures | Better |
|---|---|---|---|
| Meta ads | CTR | % of impressions that clicked. Creative pull. | ↑ |
| CPC | Cost per link click. | ↓ | |
| CPM | Cost per 1,000 impressions — cost of reach. | ↓ | |
| Hook / Hold | Video stopping power / retention (video ads). | ↑ | |
| Landing page | LP Conv% | % of clicks that submitted the form. Page quality. | ↑ |
| Leads | Form submissions in the window. | ↑ | |
| CPL | Spend ÷ leads. Cost per lead. | ↓ | |
| Leads/$1k | Leads per $1,000 spent — efficiency at a glance. | ↑ | |
| Appointments | Appts | Booked appointments from this lander's leads (GHL). | ↑ |
| L→A% | % of leads that became appointments. Lead quality / speed-to-lead. | ↑ | |
| CPA | Spend ÷ appointments. Cost per appointment. | ↓ |
The Report routes every action to the team that can fix it.
| Department | Owns | Typical action |
|---|---|---|
| 🎨 Creative | Ad performance — CTR, hook, CPC, fatigue. | Refresh losing creatives; double down on winners. |
| 🔨 Funnel | Landing page + tracking — LP conv, pixel. | Fix low-converting pages & broken CompleteRegistration pixels. |
| 📞 Accounting | Client outcomes — CPA, lead→appt, off-CRM. | Call clients with high/rising CPA or slow follow-up. |
| 📊 Media | Budget allocation — dead spend, overspend, scaling. | Pause dead landers; shift budget to winners. |
The Dashboard adapts to who's logged in: COO sees the portfolio, Account Manager sees CPA / lead→appt per client, Media Buyer sees campaign performance, Tech sees pixels & page conversion.
The Report is now a pure reporting view — metrics, charts and trends, no to-do items (those live in the Suggestions tab). It answers "how is the whole business performing," anchored on the CPA ≤ $400 north-star.
| Section | Shows |
|---|---|
| 📊 Scorecard | Spend, Leads, Appts, Blended CPL, Blended CPA ★, landers/clients — each with the week-over-week delta. |
| 🔽 Conversion funnel | Clicks → Leads → Appts with the drop-off % and cost at each stage — shows exactly where volume leaks. |
| 🎯 CPA health | % of spend producing ≤$400 appointments, plus the lander CPA distribution. |
| 📈 By segment | Spend & CPA per media buyer / vertical / state / account manager (pivot selector). |
| 🧹 Portfolio mix | Status donut, appointments by source (Meta vs Google), headline↔ad alignment. |
| 🩺 Page & creative health | Pixel-firing %, average CTR, misaligned pages, funnel-length distribution. |
| 📉 Trends | Weekly spend / appointments / blended CPA lines — accumulate every Monday. |
| Lander | A landing page — the quiz/form funnel an ad sends traffic to. |
| LPID | Landing-page ID — the unique key that matches a lander to its Meta ads (via the adset name). |
| Funnel steps | How many screens the funnel has before the contact form. Read from the page's own "Question X of N" counter. |
| CompleteRegistration | The Meta pixel event for a form submit. If it's not firing, Meta optimizes blind even though leads arrive in GHL. |
| Off-CRM 📵 | A client whose leads aren't tracked in our GHL — so their lead→appt / CPA may be unreliable. |
| Channel | meta / google / both — all judged on CPL/CPA. Only organic (no ad spend) is judged on lead→appt. Filter by channel in the lander views. |
| Migration state | Activity flag: active (spending), stalled, stopped, or organic (Google). |
| Blended | A portfolio/client rollup computed from summed totals (e.g. total spend ÷ total leads), never an average of averages. |
| Target CPL / CPA | The client's goal cost per lead / appointment. Defaults when unset: CPL $75, CPA $400. |
| Setting | Default | Controls |
|---|---|---|
min_leads | 3 | Below this = Insufficient. |
win_lp_conv / lose_lp_conv | 5% / 3% | LP Conv% good / bad lines. |
win_cpl / lose_cpl | $80 / $150 | CPL good / bad lines. |
win_cpa / lose_cpa | $400 / $1,000 | CPA good / bad lines. |
cpa_max_reliable | $2,000 | CPA above this is ignored (tracking gap). |
lose_flags_needed | 2 | Bad metrics needed for Losing. |
| Metric | Good / Bad | Weight |
|---|---|---|
| CTR | 1.5% / 0.8% | 2× |
| CPC | $1.50 / $3.00 | 2× |
| CPM | $20 / $50 | 1× |
| Hook | 30% / 15% | 1.5× |
| Hold | 25% / 12% | 1× |
CPL target falls back to $75 and CPA target to $400 when a client hasn't set one. At-risk = CPA >20% over target or ≥15% higher than last week.
cron/baseline.json.A Vercel Cron runs every Monday 13:00 UTC — fully automated, no browser. It calls /api/refresh, which rebuilds the dataset and writes it to Vercel Blob.
/api/data — reopen to see the latest.| Dashboard | Role-based overview (COO / Account Mgr / Media / Tech). |
| Metrics | Full per-lander spreadsheet, groupable + CSV export. |
| Creatives / Alignment | Ad-level scores; page↔ad side-by-side. |
| Landers | Every lander grouped by status (cards / list / compact). |
| Report | Analytics dashboard — funnel, CPA health, per-segment performance, trends. |
| Suggestions | Prioritized "fix this ASAP" list — kill / fix / rebuild / call / scale. |
| Notes | File a fix / edit / add ticket for the team. |
| Ask AI | Natural-language questions about any client or lander. |
Ping Itai — he owns this dashboard and the GHL automations.