Skip to main content

CRM Campaign landing pages

Audience: Sales ops and marketing users in Aventora CRM who run paid ads or QR-based lead capture.

Goal: Create a campaign with a unique Hub URL and QR code, collect leads on a branded form, and either auto-start Aventora engagement or tag leads for later workflows.

Source of truth: Campaign configuration and metrics live in Engagement Hub. The CRM Campaigns UI stays and talks to Hub (GraphQL proxy) when AVENTORA_API_KEY + AVENTORA_BASE_URL are set. You can also manage campaigns from Engagement Hub → Campaigns. See Hub Campaigns.

Related: Hub campaigns, Ad campaigns → engagement (Path D below), CRM complete guide, Engagement Hub Start API.


Where to configure

  1. Open Aventora CRM (or Engagement Hub → Campaigns).
  2. In the left navigation (Sales Cockpit section), open Campaigns (/campaigns).
  3. Use the campaign list to search and filter by status. Click a row to open the campaign detail page.
  4. Click New campaign to choose an industry template or Start from blank, adjust copy and options, then save.
  5. On the campaign detail page, use Activate when ready. Use Edit to change copy, intent options, landing appearance, or post-submit behavior.

CRM still owns Person attribution (campaignId, leadIntent, marketing consent), the campaign detail Leads table (People with that campaignId), the Campaign Leads People view, and CAMPAIGN_LEAD_SUBMITTED when Hub syncs a lead into CRM. Hub stores its own submission log separately; CRM Leads does not read Hub lead rows.

Campaign list and detail pages

ScreenURLPurpose
List/campaignsAll campaigns in a table (name, status, visits, submissions, unique leads, last lead, post-submit mode, updated). Search and filter by status.
New/campaigns/newTemplate picker, then create form. After save, opens the new campaign detail page.
Detail/campaigns/{id}Read-only overview (including copyable Campaign ID), metrics, leads table, landing URL, QR code, lead capture settings. Header actions: Edit, Copy link, Activate / Pause, Delete.
Edit/campaigns/{id}/editFull edit form (same fields as create). Save returns to the detail page.

Industry campaign templates

When you click New campaign, CRM shows templates matched to your workspace industry preset (from onboarding). Templates pre-fill name, headline, description, interest options, post-submit behavior, and auto-engage settings — you can edit everything before saving.

Industry presetExample templates
Real EstateOpen house registration, Half commission listing, Buyer lead capture, Home valuation request
InsuranceInsurance quote request, Policy review offer, Referral lead capture
MortgagePre-approval lead, Rate quote request, Refinance inquiry
Financial AdvisorRetirement planning consultation, Portfolio review offer, Wealth planning lead
Other / GenericGeneral lead capture, Book a consultation, Contact us

Choose Start from blank for an empty form with generic defaults. Created campaigns store an optional presetKey when started from a template (for your reference in CRM data).

Each active campaign shows:

  • Landing URL{AVENTORA_BASE_URL}/campaign/{token} (same Hub base URL already set on the CRM server for engagements)
  • QR code — encodes the same URL for print/ads

Append ad attribution query params when sharing the link, for example:

?utm_source=meta&utm_campaign=spring&email=lead@example.com

Supported pre-fill params (when present in the URL) include email, phone, firstName, lastName, and standard UTM / click IDs.

Interest dropdown (optional)

In Campaigns → New or Campaigns → Edit (detail page → Edit), use Ask what they are interested in:

SettingLanding page behavior
CheckedShows What are you interested in? with card-style selectable options (label = visitor text, value = stored on Person as leadIntent). Use Add option / Remove to edit the list.
UncheckedNo dropdown — only name and contact fields are collected.

If you leave the checkbox on and do not customize options, defaults are Get a quote, Book a call, and Learn more.

Landing page appearance

In Campaigns → New or Campaigns → Edit, use Landing page appearance to customize the public Hub form:

