FooEvents includes a built-in CSV importer that can create a large number of tickets from attendee-level data. It can be used to move active registrations from another ticketing platform, generate FooEvents tickets for existing WooCommerce orders or import tickets that were issued through a legacy or offline registration process.
The source data must first be exported and prepared as a CSV file containing one row for every ticket. During the import, each CSV column is mapped to a FooEvents ticket field and every valid row is used to create a new ticket for an existing FooEvents event.
This guide explains how to:
- Plan a ticket migration and understand what the importer creates
- Prepare the required and optional CSV fields
- Move ticket data from Event Tickets, Eventbrite or WooCommerce Box Office
- Prepare an export from another ticketing or registration system
- Map and import tickets in controlled batches
- Verify ticket data, capacity, delivery and check-ins after the migration
Before importing tickets, install the required FooEvents plugins and create and configure the destination event.
Plan your ticket import
How the importer works
- Create and configure the destination event products in FooEvents.
- Export attendee-level ticket information from the existing system and prepare it as a CSV file.
- Upload the CSV file under FooEvents > Import Tickets.
- Map the CSV columns to the corresponding FooEvents ticket fields.
- Review the validation screen and correct any errors in the CSV.
- Confirm the import and repeat the process for any remaining batches.
- Verify the imported tickets before issuing them to attendees or using them for check-ins.
Each CSV row creates one FooEvents ticket. If one purchaser registered four attendees in a single order, the file must contain four rows—one for each attendee and ticket.
What the importer creates
FooEvents creates a new ticket record for every imported row. Each ticket receives a new FooEvents ticket ID, ticket number, security hash and barcode or QR code. The ticket is linked to the destination FooEvents event specified in the CSV and begins with a Not Checked In status.
Optional attendee details, variations, booking selections, custom attendee fields and references to existing WooCommerce orders can also be added when the correct destination IDs are supplied.
What is not migrated automatically
The ticket importer creates FooEvents ticket and attendee records. It does not reproduce the complete commercial history or internal data model of the previous platform.
- WooCommerce orders, customers, payments, taxes and refunds are not created.
- Historical revenue is not added to WooCommerce sales reports.
- Existing check-in statuses and check-in history are not transferred.
- Original ticket IDs, security codes and barcodes do not become FooEvents ticket identifiers.
- WooCommerce product stock and FooEvents Bookings availability are not reduced automatically.
- Imported tickets are not automatically emailed to attendees.
- The importer does not check whether a source ticket has already been imported.
- Reserved seating assignments are not available as a standard CSV mapping.
New tickets and barcodes: Tickets imported from another platform receive new FooEvents barcodes and QR codes. If the tickets will be used for admission, issue the new FooEvents tickets and tell attendees that their old tickets will no longer be accepted.
Prepare the destination events first
Every imported ticket must be linked to an existing FooEvents event product. Before preparing the CSV:
- Create the required FooEvents event products.
- Configure event dates, venue details, ticket themes and ticket email settings.
- Create any WooCommerce variations used for General Admission, VIP, package or access options.
- Create the required booking dates and slots when using FooEvents Bookings.
- Create the destination FooEvents Custom Attendee Fields before importing responses.
- Record the destination Event, Variation, Booking Date and Booking Slot IDs.
Do not use IDs from the previous ticketing system in FooEvents ID fields. Source IDs can be retained separately as Meta fields for reference.
Back up and test: Create a complete backup of the website files and database, then test the migration on a staging site before importing tickets into the live site. The importer does not provide an automatic rollback or duplicate-removal process.
Prepare your CSV file
Download the example file
Export the attendee information from the current system and save it as a standard comma-separated CSV file. The first row should contain the column headings and every following row should represent one ticket.
Download the CSV template file (ticket-import-example.csv)
The example includes a custom attendee field and FooEvents Bookings fields. Remove these columns if the destination event does not use FooEvents Custom Attendee Fields or FooEvents Bookings.
CSV headings can differ from the FooEvents field names because they can be mapped manually during the import. Using the standard headings shown below allows FooEvents to select many mappings automatically.
Required fields
| Field | Recommended CSV heading | Description |
|---|---|---|
| Attendee First Name * | Attendee First Name | Required for every row. If the source does not contain an attendee name, use appropriate placeholder text such as Guest or NA. |
| Attendee Last Name * | Attendee Last Name | Required for every row. Split a combined full-name column before importing. |
| Attendee Email * | Attendee Email | Must contain a valid email address. Use the attendee email where possible or the purchaser email when the original system did not collect individual attendee addresses. |
| Event ID * | Event ID | The WordPress product ID of the destination FooEvents event. This is not the event ID from the source platform. |
To find the destination Event ID:
- In the WordPress admin area, go to Products > All Products.
- Find the FooEvents event product.
- Hover over the product name. The product ID is displayed beneath it.

