Hi there, for context I’ve already sent a support ticket regarding this issue but wanted to get better visibility here as it’s a pressing matter for us to be able to experiment in this manner.
Our Setup:
SDK: react-native-purchases 9.15.2 (iOS SDK 5.67.1)
Platform: iOS (React Native / Expo)
Placements: 9 placements defined in-app (e.g., x, x_upsell, y_upsell, etc.)
Targeting Rule: One live catch-all rule (no audience conditions) that maps each placement to a specific control offering. The "for all other cases" fallback is set to No Offering, with default set for "when not using Placements."
Experiment config: Paywall design experiment with all 9 placements specified (different offering only at the x placement, all others kept the same as the targeting rule). Fallback offerings A/B are set. Targeting by app_version >= X.X.X. Enrollment: 100%.
The Problem:
Experiments using new_and_existing enrollment mode do not actually apply to users, even when the user clearly matches the targeting conditions. The targeting rule "wins" and serves its offerings instead of the experiment's.This happens even for brand new users created after the experiment started (fresh install, cleared cache, deleted from RC beforehand).
Discovery & Analysis:
The enrollment webhook DOES fire — RevenueCat's server decides the user should be enrolled and dispatches an EXPERIMENT_ENROLLMENT event. I can clearly see this on the customer profile for customer events.
But offering_id is null in the failed enrollment event:
{
"experiment_id": "...",
"experiment_variant": "a",
"offering_id": null
}
The customer API also returns experiment: null, no enrollment is persisted.
The offerings response serves the targeting rule, not the experiment.
Dashboard shows: "Delivered due to the Live Targeting Rule [name], based on the customer's current data."
What does work:
Switching the exact same experiment configuration to only_new enrollment mode works perfectly. The enrollment event has a proper offering_id:
{
"experiment_id": "...",
"experiment_variant": "b",
"offering_id": “my_offering_identifier”
}
The user is enrolled, the customer API reflects it, and the correct experiment offering is served at the placement. The customer profile on the dashboard also states “This customers offering is overridden by the XYZ experiment”
Questions:
Is anyone else hitting this with placements + experiments + new_and_existing mode?
Is there a known workaround other than switching to only_new (which blocks testing on existing users)?
Has something changed recently in how experiments interact with targeting rules/placements?
This was working before as intended, not sure if something changed. Would really appreciate the help! Thank you very much.