SettingLanding page behavior
Submit button labelText on the submit button (default Submit).
Intent question labelLabel above the interest dropdown when enabled (default What are you interested in?).
Primary accent colorHex color for the submit button, intent selection highlight, and field focus rings (default Aventora blue #2563eb).

Branding on the landing page

The Hub landing page header uses your workspace branding automatically:

ElementSource
Organization nameCRM workspace display name (header and browser tab suffix).
LogoDomain Assistant logo for your assigned domain when configured; otherwise the CRM workspace logo.
Browser faviconAventora favicon (not tenant-specific).
Page headlineCampaign headline (internal campaign name is not shown to visitors).

Required fields

Visitors must complete:

  • First name and last name
  • Channel-based contact field (from the campaign’s engagement Channel, also returned on the public config as engagementChannel):
    • Phone or SMS → phone is required; email is optional
    • Email → email is required; phone is optional
  • Marketing consent checkbox (opt-in to receive messages including marketing communications). Stored on the Person as marketingConsent / marketingConsentAt.
  • Interest selection when the dropdown is enabled and the campaign is Active

DRAFT and PAUSED campaigns show a preview banner; the submit button stays disabled until you Activate the campaign.

When Auto-start Aventora engagement is selected in Campaigns → New or Edit, configure:

SettingPurpose
Engagement typeHub call type: Informational, Confirmational, Conversational, or Appointment Booking
ChannelPhone, SMS, or Email (email only when type is Informational)
Cockpit action typeMaps to Sales Cockpit action (for example CALL_LEAD, SEND_FOLLOW_UP)
Engagement instructionPrompt sent to Hub for the auto-started engagement

Delete a campaign

On the campaign detail page, use Delete to permanently remove a campaign with zero captured leads. You must type the campaign name to confirm. The public landing link stops working immediately after delete.

ConditionDelete behavior
leadCount = 0Delete is enabled; confirmation modal required
leadCount > 0Delete is disabled — use Pause to stop new submissions while keeping lead history

Captured leads remain on Person records even if you could delete (they are not removed). Campaigns with leads cannot be deleted so attribution history stays intact.

Campaign landing links are public. CRM and Hub apply IP-based rate limits per campaign token (no captcha on the form):

ActionDefault limit (per IP + token, per hour)
Load landing page / config120 requests
Submit lead form5 requests

When a limit is exceeded, visitors see Too many requests from your network. Please try again later. (HTTP 429). A hidden honeypot field still blocks naive bots.

CRM env (optional tuning): CAMPAIGN_PUBLIC_GET_THROTTLE_LIMIT, CAMPAIGN_PUBLIC_GET_THROTTLE_TTL_IN_MS, CAMPAIGN_PUBLIC_SUBMIT_THROTTLE_LIMIT, CAMPAIGN_PUBLIC_SUBMIT_THROTTLE_TTL_IN_MS

Hub env (optional tuning): CAMPAIGN_LANDING_GET_RATE_LIMIT, CAMPAIGN_LANDING_GET_RATE_WINDOW_SECONDS, CAMPAIGN_LANDING_SUBMIT_RATE_LIMIT, CAMPAIGN_LANDING_SUBMIT_RATE_WINDOW_SECONDS


Post-submit modes

ModeBehavior
Tag onlyCreates or updates a Person with campaignId, source, leadIntent, and marketing consent fields. Sets Person Created by / Updated by to the campaign name. Ingests a Sales Cockpit signal (CAMPAIGN_LEAD_SUBMITTED). Use the detail-page Leads table or the Campaign Leads People view for follow-up.
Auto-start Aventora engagementSame Person write, then starts a single Hub engagement using your configured engagement type, channel, cockpit action type, and instruction. When the visitor selected an interest option, CRM appends The lead selected: {label}. to the engagement instruction so Hub greetings reflect their choice (for example Request a call vs Learn more). When you pick a channel or type in the campaign editor, those values are used even if the cockpit action’s default mapping is different. Respects Do not contact.

How interest selection affects outbound messages

StepWhat happens
Form submitHub POSTs the intent value (for example REQUEST_CALL) to CRM.
Person recordCRM stores the value on leadIntent (custom Person field). The display label (for example Request a call) comes from the campaign’s intentOptions.
Tag onlyNo outbound message. Intent is available on the Person and in the CAMPAIGN_LEAD_SUBMITTED signal payload for Sales Cockpit workflows.
Auto-start engagementCRM sends Hub an instruction built from your campaign Engagement instruction plus The lead selected: {label}. Hub’s greeting service expands that combined instruction into the SMS, email, or call opening.

Manual engagements started later from Sales Cockpit use the instruction you enter there — they do not automatically re-read leadIntent unless you reference it in your prompt.


Prerequisites

RequirementWhy
Engagement Hub connected (AVENTORA_API_KEY in CRM workspace settings)Auto-engage and Hub landing page
At least one workspace member with Settings → Profile → Engagement callback number setAuto-engage runs without a logged-in user; CRM uses the first valid callback number on the workspace
AVENTORA_BASE_URL (CRM server, already required for Hub integration) and TWENTY_BASE_URL or CRM_API_URL (Hub server)Campaign landing links and Hub → CRM submit
CRM Sync (for engagement timeline on Person)Optional but recommended for auto-engage

Campaign metrics

MetricMeaning
Visits (visitCount)Landing page loads recorded by Hub (including DRAFT/PAUSED previews). Not unique visitors.
Submissions (leadCount)Successful form submits (including re-submits by the same person). Still used for the delete guard.
Unique leads (uniqueLeadCount)Times a Person was newly attributed to this campaign (new Person, or existing Person whose campaignId was not already this campaign).

Campaigns created before analytics tracking show Visits and Unique leads as blank (not 0), since that history was never captured. They begin counting from the first visit or submit after tracking is live. Submissions is always populated.

The detail page Leads table lists People currently linked via campaignId (live query). Copy Campaign ID from Overview to filter People → Campaign Id Contains that UUID. New submits also set Person Created by / Updated by to the campaign name so you can filter Created by Contains the campaign name.

Public API (integrators)

Hub serves the HTML form. CRM exposes token-scoped endpoints (no user JWT; the URL token is the secret):

MethodPathPurpose
GET/rest/aventora/campaigns/public/{publicToken}Landing config (headline, intents, param mapping, landingPageConfig, engagementChannel, branding)
POST/rest/aventora/campaigns/public/{publicToken}/visitBest-effort visit increment (Hub landing GET only; does not block the page)
POST/rest/aventora/campaigns/public/{publicToken}/submitLead submit JSON body

Submit body example:

{
"firstName": "Alex",
"lastName": "Rivera",
"email": "alex@example.com",
"phone": "+14165551234",
"intent": "GET_QUOTE",
"marketingConsent": true,
"attribution": {
"utmSource": "meta",
"utmCampaign": "spring"
}
}

marketingConsent must be true. Contact-field requirements follow engagementChannel (phone/sms require phone; email requires email). GraphQL (authenticated CRM UI): aventoraCampaigns, aventoraCampaign, aventoraCampaignLeads, createAventoraCampaign, updateAventoraCampaign, deleteAventoraCampaign.

deleteAventoraCampaign returns { success, id } and fails with a validation error when leadCount > 0.

Public endpoints return HTTP 429 when IP rate limits are exceeded.

Marketing site (aventora.ai)

The public marketing site does not embed the campaign form. Book a Demo, Contact Sales, Partner Setup, and similar CTAs open the Hub campaign landing URL stored in the site environment in a centered popup window so visitors remain on the marketing page:

Env varPurpose
NEXT_PUBLIC_HUB_CAMPAIGN_CTA_URLFull landing URL from Campaigns → Copy link (required for production CTAs)
NEXT_PUBLIC_HUB_CAMPAIGN_CTA_URL_AI / _CAOptional overrides when serving aventora.ai vs aventora.ca

Setup:

  1. In CRM, create (or reuse) an ACTIVE campaign for marketing inquiries.
  2. Enable Ask what they are interested in with options such as Book a demo, Agency partner, Developer API, Privacy request, and Data deletion.
  3. Prefer Auto-start Aventora engagement with SMS so visitors who submit a North American phone receive a conversational SMS follow-up.
  4. Copy the landing URL into the marketing site env and redeploy.

The site appends utm_source=aventora_site and utm_content=<cta-id> (for example book-demo, contact-sales, agency-partner) so attribution distinguishes which button was clicked. If the env URL is missing, marketing CTAs do not fall back to the homepage contact form — they stay inactive until the campaign URL is configured. The homepage Contact Us form remains reachable only from the main site footer link (/#contact).

After a successful submit, the campaign thank-you page auto-closes the popup after about 2 seconds when it was opened from the marketing site (window.opener is set). Direct visits (new tab, copied link, QR) are unchanged — the thank-you message stays visible.


Changelog

DateChange
2026-07-19Campaign detail Leads loads People via workspace SQL on person.campaignId (not Hub lead rows / ORM where), so migrated attributed People show reliably.
2026-07-19Campaign detail Leads GraphQL always lists CRM People by campaignId (not Hub hub_campaign_leads), so migrated campaigns show attributed leads.
2026-07-19Campaign data/API moved to Engagement Hub. CRM Campaigns UI kept and proxies to Hub when linked. Hub Admin Campaigns nav. Authenticated POST /rest/aventora/campaign-leads for Person upsert + signal. Ops migration preserves id/publicToken. Optional AVENTORA_CAMPAIGNS_PUBLIC_DISABLED retires CRM public REST. See Hub campaigns.
2026-07-17Campaign analytics: Visits, Submissions, Unique leads on list/detail; copyable Campaign ID; detail Leads table (aventoraCampaignLeads); Person Created by/Updated by uses campaign name; Hub records visits via POST .../public/{token}/visit. Pre-tracking campaigns show blank Visits/Unique leads (nullable columns) instead of 0.
2026-07-15Landing form requires phone for SMS/phone engagement channels and email for email channel (engagementChannel on public GET). Mandatory marketing consent checkbox; CRM stores marketingConsent / marketingConsentAt on Person. Submit body requires marketingConsent: true.
2026-07-08Campaign thank-you page auto-closes the popup window after ~2s when opened from aventora-site CTAs (window.opener); direct tab/QR visits unchanged.
2026-07-08Hub fix: Greeting service preserves CRM campaign suffix The lead selected: {label}. when generating opening SMS/call messages, so auto-engage greetings differ by intent (e.g. Partnership vs Learn more) instead of reusing a cached generic greeting.
2026-07-08aventora-site Hub campaign CTAs open in a centered popup window (520×780) instead of a new tab, so visitors stay on the marketing page. Ctrl/Cmd+click still opens a new tab.
2026-07-08Campaign landing page UI refresh (modern card layout, card-style intent options, two-column name fields). Auto-start engagements append the visitor’s selected intent label to the Hub instruction (The lead selected: …).
2026-07-08Campaign Auto-start editor adds Engagement type (informational, confirmational, conversational, appointment booking); stored on engagementConfig.type and honored on submit.
2026-07-08Delete campaign on detail page (blocked when leads exist; type name to confirm). Public landing links protected with IP rate limits on Hub and CRM (default 120 GET / 5 submit per IP per token per hour). GraphQL deleteAventoraCampaign.
2026-07-08Documented aventora-site marketing CTAs via NEXT_PUBLIC_HUB_CAMPAIGN_CTA_URL (Hub campaign landing; Calendly/mailto CTAs removed from the site). Contact form fallback removed — only the main footer keeps /#contact.
2026-07-06Campaigns UI refactored to list → detail → edit flow (table index at /campaigns, detail at /campaigns/{id}, edit at /campaigns/{id}/edit, create at /campaigns/new) matching standard CRM entity navigation.
2026-07-05New campaign opens industry-matched templates (real estate, insurance, mortgage, financial advisor, generic) or start from blank; templates pre-fill form defaults.
2026-07-05Campaign landing tab favicon uses the Aventora mark; post-submit thank-you message is Your information is submitted. We'll be in touch soon.
2026-07-05Campaign auto-engage honors the campaign editor channel when set (cockpit action mappings no longer override explicit SMS/email/phone).
2026-07-05Auto-engage from public campaign submit resolves initiator callback phone from any workspace member with Engagement callback number set (system auth path).
2026-07-05Landing page branding (workspace/domain logo + name), Aventora favicon, required-field UX, and CRM-configurable submit label, intent label, and accent color.
2026-07-05Campaign create/edit UI: optional interest dropdown with custom options, or turn collection off entirely.
2026-07-05Public campaign REST routes skip CRM JWT middleware; DRAFT/PAUSED campaigns can preview the landing form (submit requires Activate).
2026-07-05Campaign landing URLs use existing CRM AVENTORA_BASE_URL (no separate public URL env).
2026-07-05Initial CRM Campaign landing pages: Hub-hosted form, CRM config UI, QR/link, tag-only vs auto-engage, Campaign Leads preset view.