Recurring card-on-file memberships move through a different path. See
Member Token Migration
for the processor-to-processor flow, and
Interim Imports for the
daily bridge that keeps members recognized while tokens migrate.
Before You Start
Build the prepaid wash package at every car wash that needs it first. The importer resolves each row to a live membership or prepaid membership package at that row’s car wash, and a row whose package is missing or deleted stops the import. See Prepaid Memberships for how to create one.How It Works
This is a hands-on, support-led import. You produce the data per car wash, and a FlexWash onboarding specialist runs the importer for you after a joint validation pass.1
Export one CSV per car wash
Pull active and expired prepaid memberships and loyalty balances from your
current POS into a separate CSV file for each car wash.
2
Share the files with your onboarding specialist
Email the CSVs to
onboarding@flexwashtech.com. We treat
them as the source of truth for prepaid coverage and point balances at
go-live.
3
We validate and map plans
Our support staff verifies every row, flags any data issues back to you,
and maps each legacy plan name to a FlexWash package template. We do this
mapping once per organization and reuse it on every subsequent file.
4
We run the import
Once the file is clean and every plan is mapped, we run the importer.
Customers, vehicles, prepaid subscriptions, memberships, and loyalty
balances land in FlexWash together. Supplying the optional
customerInsertedAt, vehicleInsertedAt, and membershipInsertedAt
columns preserves each record’s original start date.File Format
One CSV per car wash. The header row must contain the exact field names shown in the tables below, and empty cells are allowed for any optional field. Every row carries the car wash it belongs to. The importer rejects the whole file if thecarWashId column is missing, if any cell in it is blank, or if
any row names a different car wash than the one selected in the importer. This
catches the wrong site’s file before it writes anything.
Required Fields
Conditionally Required Fields
Optional Fields
Card columns such as
ccIntegrationToken, ccLastFour, and ccBrand are
not part of a prepaid file. Prepaid members have no card on file, and those
columns are only required for the active and active_external statuses
used by Member Token Migration.Prepaid Coverage Dates
validUntil is the whole point of a prepaid row, so the importer refuses to
guess it. A prepaid_active or prepaid_expired row without a validUntil
stops the import rather than falling back to a computed date.
Set validUntil to the last day the customer is entitled to wash. FlexWash
stores it as the end of that day in the car wash’s local timezone, so a member
paid through June 30 washes freely all day on June 30.
Send expired prepaid members too, with their real past validUntil and their
loyalty balance. They arrive as prepaid_expired, which keeps their history
and points intact and gives your team a warm list to re-sell on day one.
Several Vehicles on One Membership
The importer groups rows into customers bycustomerUuid. Give every vehicle
its own row, repeat the same customerUuid on each, and those rows land as one
customer with one membership and one subscription per vehicle.
Each vehicle keeps its own coverage dates. validUntil,
vehicleSubscriptionStatus, packageTemplateId, and promotionId all sit on
the vehicle’s own subscription, so one customer can hold a vehicle prepaid
through June 30 next to a second vehicle whose prepaid time ran out last year.
Send one row per vehicle, keep customerUuid identical across them, and vary
licensePlate and validUntil between them. Giving the second vehicle its own
customerUuid creates a second customer in FlexWash, which this never needs.
Rows that share a customerUuid must agree on billDateInMonth. If they
disagree, the import stops and reports the conflict.
Verify the Import
Check a handful of records yourself as soon as the import finishes:- Open Customers in the admin app and search for one of the imported customers by name, phone number, or plate.
- On the customer’s profile, confirm the loyalty point balance matches your source data.
- Open the vehicle and confirm the normalized license plate, the prepaid package, and the valid-until date match the CSV row.
- Repeat for a
prepaid_expiredmember and confirm the subscription reads as expired rather than active.
Tips for a Clean File
- If you use Excel, export the file as a CSV, then open it in a plain-text editor to confirm Excel has not stripped leading zeros from RFID tags or rewritten long numeric codes in scientific notation.
- Keep
customerMigrationIdstable. If your ex-POS has a separate “customer number” that changes when a record is edited, use the immutable internal ID instead. - Deduplicate plates and RFID tags before you send the file. One repeat of either stops the whole import.
- Normalize legacy plan names to one casing before exporting.
Premium Prepaidandpremium prepaidmap as two separate plans. - Send one file per car wash even if a single customer appears at more than one location. We reconcile shared identities during the verification pass.
- Send any correction to your onboarding specialist before we import the file. Fixing a row afterwards is a manual change in FlexWash, not a second upload.
