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
nameis missing, it is derived automatically fromfirst_name/last_name(falling back to the billing name parts). tenant_id/workspace_idcome from the API key context, never from the body.- A ready-made Make.com flow template is downloadable in Settings → Data Sources.
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.