Ad Reporting and Attribution

Native customer-facing payment failure notifications for SaaS sub-accounts
The problem: When a SaaS sub-account's payment fails, the only current lever is to pause the sub-account — and it fires instantly on a single failed charge. The agency gets a notification, but there's no built-in way to notify the customer. So the first thing the client experiences is everything breaking: workflows paused, marketplace apps dead, features offline — with no heads-up that a card just failed. The pain scales with the agency. The current workaround is to manage dunning entirely through Stripe's own reminder/failed-payment emails, which works but lives outside GHL and means the customer-facing communication is disconnected from the CRM. The ask: A native, agency-configurable setting — attached to the home/agency sub-account, since GHL already knows which sub-account is the SaaS home — that automatically notifies the customer when their payment fails. Ideally: Trigger a customizable email/SMS to the client on payment failure ("Your payment didn't go through — please update within X days or services will pause"). A configurable grace period before the pause actually takes effect, so a single failed charge doesn't instantly kill a live account. Templates the agency can brand/customize, routed through the SaaS home sub-account. Why it matters: Right now the pause is punitive and silent from the client's side. A grace window plus native dunning notifications would cut support tickets, recover more failed payments, and stop a one-time card decline from taking down a customer's entire operation in real time. This would be a big win for anyone running SaaS mode at scale.
3
Filter conversation threads by automated vs. one-to-one messages (while keeping inbound replies visible)
Problem In high-automation accounts, real one-to-one conversations get buried. A contact replies to an automated email or SMS, and by the time staff open the thread there are 20+ automated sends stacked on top of it. The existing automated/manual filter doesn't solve this: an inbound reply to an automated message is attached to the automated thread, so filtering to "manual" drops the reply out of view, and filtering to "automated" buries it again. Keyword search doesn't help either, because you don't know what the customer said — that's the thing you're trying to find. Real impact: I run a loyalty program that sends scheduled follow-ups across ~200 locations. A customer told me they liked the product but weren't sure they could use it, because there was too much noise in the inbox to find actual replies. Proposed solution A thread-level view toggle that separates conversation signal from automation noise: Collapse or hide outbound automated messages in the thread, while always keeping inbound messages visible regardless of what they replied to Treat inbound replies as first-class: an inbound message never gets filtered out by an outbound-automation filter Make it a saved/pinnable view so staff don't rebuild it each time Ideally the same distinction is available as a smart-list / conversation filter, not just an in-thread toggle Why it matters Response time and SLA depend on staff finding real replies fast. "Jump to unread" helps once, but doesn't fix the noise problem at scale — and the more automation an account runs, the worse the inbox gets. Related: the reply-to address on campaigns always resolves to the sending domain, which removes another signal that could distinguish these threads.
1
Support WhatsApp BSUID for Contact Matching (Meta Username Privacy Update)
As of June 2026, Meta is rolling out WhatsApp usernames, allowing users to hide their phone numbers by default. When a user adopts a username, businesses will no longer receive their phone number via webhook. Instead, Meta will deliver a Business Scoped User ID (BSUID), a unique identifier per business account. Currently, GHL identifies and matches contacts exclusively by phone number. This means that once a contact adopts a WhatsApp username and hides their number, any incoming message from that contact will either fail to match an existing contact record, create a duplicate, or simply land as an unassigned conversation in the inbox. For businesses using GHL with direct Meta integration, this is not a hypothetical edge case. It will affect real conversations, automations, and workflow triggers that rely on contact identification. And also unable to reply even tho it's still under 24 hrs window chat for Mobile Apps(Lead Connector) Requested solution: Store and index the BSUID returned by Meta's webhook as a secondary contact identifier, alongside the phone number. When an incoming WhatsApp message carries a BSUID, GHL should attempt to match it against existing contacts before creating a new record. This would preserve conversation history, workflow context, and contact data integrity as Meta's username rollout expands. This is a foundational fix that will become increasingly necessary as WhatsApp username adoption grows throughout 2026 and beyond.
0
Load More