Skip to main content

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:

  1. Generate a short-lived token from your POS admin panel
  2. Paste the token into the Client Import tab in WordPress
  3. Preview a page of results using Fetch Page
  4. Import the page into WordPress using Import Page
  5. 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

  1. Navigate to PointlessPOS > Settings > Client Import
  2. Paste your token into the token field
  3. Set Page Size (default: 25) and Page Number (default: 1)
  4. Click Fetch Page to preview the results

The preview shows summary counts without importing anything into WordPress.

Step 3 — Import

  1. Review the preview counts
  2. Click Import Page to sync the records into WordPress
  3. The results screen shows how many records were created, updated, or skipped

Step 4 — Additional Pages

To import more client records:

  1. Increase the Page Number
  2. Click Fetch Page to preview the next batch
  3. 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 KeyDescription
_pointless_pos_client_uuidAuthoritative external UUID from your POS (used for deduplication)
ptls_externalClientIdMirrors the UUID above
ptls_emailCustomer email address
ptls_firstNameCustomer first name
ptls_lastNameCustomer last name
ptls_phoneCustomer phone number
ptls_dateCreatedOriginal account creation date (ISO 8601)

Marketing Fields

Meta KeyDescription
ptls_birthdayCustomer birthday (nullable)
ptls_lastPurchaseDateDate of last purchase (nullable)
ptls_totalPurchasesTotal number of purchases
ptls_totalSpendLifetime spend amount
ptls_loyaltyPointsCurrent loyalty points balance
ptls_loyaltyTierCurrent loyalty tier label
ptls_daysSinceLastPurchaseDays elapsed since last purchase
ptls_averageOrderValueAverage order value
_pointless_pos_primary_address_jsonFull 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_options capability 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

IssueSolution
"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 0Verify your POS has client records with contact information
Duplicate clients appearingEach UUID should import only once. If duplicates appear, check that your POS isn't returning the same UUID under different values