Viewing
Reporting window
Revenue, retention, margin & portfolio health — the agency's own numbers, not client campaign stats.
$184.5K
Retainers + management fees
+6.2%$1.2M
Total client ad spend controlled
+9.1%$3,618
MRR ÷ active clients
+2.4%58%
Revenue − media − delivery labor
+1.8pts51
Currently managed
+3 net+3
New − churned this month
+5 new / −2 churn3.9%
Lost this period
−0.6pts34%
Top 10 clients as % of MRR
stableRevenue by niche
Client health distribution
38 healthy · 8 at-risk · 3 paused · 2 churned this quarter
Cohort retention
| Cohort | Started | Retained | Rate |
|---|---|---|---|
| Q1 2025 | 9 | 7 | 78% |
| Q2 2025 | 11 | 9 | 82% |
| Q3 2025 | 13 | 11 | 85% |
| Q4 2025 | 15 | 14 | 93% |
New business pipeline
Win rate 43% · avg deal $3,800
Showing placeholder figures · agency financials (revenue, margin, churn, pipeline) need a PHYNYX-internal source to go live.
Scanning the live payload…
Loading tickets…
Showing demo tickets · connect the support desk in Settings → Tokens & integrations for live items.
CRM paid leads vs Meta paid-media leads - where they disagree and how to reconcile.
Walkthrough to attach the CRM agency account + Meta, then wire Slack for notifications. No sub-accounts mapped yet.
CRM agency account
Appointments, confirm/show rates, sign-ups
- 1
Create a private-integration app
In the CRM Agency view, create a private-integration app (or a marketplace app) and grant it access to the agency so it can list every sub-account location. - 2
Copy the agency access token
Copy the agency (company) access token the app generates. This one token lists locations and reads appointments/opportunities for each. - 3
Store it as a server secret
Add it as a secret namedCRM_API_TOKEN. The server reads it inside each call (call-time) — it never reaches the browser. - 4
Confirm calendar statuses
The funnel counts “confirmed” and “showed” appointments — confirm your location calendars use statuses the agent recognises (CRM_CONFIRMED_STATUSES,CRM_SHOW_STATUSES).
Meta Marketing API
Spend, CPL, CTR, paid-media leads
- 1
Create a Meta system user
In Meta Business Manager, create a system user with ads_read on the ad accounts, then generate a long-lived token. - 2
Store the token + app secret
Add the long-lived token asMETA_ACCESS_TOKENand the app secret asMETA_APP_SECRET(used for the appsecret_proof on every call). - 3
Map each client's ad account id
For each sub-account, set the real ad account id in the formact_<digits>. The id itself isn't a secret — placeholder display names in the roster are skipped as “not connected.” - 4
Verify lead action types
Leads come from theactionsarray on ad insights — confirm your campaigns emit a lead action type the agent counts (e.g.lead,offsite_conversion.fb_lead_add).
Slack
Alerts & notifications
- 1
Create a Slack incoming webhook
In a Slack app (or via the Incoming Webhooks feature), enable incoming webhooks and pick the channel LeadPulse should post to. - 2
Store the webhook URL
Copy the webhook URL and add it as a secret namedSLACK_WEBHOOK_URL. The server posts alerts to that URL. - 3
Send a test notification
Use the Send test notification button below — it posts one message so you can confirm the channel is wired.
Slack notifications
Add SLACK_WEBHOOK_URL to enable alert notifications.
Secrets are read on the server only and never reach the browser. The CRM agency token lists every sub-account live, so the client switcher reflects the real roster the moment it's connected.