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 SubscriptionsSubscription cancelled on memberr SubscriptionsSubscription expired on memberr SubscriptionsSubscription paused on memberr Subscriptionsmemberr subscription reactivatedSubscription SKU swapped on memberr SubscriptionsSubscription next charge date changed on memberr SubscriptionsSubscription frequency changed on memberr SubscriptionsOrder placed successfully on memberr SubscriptionsCharge 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
- Open Settings → Integrations → Klaviyo in memberr Subscriptions.
- Make sure Klaviyo is connected (see Quickstart).
- Click Send events in the Send synthetic events panel.
- Within a few seconds, the panel shows
Sent 10/10 events to <your-email>. - 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 Coffeeproduct 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 Subscriptionsshow 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
| Field | Synthetic value |
|---|---|
| Product | memberr Test Coffee |
| Variant | Large |
| SKU | COFFEE-LRG |
| Price | €24.00 |
| Quantity | 1 |
| Currency | EUR |
| Billing frequency | Every 1 month |
| Order total | €28.99 (€24.00 + €4.99 shipping/tax) |
| Failure reason | EXPIRED_PAYMENT_METHOD - "Synthetic test failure" |
| SKU swap | from COFFEE-MED (Medium) → COFFEE-LRG (Large) |
| Previous frequency | Every 2 weeks (for the frequency-changed event) |
| Previous next charge date | 7 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 }. Askippedcount above zero usually meansintegration_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 sameDate.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_mediumand 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.