How to Sync Revel Customer Data to Klaviyo for Marketing

Push POS customer data from Revel Systems to Klaviyo for targeted marketing campaigns.

What This Integration Does

Most restaurants sit on a goldmine of customer data inside Revel and never act on it. This workflow turns Revel's POS records into actionable marketing segments inside Klaviyo: regulars, lapsed customers, big spenders, and people who order a specific product. Once profiles live in Klaviyo, the marketing team can fire campaigns and flows without involving engineering.

The workflow runs on a daily schedule, pulls new and updated customers from Revel along with their recent orders, transforms each customer into a Klaviyo profile with purchase-history custom properties, and either creates the profile or updates it if it already exists. It also adds customers to segmentation lists (for example, "First-Time Buyer", "VIP", "Lapsed 30 Days") and emits a placed-order event so Klaviyo flows can trigger off in-store purchases the same way they trigger off online ones.

Prerequisites

  • A Revel Systems connection with permission to read customers and orders.
  • A Klaviyo connection with API key scopes for profiles, lists, and events.
  • Pre-created Klaviyo lists for the segments you care about (e.g. VIP, Lapsed 30 Day). List IDs need to be on hand.
  • Customer email or phone capture enabled at the Revel POS - records without contact info can't be synced.

Step 1: Schedule Trigger

Drop a Trigger node and set it to Schedule. Daily at 03:00 lets the sync run on overnight traffic without competing with live POS load. The trigger exposes the previous run's timestamp, which you'll use to scope the Revel query to only customers modified since then.

Step 2: Variable - Track the Sync Window

Add a Variable assignment with two values: syncStart (the previous run's timestamp, or 7 days ago on the first run) and syncEnd (the current timestamp). Re-runs are then incremental - only customers and orders touched in the window get processed.

Step 3: Fetch Recently-Updated Customers

Add a Connector node pointing at revel and pick the list-customers tool. Filter by updated date between {{ syncStart }} and {{ syncEnd }}. Page through results (Revel's API is pageable; loop until you get an empty page). Store the combined result as {{ customers }}.

Step 4: Pull Their Recent Orders

Add a Connector node for revel calling list-orders, filtered by the same window. Then join orders to customers on customer ID. The goal is to produce, per customer, fields like:

  • lifetimeOrderCount
  • lifetimeSpend
  • lastOrderAt
  • favouriteProduct (most-purchased SKU)

Do the aggregation in a Transform node. These become Klaviyo custom properties and are what segment definitions key off.

Step 5: Upsert Profiles in Klaviyo

Wrap a Loop node around the customer list. Inside the loop, add a Connector node for klaviyo and pick create-profile. Klaviyo's create-profile API is idempotent on email - if the profile already exists, the response identifies it and you can call update-profile to refresh custom properties. Send a payload like:

{
  "email": "{{ customer.email }}",
  "phone_number": "{{ customer.phone }}",
  "first_name": "{{ customer.firstName }}",
  "last_name": "{{ customer.lastName }}",
  "properties": {
    "revelCustomerId": "{{ customer.id }}",
    "lifetimeSpend": {{ customer.lifetimeSpend }},
    "lifetimeOrderCount": {{ customer.lifetimeOrderCount }},
    "lastOrderAt": "{{ customer.lastOrderAt }}",
    "favouriteProduct": "{{ customer.favouriteProduct }}"
  }
}

Step 6: Segment Membership and Order Events

After upsert, route customers into Klaviyo lists with the add-profiles-to-list tool. Use a Condition node to pick the right list per customer (lifetime spend over threshold goes to VIP, no order in 30 days goes to Lapsed). Then, for any new orders in the window, fire create-event with an event name like Placed Order in Store and the order line items. Klaviyo flows can then trigger off in-store orders identically to online ones.

Tips

  • Always include a stable identifier - pass revelCustomerId as a Klaviyo custom property so you can re-link records if email changes.
  • Watch GDPR / CASL consent - only sync customers who consented to marketing at the POS. The Revel customer object usually has a consent flag; filter on it before pushing.
  • Use Klaviyo's batch endpoints when scaling - per-profile calls are fine up to a few thousand customers a day. Beyond that, switch to the bulk profile import endpoint via raw-api-request.

Common Pitfalls

  • Missing or fake emails - POS staff sometimes enter placeholders like walkin@store.com to satisfy a required field. Filter these out before sending to Klaviyo or you'll pollute deliverability metrics.
  • Time zones - Revel timestamps are usually in account-local time. Convert syncStart / syncEnd to that timezone with the date connector or you'll miss boundary records.
  • Double-counting orders - if a single Revel order is updated multiple times in a window, the event will fire each time unless you de-duplicate. Key the event on order ID and only fire on the first sighting.

Testing

Run the workflow manually with a tight window (last 4 hours) and a small Revel customer set. Check Klaviyo to confirm new profiles appear with the correct custom properties and list memberships. Trigger a test campaign at one of the new segments to make sure deliverability and template rendering work before enabling the daily schedule.

Learn More

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.