Optional fields
| Field | Recommended CSV heading | Description |
|---|---|---|
| Variation ID | Variation ID | The destination WooCommerce variation ID. Use this when the destination event uses variations for ticket types, packages or access levels. |
| Attendee Telephone | Attendee Telephone | Optional attendee telephone number. |
| Attendee Company | Attendee Company | Optional attendee company or organization. |
| Attendee Designation | Attendee Designation | Optional job title or designation. Values must contain only letters, numbers, spaces, periods and hyphens. |
| Order ID | Order ID | Links the imported ticket to an existing WooCommerce order on the destination site. Do not use an Eventbrite or unrelated source-platform order number. |
| Booking Date ID | Booking Date ID | The destination FooEvents Booking Date ID. It must be supplied together with a Booking Slot ID. |
| Booking Slot ID | Booking Slot ID | The destination FooEvents Booking Slot ID. It must be supplied together with a Booking Date ID. |
| Custom Attendee Field | Destination field ID | Stores the value in an existing FooEvents Custom Attendee Field. The heading must use the internal field ID rather than the customer-facing label. |
| Meta field | Your reference heading | Stores additional reference information as WordPress ticket meta. Suitable for source system, source ticket ID, source order ID or migration batch. |
Variation IDs
When the destination event is a variable product, edit the product and open Product Data > Variations to find the ID of each destination variation. A source ticket type such as VIP does not automatically identify the correct WooCommerce variation; add the corresponding destination Variation ID to every applicable row.
Custom attendee fields
When importing FooEvents Custom Attendee Fields, the CSV column heading must match the internal ID of the destination attendee field, not its label. Open an existing ticket for the destination event and find the field under Custom Fields. The name will use a format similar to fooevents_custom_yzctqvmoowymnisozwhg.

Booking Date and Slot IDs
FooEvents Bookings stores the selected date and slot as internal destination IDs. A date, time or occurrence ID from the previous system cannot be imported directly.
To identify the correct IDs, create or open an existing ticket for the required destination booking and check the WooCommerceEventsBookingDateID and WooCommerceEventsBookingSlotID values under Custom Fields. Both IDs must be included for each bookable ticket.

