Skip to content

Adding Attendees in Batch ​

This guide walks you through building an event guest list in batch, either by entering guests manually or importing a spreadsheet.

An attendee is a seat on your guest list. Unlike a ticket, an attendee does not have to come from a purchase — a guest list you were handed by a sponsor, or a room list from a previous year, is exactly what this is for.

Creating a New Batch ​

  1. Go to Data > Batch Import
  2. Click Create and confirm — the batch is named with the date and time; rename it on the batch page if you like (e.g., "Gala Guest List")
  3. Under What do you want to import?, choose Attendees

Adding Attendees Manually ​

Click Add Attendee Row to open the form. Fill in the required fields and any optional information.

Campaign & Seating ​

FieldDescription
CampaignThe campaign (event) this guest belongs to (required)
TableOptionally seat the guest at a table that already exists in this event's seating plan

Attendee Details ​

FieldDescription
First NameGuest's first name (required)
Last NameGuest's last name (required)
EmailGuest's email address — optional, unlike ticket import
PhoneGuest's phone number
TypeGuest, Host, or VIP (required)
StatusInvited, Confirmed, Checked In, Checked Out, No Show, or Cancelled (required)
Created DateWhen the guest was added — defaults to now (required)
Ticketing FormWhich form's guest questions this person is asked — optional; leave blank and they are asked nothing

Additional Fields ​

FieldDescription
ContactLink to an existing contact (optional — a new contact is created if not linked)
NotesInternal admin notes, not shown to the guest
TagsAdd attendee tags

Editing and Removing Rows ​

  • Edit: Click anywhere on a row to open the form and make changes
  • Delete: Click the trash icon on the right side of a row

Importing from Spreadsheet ​

For a full guest list, importing a spreadsheet is faster:

  1. Click Import from Spreadsheet at the bottom of the batch
  2. Select your CSV or Excel file
  3. Map your columns to the correct fields (if needed)
  4. Review the imported rows — including any warnings
  5. Click Process Batch when the rows look right

See Importing from Spreadsheet for detailed instructions on the import process.

Supported CSV Columns ​

Required ​

ColumnDescription
first_nameGuest's first name
last_nameGuest's last name. With no email, the first and last name are what link the guest to a contact
campaign_idCampaign ID (GUID)

Optional ​

ColumnDescription
emailGuest's email address — a guest with no email still imports
phoneGuest's phone number
typeguest, host, or vip (defaults to guest)
attendee_statusinvited, confirmed, checked_in, checked_out, no_show, or cancelled
seating_tableTable name or number — see Seating guests from a spreadsheet
seating_planWhich seating plan the table is in — only needed if the event has more than one
ticketing_formForm name — sets which guest questions this person is asked. Leave blank and they are asked nothing
bidder_numberPaddle number the guest bids with. An existing number on the event's site links to that bidder; a new number creates one. Two guests with the same number share one paddle. Needs an event with one auction site (or only one site)
notesInternal admin notes
created_atDate added, in YYYY-MM-DD format (defaults to now)

TIP

Email is optional for attendees. A guest list routinely arrives with names but no addresses, and the seat is still real. A row with a name and no email still imports and still creates a contact.

Tags (numbered, via column mapping) ​

ColumnDescription
attendee_tag_1Tag name to apply to the guest
attendee_tag_2Second tag for the guest

Add more numbered columns (_3, _4, etc.) as needed.

Seating Guests from a Spreadsheet ​

The seating_table column takes the table name or number as it appears on your seating board — not an ID. All of these find the same table:

Your spreadsheet saysMatches
Table 5the table named "Table 5"
5table number 5
Head Tablethe table named "Head Table"

Matching is case-insensitive and only looks at tables belonging to that event.

If your event has more than one seating plan ​

An event can have several seating plans (for example a main ballroom and an overflow room), and table names only have to be unique within a plan — both rooms can have a "Table 1".

When that's the case, add a seating_plan column naming the plan:

first_nameseating_planseating_table
JaneGala BallroomTable 1
SamOverflow RoomTable 1

If your event has only one seating plan you can leave this column out entirely.

Without it, a table name that exists in more than one plan is not guessed at — the guest imports unseated and the review screen tells you to add the column.

Build your tables first ​

Importing never creates tables. Set up your seating plan before uploading the guest list, otherwise there is nothing for the column to match against.

This is deliberate: a table invented from a spreadsheet cell has no seat count, and a table with no seat count is treated as unlimited — it would silently sit outside every capacity check on the board.

What happens when a table doesn't match ​

SituationResult
Table foundGuest is seated at it
No such table in this eventGuest imports unseated, with a warning on the review screen
The name matches tables in two plansGuest imports unseated — add a seating_plan column
Two tables in one plan share that nameGuest imports unseated, with a warning — rename them or use the table number
No such seating planGuest imports unseated, with a warning naming the plan
Table is already fullGuest is still seated — see below

In every case the guest is still imported. Only the seat is ever skipped, and you can seat them afterwards by dragging them from the Unseated list on the seating board, or by opening the row and picking a table before processing.

Tables over capacity ​

If your spreadsheet puts more guests at a table than it has seats, they are all seated anyway and the table shows as over capacity on the seating board — for example 12/10, in red, marked Full.

This is intentional. Refusing the extra guests would throw away the one thing your spreadsheet told us — which table they belong at — with nowhere to record it. An over-capacity table is visible and easy to fix by moving people off; a lost table assignment is not recoverable.

A full table refuses new drops on the board, but you can always drag guests off it.

How Contacts Are Linked ​

When an attendee row has no contact_id:

  • Email matches an existing contact → the guest is linked to that contact.
  • Email doesn't match, but the row has a name → a new contact is created from the row's name and email.
  • Multiple rows in the same batch share an unmatched email → they all link to the single contact created by the first of those rows.

A guest with no email at all is matched by first and last name: one existing contact with that name is linked, no match creates a new contact, and two or more matches refuse the row until you set contact_id. A placeholder name (any word of it is "Anonymous" or "Anon", in any capitalization) is never matched: the row is flagged "Name looks anonymous" and each such guest gets their own contact.

Processing the Batch ​

When you're ready to finalize:

  1. Review all rows and resolve any warnings
  2. Click Process Batch
  3. Confirm the action

Important

Batch processing cannot be undone. Once processed, each guest becomes a permanent record. Double-check your data before processing.

After Processing ​

Once processed:

  • Guests appear on the campaign's attendee list and seating board
  • A contact is created or linked for each guest
  • Tags are applied to attendees
  • Guests with a matched table are seated; the rest appear under Unseated

Tips and Best Practices ​

  1. Build the seating plan first — tables must exist before the import can match them
  2. Use the table names you see on the board — Table 5 and 5 both work
  3. Read the warnings before processing — an unmatched table is reported there, not after
  4. Test first — import a small sample before the full guest list
  5. Email is optional — don't invent placeholder addresses to get rows through

Unified Fundraising + CRM