> ## Documentation Index
> Fetch the complete documentation index at: https://heybtw.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# get_cross_event_patterns

> Which accounts keep coming back across events, and how each one's engagement has moved over time.

> [!NOTE]
>
> Read-only.

The marketer's question is "which companies show up again and again?" Reach for this tool when the user wants repeat accounts across the program, not one account in depth and not one event's roster.

Follows the [heyBTW MCP rules](https://heybtw.com/docs/mcp/rules.md).

## When to use it

* "Which accounts have come to three or more of our events?"
* "Who keeps registering but never checks in?"
* "Has Beacon Hill been to every open house this year?"
* "Include our partners' own staff this time."

## Parameters

| Parameter | Type | Required | Notes |
| - | - | - | - |
| `domain` | string | No | Filter to one account domain. |
| `min_events` | integer | No | Minimum events per account. Default 2. |
| `limit` | integer | No | Default 20, maximum 500. `metadata.filters_applied.limit` reports the effective value. |
| `include_partner_accounts` | boolean | No | Default false. Partner staff attend co-hosted events and inflate signals. Rows carry `account_role` (`partner` or `external`) either way. |
| `include_own_domain` | boolean | No | Default false. Include your own workspace's employees. |
| `contract_version` | string | No | Omit for v1. Only v1 is advertised. |

Archived and demo collabs are excluded; a restored collab's events return.

## Response

`data` is one row per account, ordered by event count, then most recent.

| Field | Meaning |
| - | - |
| `company`, `domain` | The account. Join on `domain` in the user's CRM. |
| `account_role` | `partner` or `external`. |
| `events[]` | Per event: `event_name`, `channel_id`, `event_date`, `attendee_count`, `checked_in_count`, `mql`, `opportunity`. |
| `total_events`, `first_seen`, `last_seen` | The span of engagement. |
| `trajectory` | The direction of engagement across events. |

`attendee_count` counts SIGN-UPS. `checked_in_count` counts sign-ups with a check-in record. It is null, not 0, for an event not yet held, an event whose source did not record check-in, or a Luma event never synced with check-in-aware ingest; a `partial_coverage` gap names which.

A real response from the ScaleUp.ai fixtures with `limit: 3`, trimmed to one row and the relevant gaps:

```json theme={null}
{
  "tool": "get_cross_event_patterns",
  "result_count": 3,
  "data": [
    {
      "company": "Beaconhillsw",
      "domain": "beaconhillsw.com",
      "account_role": "external",
      "events": [
        {
          "event_name": "ScaleUp.ai x Partners: NYC Tech Week Open House",
          "channel_id": "cmvifxuom000o07l2hioks7wf",
          "event_date": "2026-05-05T22:00:00",
          "attendee_count": 5,
          "checked_in_count": 5,
          "mql": false,
          "opportunity": false
        },
        {
          "event_name": "ScaleUp.ai x Partners: SF Tech Week Open House",
          "channel_id": "cmvifxnzh000907l2zptjqszl",
          "event_date": "2026-11-10T01:30:00",
          "attendee_count": 1,
          "checked_in_count": null,
          "mql": false,
          "opportunity": false
        }
      ],
      "total_events": 3,
      "first_seen": "2026-05-05T22:00:00",
      "last_seen": "2026-11-10T01:30:00",
      "trajectory": "stable"
    }
  ],
  "metadata": {
    "filters_applied": { "domain": null, "min_events": 2, "limit": 3, "include_partner_accounts": false },
    "contract_version": "v1"
  },
  "gaps": [
    {
      "code": "scope_truncated",
      "message": "The query was valid, but its result was bounded",
      "what_failed": "More rows match this query than its limit of 3 allows.",
      "what_to_do": "Narrow the query with `domain` (filter to one account domain), `min_events` (raise it to require more events per account), or `limit` (raise it, up to 500). Retrying the identical request returns the same result.",
      "retryable": false
    },
    {
      "code": "partial_coverage",
      "message": "Event field not recorded: events[].checked_in_count",
      "what_to_do": "Treat attendance at those events as unknown, and never report attendee_count as attendance. Retrying will not change the result.",
      "retryable": false
    }
  ],
  "status": "partial"
}
```

## Rules the agent must follow

* Never report `attendee_count` as attendance. Only checked-in sign-ups attended.
* A null `checked_in_count` is unknown, never zero.
* When a `scope_truncated` gap is present, more accounts match; say so and narrow. `result_count` alone cannot tell you, because partner accounts are excluded after the limit applies.
* Nothing here is a score or a rank. Order is by event count and recency only.
* For owners and open deals, use the user's own CRM connector, joined on `domain`.

## Errors and gaps

| Code | When | What to do |
| - | - | - |
| `scope_truncated` (not retryable) | More accounts match than `limit`. | Narrow with `domain`, raise `min_events`, or raise `limit`. |
| `partial_coverage` (not retryable) | Check-in not recorded for some events, or workspace-wide disclosures. | Relay as written. |
| `query_timeout` (retryable) | The query exceeded its time budget. `status` is `error` and `data` is null. | Retry narrower. Never treat it as zero results. |
| `rate_limit_exceeded`, `internal_error` | | Honor Retry-After; retry once on internal\_error. |

## Related

* [get\_account\_relationship](https://heybtw.com/docs/tools/get-account-relationship.md): one account in depth.
* [get\_event\_details](https://heybtw.com/docs/tools/get-event-details.md): one event's roster.
* [get\_partner\_overlaps](https://heybtw.com/docs/tools/get-partner-overlaps.md): accounts shared with partners.
* Playbook: [Invite sprint](https://heybtw.com/docs/playbooks/invite-sprint.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.