A complete list of booking IDs is also stored on the bookable event in the fooevents_bookings_options_serialized custom field. Manually interpreting serialized data can be error-prone, so test every date and slot mapping before importing the complete file. See the FooEvents Bookings guide for more information.
Existing WooCommerce Order IDs
Use the Order ID mapping only when the referenced WooCommerce order already exists on the destination website. This is useful when standard WooCommerce products or another WooCommerce ticket extension were previously used on the same site and the original orders are being retained.
Do not map an Eventbrite order number, an Event Tickets Tickets Commerce order number or an ID from another WordPress installation to this field. Preserve it as Source Order ID metadata instead.
Create a destination mapping table
Before editing a large export, create a lookup table that translates each source event, ticket type or occurrence into its FooEvents destination. For example:
| Source event | Source ticket type | Event ID | Variation ID | Booking Date ID | Booking Slot ID |
|---|---|---|---|---|---|
| Annual Conference | General Admission | 1250 | 1261 | ||
| Annual Conference | VIP | 1250 | 1262 | ||
| Training Series | 5 September, Morning | 1400 | date_5_sep | morning_slot |
Use the actual IDs from your site. The example IDs above are illustrative and will not work on another installation.
Clean and protect the source data
- Include only valid tickets that should remain active after the migration.
- Remove refunded, canceled, deleted, unpaid or non-attending records unless there is a specific reason to retain them.
- Remove blank rows, summary rows and order totals.
- Split combined attendee names into separate first- and last-name columns.
- Confirm that every row contains a valid email address.
- Remove payment details, old ticket-edit links, access tokens, security codes and personal information that FooEvents does not need.
- Keep the original export and working migration files in a secure location with access limited to authorized staff.
Useful audit columns can be retained as Meta fields, for example Source System, Source Ticket ID, Source Order ID, Source Ticket Type and Migration Batch. Review every column during mapping because columns that are not mapped to a standard FooEvents field can default to Meta field.
Move tickets from another platform
Exports differ between platforms and configurations. Use the following methods as a starting point, then review the downloaded CSV before preparing it for FooEvents.
Event Tickets and The Events Calendar
The ticketing solution commonly used with The Events Calendar is called Event Tickets or Event Tickets Plus.
Export the attendees
- In the WordPress admin area, open the event’s Attendees screen.
- Use Screen Options to include the ticket and attendee columns required for the migration.
- Select Export to download the attendee CSV.
- Repeat the export for each event that will be migrated.
Exporting one event at a time is recommended because every file can be assigned to a specific destination FooEvents Event ID. Event Tickets can export ticket type, check-in information, custom attendee responses, order information, ticket ID, ticket-holder details and purchaser details depending on the installed extensions and screen configuration. See the Event Tickets attendee management guide.
Prepare the Event Tickets export
- Split Ticket Holder Name into Attendee First Name and Attendee Last Name.
- Use Ticket Holder Email Address as Attendee Email.
- Use purchaser details as a fallback only when individual ticket-holder information is unavailable.
- Translate each Event Tickets ticket type into the correct destination Event ID and optional Variation ID.
- Filter out canceled, refunded, unpaid and non-going attendees.
- Preserve the original Ticket ID as Source Ticket ID metadata if it is needed for support or reconciliation.
- Rename attendee-response columns to the destination FooEvents Custom Attendee Field IDs.
If Individual Attendee Collection was not enabled, multiple tickets may contain the purchaser’s details rather than the name and email address of each attendee. This missing information cannot be reconstructed by the importer. Review the Event Tickets attendee registration settings to understand how the source data was collected.
Event Tickets Order IDs: Map an exported Order ID to FooEvents Order ID only when Event Tickets used WooCommerce on the same website and the WooCommerce order is still present. Tickets Commerce, RSVP and external-site order IDs should be retained only as source metadata.
Eventbrite
Export the attendees
- Open the Eventbrite event dashboard.
- Go to Reporting > Event reports.
- Select Attendees.
- Select CSV as the file type and export the report.
To export attendees from several events, open the organization-level Reporting > Attendees report, select the required events, run the report and export it as CSV. For recurring events, exporting each occurrence separately can make the destination event or booking mapping easier. See Eventbrite’s Download an Attendees report instructions.
Export custom question responses
Eventbrite provides a separate Custom questions responses report under Reporting > Event reports. Export this report when custom attendee responses need to be retained, then combine the required columns with the attendee export using a reliable common attendee or order reference.
Eventbrite states that custom-question responses older than two years are not available in this report. See How to access responses to custom questions.
Prepare the Eventbrite export
- Map the Eventbrite attendee first name, last name and email to the required FooEvents fields.
- Translate every Eventbrite ticket type into the destination Event ID and optional Variation ID.
- Map recurring occurrences or entry times to the appropriate destination event or FooEvents Booking Date and Slot IDs.
- Exclude refunded, canceled, deleted, unpaid and non-attending tickets.
- Retain Eventbrite ticket, attendee and order references as Meta fields if they are required for reconciliation.
- Do not map an Eventbrite order number to FooEvents Order ID.
- Rename required custom responses to the appropriate destination FooEvents Custom Attendee Field IDs.
Review the Eventbrite attendee and order statuses before filtering the export. Eventbrite distinguishes valid attendees from checked-in, refunded, canceled, deleted and unpaid records. See the Eventbrite order and attendee status glossary.
If the original Eventbrite order form collected information from only the ticket buyer, several ticket rows may contain the buyer’s information rather than the details of each attendee. Use the available buyer details or obtain the missing attendee information before importing. See Eventbrite’s order form and attendee collection guide.
WooCommerce Box Office
Export the tickets
- In the WordPress admin area, go to Tickets > Tools.
- Open the Export tab.
- Select the ticket products that should be included.
- Select Download Export File.
The Box Office CSV contains the configured ticket-holder fields and can also include Ticket ID, ticket status, ticket name, ticket edit URL, purchase date, Order ID and purchaser User ID. See the WooCommerce Box Office export documentation.
Prepare the Box Office export
- Map the configured First Name, Last Name and Email ticket fields to the FooEvents attendee fields.
- Translate each Box Office ticket product or ticket name into the destination FooEvents Event ID and optional Variation ID.
- Filter out canceled, refunded, pending-payment or otherwise invalid tickets.
- Preserve the Box Office Ticket ID and purchase date as source metadata if required.
- Remove old ticket edit URLs and access tokens from the migration file.
- Rename custom ticket-holder fields to the corresponding destination FooEvents Custom Attendee Field IDs.
When Box Office and FooEvents are on the same WooCommerce website and the original orders are retained, the exported Order ID can be mapped to FooEvents Order ID. When migrating to another website, preserve it as Source Order ID metadata instead.
Same-site migration: Test the complete migration on staging before disabling Box Office or converting existing products into FooEvents events. Avoid accepting live registrations through both ticketing workflows during the final migration.
Other ticketing and registration systems
If the source platform is not covered above, export or request an attendee-level CSV containing as many of the following values as possible:
- Source event name or ID
- Source ticket type, package or access level
- Attendee first name, last name and email
- Ticket, attendee and payment status
- Source ticket and order references
- Occurrence, booking date or entry time
- Custom attendee responses
- Seat information, if the source event uses assigned seating
If the platform cannot produce a suitable attendee-level CSV, its API or database export may need to be used to prepare one. A custom migration may be required when the source uses complex bookings, seating assignments, linked passes, memberships or ticket relationships that cannot be represented by the standard FooEvents fields.
Import the CSV file
Test a small sample first
Create a test file containing a small but representative selection of tickets before importing the full attendee list. Include:
- Every destination event and ticket type
- Each WooCommerce variation
- Different booking dates and slots
- Tickets containing custom attendee fields
- A ticket linked to an existing WooCommerce order, if that feature will be used
Prepare the CSV file in the same format that will be used for the complete migration.

