AI Search Attribution in HubSpot

The implementation guide. Custom property JSON, workflow export schema, UTM tagging patterns, and source-property propagation from contact to deal.

Updated April 17, 2026 · 10 min read · Implementation guide

HubSpot's native Original Source fields were not designed for AI answer engines. Out of the box, a contact who found you through a ChatGPT citation lands with Original Source = Direct Traffic, Original Source Drill-Down 1 = blank, Original Source Drill-Down 2 = blank. First-touch attribution, broken.

That's the active HubSpot community thread everyone is hitting: "Identifying LLM-Referred Contacts in HubSpot: A Temporary Hack." It is the exact shape of the problem. This page is the implementation guide: the custom properties, the workflows, the UTM schema, and the source-property propagation chain that fixes it.

HubSpot is Lantern's V1 CRM integration. Everything below is what Lantern ships natively. If you want to do it yourself first, this is the blueprint.

The three signals you have to combine

No single signal identifies an AI-referred contact reliably. You combine three:

  1. A self-reported attribution form field on every inbound form. Free text. Label: "How did you first hear about us?" Answers that contain "ChatGPT", "Perplexity", "Claude", "Gemini", "AI", or a citation-style URL are AEO. This is the cheapest, highest-signal input in your stack.
  2. UTM parameters on any link you can influence inside content that LLMs cite — your own blog posts, comparison pages, Reddit answers, LinkedIn replies. Tagged links produce a clean referrer path when the buyer clicks through.
  3. CRM-side custom properties on contact, company, and deal objects that store the AEO touchpoint data so it survives as the record progresses through the funnel.

Each signal alone has gaps. Together they cover ~85% of AEO-referred contacts in typical B2B SaaS funnels.

Custom property schema

