Use bulk host import when you need to line up a large group of banquet or event hosts, for example a 100+ person banquet roster, without entering each one by hand. This feature works with event-level host memberships, the recruitment stage before a host is seated at a table.
An event host membership tracks a person's invitation to serve as a host for an event overall (their status, seat goal, and optional table assignments). A table host record (see Tables and Seating) is the seating-level assignment of a host, sponsor, underwriter, or volunteer to a specific table. Bulk import creates and manages event host memberships, and can optionally assign one or more tables to each host at the same time.
An event host membership moves through these statuses:
Draft - imported or added, but not yet invited.
Invited - an invitation email has been sent.
Pending - the host has opened the invitation but not yet responded.
Accepted - the host confirmed they will serve as a host.
Declined - the host declined.
Revoked - staff cancelled the membership.
Failed - the last invitation attempt failed to send.
From the event's Hosts area, download the CSV template. It includes columns for First Name, Last Name, Email, Phone, Seat Goal, and Table Numbers (one or more table numbers, comma-separated, if you already know table assignments).
Fill in the template and upload it. Uploading only previews the file, it does not create or change any records yet.
Each row is normalized (names, emails, and phone numbers are cleaned up) and classified into one of these actions:
Create - a new contact and host membership will be created.
Match - the row matches an existing supporter contact by normalized email.
Update draft - the row matches an existing membership on this event that is still in Draft status; committing will update it rather than create a duplicate.
Duplicate - the row repeats another row in the same file, or matches an existing active membership on this event.
Error - the row is missing required data or otherwise cannot be processed; the specific problem is listed for that row.
Matching only searches supporter/donor contacts. Confidential client-only records are excluded from matching, so a row that happens to share an email with a client-only record is flagged with a warning and creates a new contact instead of linking to that client record.
Review the preview. Deselect or correct any rows before committing. You can also assign a seat goal and zero, one, or multiple table numbers per row.
Commit the selected rows. Each row is saved in its own transaction, so one bad row cannot discard the rest of a valid batch. Rows that fail during commit are reported individually.
Download the result file after committing. It lists the membership ID created or updated for each successful row, and the error for any row that failed.
Once memberships exist (from import or added individually), use the batch actions to manage invitations for multiple hosts at once:
Send invitations - sends invitation emails to selected Draft or Failed memberships and moves them to Invited.
Resend invitations - resends to selected Invited, Pending, or Failed memberships. Resending rotates the invitation's access token, so previously sent invitation links stop working once a new one is issued.
Revoke - cancels selected memberships after a confirmation prompt and immediately revokes any active invitation tokens.
After running a batch action, CoolFocus shows how many memberships were queued, sent, and failed or skipped, along with the reason for any row that did not succeed (for example, a contact with no email on file, or a membership in a status that does not support the action). A batch action never reports blanket success if any row in it did not go through. Retrying a batch action is safe: rows that already succeeded are not duplicated or re-sent.
Run a small test batch first to confirm your CSV columns line up with the template.
Use the result file after each import or batch action as your record of what happened, especially for large batches.
If a host's invitation fails to send, use Resend once the underlying issue (such as a missing or corrected email) is fixed.