The example file includes custom attendee fields and booking details, which require the corresponding FooEvents extensions.
Upload and map the CSV
- Log in to the WordPress admin area.
- Go to FooEvents > Import Tickets.
- Select the CSV file and press Continue.

On the mapping screen, assign each CSV column to the appropriate FooEvents ticket field. Standard headings such as Event ID, Attendee First Name, Attendee Last Name and Attendee Email are selected automatically when they match exactly, but every mapping should still be reviewed.
- Map destination IDs to Event ID, Variation ID, Booking Date ID and Booking Slot ID.
- Map source references that should be retained to Meta field.
- Map destination custom field IDs to Custom Attendee Field.
- Do not retain unnecessary or sensitive source columns as ticket metadata.
Press Run the importer after reviewing every column.

Validate and confirm the import
FooEvents displays the prepared ticket data before creating the tickets. The importer checks that the Event ID refers to a valid FooEvents event and that attendee email addresses use a valid format. It also checks the permitted format of Attendee Designation values.
Check the complete preview, not only the highlighted errors. Confirm that:
- Every row is linked to the intended destination event.
- First name, last name and email are in the correct columns.
- Variations correspond to the correct ticket types.
- Booking Date and Slot IDs match the intended occurrence.
- Custom attendee values appear under the correct fields.
- Order IDs refer to existing WooCommerce orders on this website.
If any values are incorrect, update the CSV and begin the import again. Once the preview is correct, press Confirm Import.

