Skip to main content

What it is

Customer and contact records with a lifecycle status. One row per customer, synced from your shop system (Shopify in the standard setup — external_id is the Shopify Customer gid). Carries contact data (email, phone, name parts, billing name/phone) plus activity timestamps (first_seen_at, last_activity_at). Orders reference customers via customer_external_id; the retention view Customer Reorder Due is computed from the two together.

How it gets data

Ingest-enabled — external systems push rows through the Ingest API:
  • One JSON record per request; unknown fields are dropped.
  • Idempotent upsert on (tenant_id, external_id).
  • If name is missing, it is derived automatically from first_name / last_name (falling back to the billing name parts).
  • tenant_id / workspace_id come from the API key context, never from the body.
  • A ready-made Make.com flow template is downloadable in Settings → Data Sources.
Minimal example payload:

Fields

“ingest” = populated through the ingest endpoint; read-only in the app and over MCP row writes. “API only” = real database column that is not registered as a visible app column.
Like every workspace table, customers also carry the system columns id, tenant_id, workspace_id, created_at, and updated_at — set automatically, never sent by integrations.

Query it