Skip to main content
Read-only. It never writes to the CRM, never enriches and never ranks attendees.
The marketer’s question is “did anyone follow up after the event?” Reach for this tool when the user asks who was contacted, who on the handoff list is still untouched, or whether follow-up happened at all. Follows the heyBTW MCP rules.

When to use it

  • “Did sales follow up with the Austin dinner attendees?”
  • “Who from the qualified list is still untouched a week later?”
  • “Give me the untouched attendees so I can ping their owners.”
  • “How many people did we reach in the first 14 days?”

Parameters

When the user wants the summary, use the default page size. CRM activity is read only for the attendees on the current page (metadata.pagination.activity_read_page_only: true); attendees on other pages count as unresolved in the summary until their page is read. A small limit leaves most of the summary unresolved.

Response

crm_context comes first. Then data[0]:

Touch states

unknown_no_crm_match and unresolved are never untouched. A type missing from activity_source.activity_types was not read, so untouched means no counted activity of the types that were read. recorded_follow_ups (each observation_id, at, channel, source, at most 10, with recorded_follow_ups_total beyond that) lists follow-ups recorded with record_observation inside the window. When a CRM connected in heyBTW serves the answer, they are supporting evidence only and never change a state or a count. A real response from the Austin dinner fixture at the default page size, trimmed to two attendees and two coverage notes:
The same call with limit: 3 returned unresolved: 23 and an upstream_crm_error gap (retryable), because only the three attendees on that page were read.

When no CRM in heyBTW serves activity

When no CRM is connected in heyBTW, it must be reconnected, or heyBTW cannot read activity from it, the answer is status: "partial", never an error, with crm_context.capability_served: false. This shape is from the contract (attendee-touch-status-contract.json), not captured today, because the heyBTW workspace has a CRM connected: Then: check follow-up in the user’s own CRM connector for each not_evaluated attendee, joined on contact_email and company_domain (an outbound email, call, meeting held or note after window.opens_at and on or before window.last_day, never an inbound reply); record each one with record_observation (kind followed_up, source: "agent_crm_read"); report what the CRM shows. The next call returns those as touched.

Rules the agent must follow

  • Never report unknown_no_crm_match, unresolved or not_evaluated attendees as not followed up.
  • Every touch is inferred from logged CRM activity. Say what the CRM shows, not that someone was contacted.
  • An inbound email from the attendee does not count; a sequence email does, because the CRM does not mark one.
  • A touch is evidence of contact, never a commitment. Report it separately from get_due_tasks.
  • A gap or a failed read is never an all-untouched list. Relay coverage_notes as written.

Errors and gaps