Import large files in batches
By default, FooEvents processes tickets in batches of 100 to reduce the risk of server timeouts and memory exhaustion. When the CSV contains more tickets than the configured batch size, complete the current batch and repeat the import process until every batch has been processed.
The batch size can be adjusted under FooEvents > Settings > General > Import batch size. Use a value appropriate for the website’s hosting resources. A smaller batch is safer when the file includes many custom fields or the server has limited memory and execution time.
Do not rename or modify a multi-batch CSV while it is being processed. Upload the same unchanged file for every batch. Changing the file during the process can restart or disrupt the batch sequence and create duplicate tickets.
Avoid duplicate tickets during cutover
The importer creates a ticket for every submitted row and does not compare source ticket IDs with previous imports. Use a controlled migration process:
- Record the source ticket IDs included in every migration batch.
- Pause ticket sales in the old system or record the exact export cutoff time.
- Import the prepared ticket file once.
- Export only registrations created or changed after the cutoff.
- Remove any source ticket IDs already imported before processing the final file.
- Open sales through FooEvents only after the imported totals and remaining capacity have been verified.
Verify and complete the migration
Verify the imported tickets
After each test or production batch, go to FooEvents > Tickets and review the imported records.

- Compare the number of valid source tickets with the number of imported FooEvents tickets.
- Compare totals by event, source ticket type, destination variation, booking date and slot.
- Open representative tickets and inspect the attendee, variation, booking and custom field data.
- Confirm that imported Order IDs open the intended WooCommerce orders.
- Use the FooEvents attendee export to compare the resulting data with the cleaned migration file.
Update capacity and availability
Imported tickets do not automatically reduce WooCommerce product stock or FooEvents Bookings availability. Before reopening sales, calculate the remaining capacity for every event, variation, booking date and time slot.
For example, if an event has a capacity of 500 and 320 valid tickets were migrated, configure the destination sales capacity so that no more than the remaining 180 places can be sold. Account for any additional tickets that were already created directly in FooEvents.
Bookable events: Check every date and slot separately. Importing Booking Date and Slot IDs associates the ticket with that occurrence, but the importer does not automatically subtract the ticket from the occurrence’s available booking stock.
Test ticket delivery and check-ins
- Open an imported ticket and confirm that the HTML ticket displays correctly.
- Generate and review a PDF ticket if FooEvents PDF Tickets is enabled.
- Resend one test ticket and confirm that it reaches the intended attendee.
- Load the destination event in the FooEvents Check-ins app.
- Scan the new barcode or QR code and verify that the correct attendee and event details appear.
- Test variations, booking filters and multi-day check-ins where applicable.
The importer does not send ticket emails automatically. Once the migration has been verified, tickets can be selected under FooEvents > Tickets and resent in bulk. Review the event’s ticket theme, recipient and email settings first. See the Resend tickets guide.
If attendees previously received tickets from another platform, explain that FooEvents has issued replacement tickets and that only the new FooEvents barcode or QR code should be used at the event.
Final migration checklist
- The original website and database have been backed up.
- The migration was tested on staging with representative tickets.
- Only valid, paid and active source tickets were imported.
- Every source event and ticket type is mapped to the correct destination event and variation.
- Required attendee fields contain valid data.
- Custom attendee and booking fields were tested.
- Source identifiers were retained only where necessary.
- Imported counts match the cleaned source export.
- Product, variation and booking availability was adjusted manually.
- Ticket delivery and the FooEvents Check-ins app were tested.
- The old ticketing system is no longer accepting registrations for the migrated inventory.
- Attendees were told how and when they will receive their replacement FooEvents tickets.