Skip to main content

What you get

Every event you run ends up in heyBTW as a collab, with the people who registered, the people who declined, and only the people who actually came marked attended. That record is what invite sprints, debriefs and attribution read later. You can bring it in three ways, strongest first, and heyBTW tells you what each way left out.

Before you start

  • Know where the event lives: a platform connected in heyBTW (Luma, Splash, Zuddl), a public page (Luma, Partiful or another), or nowhere but a spreadsheet.
  • Have the guest export at hand if the platform is not connected. Send it unchanged: never rename columns or reformat dates.
  • See Connect heyBTW next to your CRM and your event platform for rung 1.

The event-history ladder

Every import names what it could not bring in import_gaps, each with a remedy_tool: partners (manage_collab_partners), attendance and registration_answers (record_signups).

Steps

1

Find or create the collab

Say: “Is the Austin field dinner in heyBTW yet?” Claude calls list_events and reads each row’s event_name, channel_id, event_tense and roster_count.If it is not there, pick one door per call:
  • Link door: “Add this event: https://lu.ma/…” Claude sends event_url and a fresh client_request_id. A Luma or Partiful page creates the collab from the page’s public details. A link for a collab you already hold comes back outcome: matched, never a second copy.
  • Fields door: “Add a dinner called Austin Field Dinner on October 20 at 6pm Central.” Claude sends name, event_start, timezone and a client_request_id. Without event_end the end is set three hours after the start and event_end_origin says assumed. Claude tells you, and sets the real end with update_collab once you know it.
Either way the answer’s channel_id is the handle every other tool takes.
2

Record who registered, from the export

Say: “Here is the Partiful export for the dinner. Record who registered.”Claude calls record_signups with action: "preview" and the file text as csv, at most 500 rows. Nothing is saved yet. The preview shows column_map (each column, what it maps to and why), status_words, layers, and rows that need your attention by line number. Claude relays workspace_overlap.sentence and company_carry.sentence as written. This sample is trimmed from a real preview today:
On your go, Claude confirms with action: "confirm", the preview_token and a fresh client_request_id, and does not send the file again. The token lasts 15 minutes. More than about 50 rows that are not a file (a CRM list, a page you read): Claude previews the first chunk, sends the rest with action: "append", then confirms once.If the list is not a table (an email thread, pasted names), Claude structures it first with the format_attendee_list prompt and sends the result as csv.
3

Or drop the file in yourself

Say: “The export has 400 rows and custom questions. Give me an upload link.”Claude calls create_import_link with the channel_id. You get a single-use link that works for 30 minutes, only for you, signed in to heyBTW. It opens heyBTW’s own importer, which keeps registration question columns. When you say it is done, Claude reads the roster back with get_event_details and does not also send the rows.
4

Mark only the people who came

Say: “These people came: Priya Shah, linkedin.com/in/marcus-lee, dana@acme.com.”Claude previews record_signups with just those people as CHECKED_IN, by email, LinkedIn URL or full name, and never looks the emails up elsewhere first. A LinkedIn or name row matches only someone already on the collab. The preview names each match; Claude shows you before confirming.
5

Check the counts

Say: “How many registered and how many came?”Claude calls get_event_details and reports attendance.registered, attendance.declined and attendance.attended. attendance.total counts sign-ups, never attendance. attendance.checked_in is null, not zero, when nobody recorded check-in.

Add people without a landing page

Many people say yes outside the event page: a reply to a personal email, an accepted calendar hold, a word at another event, a partner telling you their guest is coming. They belong on the roster without being sent to a page to sign up again. Where that works depends on who owns the guest list (event_context.source_platform on get_event_details). record_signups refuses a collab an event platform syncs, and names the platform. That is deliberate: the platform’s list stays the source. Recording a yes. Say: “Maya and Sam said yes by email, Diego can’t make it.” Claude previews record_signups with rows, each with email, attendance_status (APPROVED for yes, DECLINED for can’t make it, PENDING_APPROVAL or WAITLIST while waiting) and registered_at (when they said yes). After your confirm, it adds a record_observation note on how they said yes (“said yes by email reply”), so the follow-up later has its basis. Nobody needs importing first, and anyone already invited keeps their invite history. A yes is never recorded as CHECKED_IN. A calendar hold as the RSVP. For a small dinner, the calendar invite you send from your own calendar can be the RSVP: accepted is APPROVED, declined is DECLINED, tentative stays out until it becomes a yes or a no. A list kept by hand. Send the sheet again whenever it changes. A fuller list moves a status forward; a stale one never moves it back. If the list is not a table (an email thread, pasted names), Claude formats it first with the format_attendee_list prompt. Partners bringing guests. Record each guest as above, and add the partner with manage_collab_partners so the event shows who brought whom. People you plan to invite, not people who said yes. Use import_people instead. Imported people are not sign-ups and appear in no roster or count.

Registered versus attended

  • Approved, Pending and Going are registered (stored as APPROVED, PENDING_APPROVAL and, for a waitlist, WAITLIST). Only CHECKED_IN is attended.
  • A whole guest list is never marked attended.
  • “Can’t Go” and “Cancelled” read as DECLINED. “No response” and “Invited” are skipped as invited_not_accepted.
  • A date with no UTC offset is read in the collab’s time zone, and column_map says so.

Pair it with your tools

What heyBTW will and won’t do

  • It never invites anyone, enriches a row, or writes to a collab a platform syncs.
  • It moves a status up and never silently down; a correction needs your go.
  • It never adds guests to your event platform.
  • It names every gap the import left, so Claude can propose the remedy.