Create the following custom properties in HubSpot. The JSON below is the export-ready definition you can use to request these from your RevOps team (or Lantern, if you're onboarding with us).

Contact object — 5 custom properties
{
  "contact_properties": [
    {
      "name": "aeo_first_touch_engine",
      "label": "AEO First Touch Engine",
      "type": "enumeration",
      "fieldType": "select",
      "options": [
        {"label": "ChatGPT", "value": "chatgpt"},
        {"label": "Perplexity", "value": "perplexity"},
        {"label": "Claude", "value": "claude"},
        {"label": "Gemini", "value": "gemini"},
        {"label": "AI Overviews", "value": "ai-overviews"},
        {"label": "Other AI", "value": "other-ai"}
      ],
      "groupName": "contactinformation"
    },
    {
      "name": "aeo_first_touch_prompt",
      "label": "AEO First Touch Prompt",
      "type": "string",
      "fieldType": "text"
    },
    {
      "name": "aeo_first_touch_timestamp",
      "label": "AEO First Touch Timestamp",
      "type": "datetime",
      "fieldType": "date"
    },
    {
      "name": "aeo_self_reported_source",
      "label": "AEO Self-Reported Source",
      "type": "string",
      "fieldType": "text"
    },
    {
      "name": "aeo_touchpoint_count",
      "label": "AEO Touchpoint Count",
      "type": "number",
      "fieldType": "number"
    }
  ]
}
Company object — 3 properties (synced from primary contact)
{
  "company_properties": [
    {"name": "aeo_first_touch_engine", "label": "AEO First Touch Engine", "type": "enumeration"},
    {"name": "aeo_first_touch_prompt", "label": "AEO First Touch Prompt", "type": "string"},
    {"name": "aeo_first_touch_timestamp", "label": "AEO First Touch Timestamp", "type": "datetime"}
  ]
}
Deal object — 4 properties (snapshotted on deal creation)
{
  "deal_properties": [
    {"name": "aeo_influenced", "label": "AEO Influenced", "type": "enumeration",
      "options": [{"label": "Yes", "value": "yes"}, {"label": "No", "value": "no"}]},
    {"name": "aeo_first_touch_engine", "label": "AEO First Touch Engine", "type": "enumeration"},
    {"name": "aeo_first_touch_prompt", "label": "AEO First Touch Prompt", "type": "string"},
    {"name": "aeo_attributed_pipeline", "label": "AEO Attributed Pipeline", "type": "number"}
  ]
}

UTM tagging schema

Any outbound link you can influence inside content likely to be cited by LLMs should carry the following UTM schema. Used consistently, it produces a queryable dataset inside HubSpot (via the contact's hs_analytics_first_url property).

UTM pattern

utm_source = ai-search (always — this is your "channel" in HubSpot)

utm_medium = citation (for links inside answers) or referral (for links on third-party pages LLMs crawl)

utm_campaign = <engine>-<content-slug> — e.g., chatgpt-comparison-hubspot-alternatives

utm_term = the tracked prompt (optional but recommended for prompt-level attribution)

utm_content = the specific asset — blog, compare, learn, homepage

Worked example. A ChatGPT answer cites your comparison page at runlantern.com/compare/lantern-vs-profound/. Because most buyers copy-paste the URL rather than click, you won't see UTMs on those. But when the buyer then shares the link in a Slack message to a colleague, or you drop that same URL into a LinkedIn post, you tag it: ?utm_source=ai-search&utm_medium=citation&utm_campaign=chatgpt-profound-alternatives&utm_content=compare. The UTM-tagged click produces a clean first-touch record.

The inbound form field

This is the single most important piece of instrumentation in your HubSpot. Every inbound form — demo request, trial signup, gated download, contact us, newsletter — carries a free-text field:

The form field that does most of the work

Label: How did you first hear about us?

Type: Single-line free text (not a dropdown — dropdowns bias the answer)

Required: Optional (don't add friction), but track non-response rate; it should be under 30%

Maps to: aeo_self_reported_source property on the contact record

Responses that contain any of the following strings are AEO touchpoints: ChatGPT, GPT, OpenAI, Perplexity, Claude, Anthropic, Gemini, Bard, Google AI, AI search, AI Overviews, an AI, asked AI, asked ChatGPT. Parse with a regex workflow; flip aeo_first_touch_engine accordingly.

The workflows that make it run

Three HubSpot workflows, each with a clear trigger and action. Workflow exports below are described (not literal JSON — HubSpot workflow JSON is internal-only; your RevOps team will build them from these specs).

Workflow 1. Parse self-reported source into AEO engine

Trigger: aeo_self_reported_source is known.

Actions: An if-branch tree matching the response text against each engine pattern. If contains "chatgpt" or "gpt" → set aeo_first_touch_engine = chatgpt. If contains "perplexity" → perplexity. And so on. If none match but the response is non-empty, log and skip. Set aeo_first_touch_timestamp to the form submission time.

Workflow 2. Propagate contact AEO properties to company and deal

Trigger: aeo_first_touch_engine is known on contact.

Actions: Copy aeo_first_touch_engine, aeo_first_touch_prompt, aeo_first_touch_timestamp to the primary associated company via property sync. On deal creation where the primary contact has aeo_first_touch_engine populated, set aeo_influenced = yes and snapshot the three properties onto the deal.

Workflow 3. Calculate AEO-attributed pipeline on deal stage change

Trigger: deal stage changes and aeo_influenced = yes.

Actions: Set aeo_attributed_pipeline = deal amount × HubSpot stage probability. Write to the deal. Log an event to a deal timeline that the CFO's Ops team can query.

The report you send to the CFO

With the schema and the workflows in place, the monthly CFO report becomes a single HubSpot list filter plus a formula:

Those two numbers are the top of the one-page memo. The rest is math you already know: AEO CAC payback = (program cost) ÷ (closed-won × gross margin × 1/12). See the CFO's Guide for the full memo template.

What to watch for

Where Lantern fits

Everything on this page can be built manually by your RevOps team. It takes 2–4 days of focused work. Lantern ships it pre-built on our HubSpot integration, plus the AI citation detection layer (the other half of the chain — see AEO pipeline attribution for the full six-step chain).

Two tiers. $99/mo for the self-serve install. Enterprise for custom property schemas, field-level encryption, and a shared Slack channel with our engineering team. No per-seat math. No per-prompt math.

If you want the downloadable template of everything on this page — JSON property definitions, workflow specs, the form field schema — grab the HubSpot AEO dashboard template.

FAQ

Common questions on AI search attribution in HubSpot.

How do I track AI-referred traffic in HubSpot?
Combine a self-reported free-text form field, five custom contact properties (aeo_first_touch_engine, aeo_first_touch_prompt, aeo_first_touch_timestamp, aeo_self_reported_source, aeo_touchpoint_count), and UTM parameters on links you can influence. No single signal is sufficient — the combination is.
Does HubSpot have a native AI search attribution feature?
HubSpot launched AEO tooling in April 2026 — citation monitoring and a free AEO Grader. It does not include CRM-side pipeline attribution out of the box. Source properties, workflows, and deal-level roll-up still need to be wired in. Lantern ships this natively.
What custom properties do I need to create?
Five on the contact: aeo_first_touch_engine, aeo_first_touch_prompt, aeo_first_touch_timestamp, aeo_self_reported_source, aeo_touchpoint_count. Three on the company, four on the deal. Full JSON schema above.
What UTM pattern works best for AI search?
utm_source=ai-search, utm_medium=citation or referral, utm_campaign=<engine>-<content-slug>. Pair with self-reported attribution — UTMs alone miss most AI traffic because most buyers copy-paste URLs.
How do I roll up AEO attribution from contact to deal?
Use HubSpot property sync to copy AEO source fields from contact to company. On deal creation, run a workflow that snapshots those values to the deal so they don't get overwritten by later contact updates.

Skip the 4-day RevOps project.

Lantern ships the full HubSpot attribution layer — properties, workflows, citation tracking, monthly PDF — natively. $99/mo or Enterprise.

Join Waitlist