CRM & bookings
Ads.haus can read your CRM and your booking system so leads, pipeline stages, members, and appointments sit next to the ad spend that produced them — in Analytics, in the Growth Agent, and through the Claude connector. Both connections are read-only: Ads.haus never writes to your CRM, books anything, or spends anything through them.
Connect either one from Connections → Connect New → Business tools. Credentials are validated against the live API before they are saved, stored encrypted, and never shown again.
GoHighLevel (CRM)
Read-only: pipelines and stage counts, new contacts with their ad attribution (fbclid / gclid / UTM), won and lost deals, and calendar appointments. Ads.haus never writes to the CRM.
Connect
- In GoHighLevel, open the sub-account (location) to connect, then Settings → Business Profile and copy the Location ID (an agency admin can also read it from the sub-account URL).
- Go to Settings → Private Integrations → Create new integration (agency admins have this by default).
- Name it “Ads.haus” and grant exactly these scopes: View Locations, View Contacts, View Opportunities, View Calendars, View Calendar Events.
- Copy the token once it is shown — HighLevel never shows it again.
- In Ads.haus: Connections → Connect New → Business tools → GoHighLevel; paste the token and the Location ID. Ads.haus validates against the live API before saving and stores the token encrypted.
Scopes on the Private Integration, exactly as HighLevel labels them:
- View Locations (
locations.readonly) - View Contacts (
contacts.readonly) - View Opportunities (
opportunities.readonly) - View Calendars (
calendars.readonly) - View Calendar Events (
calendars/events.readonly)
Meta lead feedback loop (Conversions API for CRM) — configured inside GoHighLevel and Meta Events Manager; Ads.haus reports on the result
- Prerequisite: the leads must arrive through a native Meta Instant Form mapped in GoHighLevel (Settings → Integrations → Facebook → connect the Page, then map the lead form fields). Only those contacts carry the 15–16 digit Meta lead id the feedback loop keys on; contacts added by hand or from another funnel can never be matched.
- In Meta Events Manager (business.facebook.com/events_manager2) → Connect data sources → CRM → create a new dataset for CRM events (do not reuse the website pixel) and pick LeadConnector (HighLevel) as the partner. The dataset must live in the same Business Manager that owns the Facebook Page connected to this sub-account.
- Dataset → Settings → Conversions API → Generate access token; also copy the Dataset ID (GoHighLevel calls it the Pixel ID).
- Workflow 1 in GoHighLevel: trigger “Facebook Lead Form Submitted” (filter to the form) → action “Facebook Conversion API” with event type Lead, paste the access token and dataset id, stage name “New lead” → action “Create/Update Opportunity” in the right pipeline. Enable “Allow duplicate opportunities” and, in workflow settings, “Allow multiple”.
- Workflow 2: trigger “Pipeline Stage Changed” (the pipeline, any stage) → action “Facebook Conversion API”, event type Lead, stage name = the exact pipeline stage name, same token and dataset. Positive stages (Qualified, Interview booked, Hired) and negative ones (Disqualified, No show) both matter — Meta learns from the whole funnel.
- Back in Events Manager → the dataset → CRM setup: once events arrive, order the funnel stages and pick the stage to optimize for. Meta's published requirements for the Conversion Leads goal: at least ~200 leads a month, events uploaded at least daily, the target stage reached within 28 days, and a 1–40% conversion rate into it.
- In Ads Manager: campaign objective Leads → conversion location Instant Forms → performance goal “Maximize number of conversion leads” → select the CRM dataset and stage.
Troubleshooting
- “Dataset not found”, or the Conversion API action works in one sub-account but not another: the dataset belongs to a different Business Manager than the Page that sub-account's Facebook integration is connected to, or the Dataset ID was copied from the website pixel. Check Settings → Integrations → Facebook on the failing sub-account to see which Page (and therefore which Business Manager) it is bound to, then create the dataset there.
- Events send but Meta shows no matched leads: the contacts did not come through a mapped native Instant Form, so there is no Meta lead id to match on.
- Events Manager stuck on “waiting for CRM events”: too few events — HighLevel's own guidance is 50+ events across 7 days before the funnel view populates.
- Nothing arrives at all: the Facebook Page is not connected with admin permissions on the GoHighLevel side, or the workflow is not published.
Good to know: Private Integration tokens are static until rotated; HighLevel recommends rotating every 90 days (rotation keeps the old token alive for 7 days). Rotate by reconnecting in Ads.haus.
Momence (bookings)
Read-only: new and active members, appointments booked / checked in / cancelled with revenue, class bookings and fill rate, and (once Momence enables it) sales — shown next to the same window's ad spend.
Connect
- In the Momence host dashboard open Apps & Integrations → Developer API and click Add new client.
- Set the redirect URI to the exact callback shown in the Ads.haus connect dialog (it ends in /api/oauth/momence/callback) and save; copy the client id and client secret.
- In Ads.haus: Connections → Connect New → Business tools → Momence; paste the client id and secret, then approve the Momence login as a staff account with Host Dashboard access. Only that account's permissions are used.
- Optional: email Momence support to enable the Sales endpoint and outgoing webhooks for the studio — both are experimental and off by default; revenue stays hidden until Sales is enabled.
Ads that book directly
- Point the ad's destination at the studio's Momence booking page (a session, appointment board, or membership link) rather than the homepage.
- Momence does not record UTMs or click ids on members, so attribution is by timing: Ads.haus shows new members and bookings for the same window as the ad spend, plus cost per new member. Treat it as a directional read, not click-level attribution.
Troubleshooting
- Redirect URI mismatch on the Momence login page: the callback saved on the API client must match the one in the connect dialog character for character.
- HTTP 403 on a section: the staff account that approved the connection lacks that permission in the Host Dashboard; reconnect with an owner/admin account.
Ask the Growth Agent
The Growth Agent knows these guides. Ask it “walk me through the Meta lead feedback loop” or “why can't GoHighLevel find my dataset” and it answers from this page, with your workspace's connection status in hand.