Client Import
The Client Import feature allows you to pull customer records from your POS system into WordPress. Imported clients are stored as custom post types and can be used with CRM tools like FluentCRM for email campaigns and customer segmentation.
This feature is available on the Client Import tab under PointlessPOS > Settings.
How It Works
Client import uses a short-lived token workflow for security:
- Generate a short-lived token from your POS admin panel
- Paste the token into the Client Import tab in WordPress
- Preview a page of results using Fetch Page
- Import the page into WordPress using Import Page
- Repeat for additional pages, or generate a new token if the first one expires
The token is never stored in the WordPress database. It exists only for the duration of the request and is cleared immediately after use.
Step-by-Step Guide
Step 1 — Get a Token
Generate a short-lived client export token from your POS system's admin panel. The exact steps depend on your POS configuration.
Step 2 — Fetch a Preview
- Navigate to PointlessPOS > Settings > Client Import
- Paste your token into the token field
- Set Page Size (default: 25) and Page Number (default: 1)
- Click Fetch Page to preview the results
The preview shows summary counts without importing anything into WordPress.
Step 3 — Import
- Review the preview counts
- Click Import Page to sync the records into WordPress
- The results screen shows how many records were created, updated, or skipped
Step 4 — Additional Pages
To import more client records:
- Increase the Page Number
- Click Fetch Page to preview the next batch
- Click Import Page to sync
If your token expires, generate a new one from your POS and repeat the process.
Client Data Stored in WordPress
Each imported client is stored as a custom post type (pointless_pos_client) with metadata organized into two groups:
Identity Fields
| Meta Key | Description |
|---|---|
_pointless_pos_client_uuid | Authoritative external UUID from your POS (used for deduplication) |
ptls_externalClientId | Mirrors the UUID above |
ptls_email | Customer email address |
ptls_firstName | Customer first name |
ptls_lastName | Customer last name |
ptls_phone | Customer phone number |
ptls_dateCreated | Original account creation date (ISO 8601) |
Marketing Fields
| Meta Key | Description |
|---|---|
ptls_birthday | Customer birthday (nullable) |
ptls_lastPurchaseDate | Date of last purchase (nullable) |
ptls_totalPurchases | Total number of purchases |
ptls_totalSpend | Lifetime spend amount |
ptls_loyaltyPoints | Current loyalty points balance |
ptls_loyaltyTier | Current loyalty tier label |
ptls_daysSinceLastPurchase | Days elapsed since last purchase |
ptls_averageOrderValue | Average order value |
_pointless_pos_primary_address_json | Full address stored as JSON |
All marketing fields are optional. If a field is not provided by your POS, it is simply left blank — it will not block the import.
Deduplication
Client matching uses the external clientId UUID from your POS as the sole identity key. This means:
- Re-importing the same records does not create duplicates — existing records are updated in place
- Email address, name, and phone are not used for matching
- If a record from your POS is missing a
clientId, it is skipped entirely
Safety Guarantees
The import process is designed to be safe and non-destructive:
- No deletions — Importing will never delete WordPress clients, even if they no longer exist in your POS
- No token storage — The token is held only in memory for the request lifecycle
- No token logging — Tokens are never written to WordPress debug logs or error logs
- Admin-only — Only users with the
manage_optionscapability can access this feature - Nonce protected — All import actions require a valid WordPress nonce
FluentCRM Integration
Imported client records can be synced to FluentCRM for email marketing campaigns. The ptls_* meta keys are flat and mailer-agnostic, so they can be mapped to custom fields in any CRM or email platform.
For FluentCRM-specific setup, refer to the FluentCRM documentation on syncing custom post types and meta fields.
Troubleshooting
| Issue | Solution |
|---|---|
| "Token invalid or expired" | Generate a new token from your POS and try again |
| Records show as "skipped" | Skipped records are missing a clientId UUID — this is expected and safe |
| Import count is 0 | Verify your POS has client records with contact information |
| Duplicate clients appearing | Each UUID should import only once. If duplicates appear, check that your POS isn't returning the same UUID under different values |