Read-only. It never writes to the CRM, never enriches and never ranks attendees.
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
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:
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 isstatus: "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,unresolvedornot_evaluatedattendees 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_notesas written.
Errors and gaps
Related
- record_observation: record follow-ups you find in the user’s CRM.
- get_due_tasks: committed follow-up tasks.
- get_event_details: the roster.
- Playbooks: Follow-up and ROI, What each system knows.