DOCS
IntegrationsKlaviyo

Testing

Send a synthetic batch of every lifecycle event to your Klaviyo profile.

The Klaviyo integration page ships with a Send synthetic events panel so you can verify the integration end-to-end without waiting for a real subscription to be created, paused, cancelled, etc.

What it does

Clicking Send events fires one of every memberr Subscriptions lifecycle event into Klaviyo:

  • Subscription started on memberr Subscriptions
  • Subscription cancelled on memberr Subscriptions
  • Subscription expired on memberr Subscriptions
  • Subscription paused on memberr Subscriptions
  • memberr subscription reactivated
  • Subscription SKU swapped on memberr Subscriptions
  • Subscription next charge date changed on memberr Subscriptions
  • Subscription frequency changed on memberr Subscriptions
  • Order placed successfully on memberr Subscriptions
  • Charge processing failed on memberr Subscriptions

All events are sent to a profile keyed by the email of the user currently signed in to memberr Subscriptions, so you can find them on your own Klaviyo profile.

How to use it

  1. Open Settings → Integrations → Klaviyo in memberr Subscriptions.
  2. Make sure Klaviyo is connected (see Quickstart).
  3. Click Send events in the Send synthetic events panel.
  4. Within a few seconds, the panel shows Sent 10/10 events to <your-email>.
  5. In Klaviyo, search Profiles for your email, open the profile, and scroll to Activity feed. All ten metrics should be listed with realistic example data (a memberr Test Coffee product priced at €24.00).

Fresh IDs on every click

Each click uses a new run id (Date.now()) for the synthetic subscription, line, order, and billing-attempt GIDs. That means every click produces a fresh set of events instead of being deduped by Klaviyo's unique_id rule, so you can iterate on a Klaviyo flow against newly-arriving events.

Use cases

  • Verifying a new Klaviyo connection. Hit the button right after authorizing - confirms credentials, scopes, and event delivery in one round trip.
  • Building flow triggers without waiting. Klaviyo only lets you select a metric as a flow trigger after it has fired at least once. Sending the synthetic batch unlocks every metric immediately so you don't need to hand-craft a cancellation in Shopify to see Subscription cancelled on memberr Subscriptions show up.
  • Designing email templates with real merge tags. The events carry the same property shape as production events, so you can drag {{ event.product_title }}, {{ event.next_charge_scheduled_at }}, {{ event.previous_charge_interval }}, etc. into templates and preview them against your own profile.

What the synthetic data looks like

FieldSynthetic value
Productmemberr Test Coffee
VariantLarge
SKUCOFFEE-LRG
Price€24.00
Quantity1
CurrencyEUR
Billing frequencyEvery 1 month
Order total€28.99 (€24.00 + €4.99 shipping/tax)
Failure reasonEXPIRED_PAYMENT_METHOD - "Synthetic test failure"
SKU swapfrom COFFEE-MED (Medium) → COFFEE-LRG (Large)
Previous frequencyEvery 2 weeks (for the frequency-changed event)
Previous next charge date7 days from now (for the date-changed event)

The synthetic data is deliberately minimal but uses the same fragment shape as real Shopify subscription data - so flows and segments built against it will work unchanged when real events arrive.

Troubleshooting

Events don't appear in Klaviyo

  • Double-check the integration shows as connected on the Integrations page. If the OAuth token expired, you'll need to reconnect.
  • Confirm the email you're signed in with is reachable as a Klaviyo profile. If it's brand new, Klaviyo creates the profile automatically when the first event lands.
  • Open your browser devtools network tab while clicking the button; the server function call should return { emitted: 10, skipped: 0 }. A skipped count above zero usually means integration_not_installed - i.e. the OAuth credentials weren't found for the organization.

Some events fire, others don't

  • Klaviyo deduplicates events by unique_id. Each test run uses a fresh timestamp-based id, so duplicates shouldn't happen - but if you have an in-flight request and click again, the second click reuses the same Date.now() if it lands in the same millisecond.

Events arrive but properties are missing

  • The synthetic fixture only populates fields the integration handler actually reads. If you're building a template against a property like image_url_medium and want to test with a different value, swap it in production by editing the underlying product image on Shopify - that's the source of truth.

On this page