help · integrations

Junocal + Klaviyo

Push opted-in Junocal client profiles to Klaviyo for segments, flows, and campaigns. Below: exactly what we sync, what we access, and how to disconnect.

What the integration does

When a studio owner or admin connects Klaviyo, Junocal can push opted-in clients with an email into Klaviyo as profiles. Profiles include name and email, phone only with SMS consent, and Junocal identification properties.

From there you can use Klaviyo's profile data for segments, flows, and campaigns. Junocal remains the source of truth and Klaviyo changes do not flow back.

We do NOT push Junocal events (bookings, payments, attendance) into Klaviyo automatically — only profile data. If you want event-driven Klaviyo flows, wire those up via webhooks separately.

What we ask Klaviyo for, and why

We request exactly the scopes needed to write profiles and identify the connected account — nothing more:

• profiles:read — to look up existing profiles before creating duplicates

• profiles:write — to create or update profile records as clients sign up or change details in Junocal

• accounts:read — Klaviyo requires this on every OAuth app (it tells us which Klaviyo account we just connected to)

We do NOT request access to: campaign send/edit, list management, segment creation, event tracking, template editing, billing, or any other Klaviyo capability.

Connecting Klaviyo — step by step

1. Sign in to Junocal as the studio owner or an admin. Front-desk and instructor roles can't connect Klaviyo.

2. Go to Settings → Integrations, find the Klaviyo card, click "Connect Klaviyo".

3. Junocal redirects you to Klaviyo's consent screen. Review the three scopes Klaviyo shows you. Click Allow.

4. Klaviyo redirects you back to Junocal. The Integrations page now shows "Connected as <your-klaviyo-account>".

5. Use Sync now on the Klaviyo integration page to backfill existing opted-in clients. Large lists can take a few minutes.

What syncs and when

Manual Sync now backfill — up to 2,000 existing clients with an email and email_opt_in=true are pushed to Klaviyo.

Supported client creation and profile-update flows trigger a best-effort profile upsert.

A Junocal opt-out prevents future profile upserts, but does not currently suppress a profile that already exists in Klaviyo. Use Klaviyo's consent tools for that profile.

Klaviyo profile changes do NOT push back into Junocal automatically — Klaviyo is downstream, not bidirectional.

Disconnecting and revoking access

From Junocal: Settings → Integrations → Klaviyo → Disconnect. Junocal tells Klaviyo to revoke the OAuth grant, then deletes your stored tokens. Profile sync stops immediately. Profiles already in Klaviyo stay there — they're yours.

If you remove Junocal from Klaviyo first, also disconnect it in Junocal. Otherwise the local connection can remain visible until a token refresh detects the revoked grant.

Disconnecting does NOT delete client profiles from Klaviyo. Those belong to you and stay in your Klaviyo account exactly as they were.

What we store, and for how long

From the OAuth flow: your Klaviyo account label (for the "Connected as" line in Integrations) and the refresh token (encrypted at rest with AES-256-GCM using a key Junocal holds, not derived from your Klaviyo account).

Junocal does not store a Klaviyo profile copy or profile ID on the client. Klaviyo's profile-import endpoint matches updates by email.

When you disconnect or uninstall: all of the above is deleted immediately. We don't archive or retain anything for analytics.

Security

Refresh tokens are encrypted at the application layer (AES-256-GCM) before they hit the database, on top of the database's own at-rest encryption. Short-lived access tokens are stored in the database so server requests can reuse them until expiry.

Klaviyo's OAuth implementation rotates the refresh token on every refresh — we re-encrypt and store the new value immediately, so the old token can never be replayed.

All communication with Klaviyo's API runs over TLS 1.2 or higher. Per-studio rate limits are yours, not Junocal's — Klaviyo throttles us against your account's quota.

Troubleshooting

"Reconnect required" banner on the Integrations page → Klaviyo revoked our grant (often because you uninstalled the app from Klaviyo's side, or your account had a security event). Click Reconnect and re-authorize.

Client added in Junocal but not appearing in Klaviyo → check that the client's email_opt_in is true. We don't push opted-out clients into Klaviyo (would conflict with Klaviyo's own consent state).

Duplicate profiles in Klaviyo for the same person → check whether the email address changed or the person already existed under another identifier, then use Klaviyo's profile-merge tools.

Need to use a different Klaviyo account → disconnect first, then connect again as the other account. Junocal stores one Klaviyo account per studio.

Did this guide solve the problem?

stuck or curious

Still have a Klaviyo question

For connection problems, sync issues, data-handling questions, or anything not covered above, email hello@junocal.com. We reply within 48 hours.