You've made an excellent observation. You're correct that this issue is likely related to the lookback period of borrowed properties in Mixpanel. Let me explain why this is happening and suggest a potential workaround.
According to the [Mixpanel documentation on borrowed properties](https://docs.mixpanel.com/docs/features/custom-properties#borrowed-properties), there is indeed a 7-day lookback window limitation:
"Borrowing of a property is strictly from the most recent event in the 7 day lookback window. To elaborate:
- Say on event "purchase", you want to borrow property "search term" from an event "search product". If there are multiple events "search product" before "purchase", the property will be borrowed from the most recent "search product" event where the property is set.
- Lookback is also fixed to a 7 day window. Say the "purchase" event occurred on 31st Jan, if the most recent "search product" occurred on 20th Jan, the borrow functionality will return "search term" = (not set), since this event happened 11 days ago which is outside the lookback window range."
In your case, since the free trial lasts 30 days, the upgraded_paid event (which contains the subscription_price) occurs well outside the 7-day lookback window from the trial_started event. This explains why you're seeing "(not set)" for the borrowed property.
Given this limitation, here are a few potential workarounds:
1. Use a custom event at the end of the trial:
Create a new event that fires at the end of the 30-day trial period, regardless of whether the user upgrades or not. This event could include the subscription_price property for users who upgrade. You could then use this event in your funnel analysis, which would fall within the 7-day lookback window.
2. Use Mixpanel's Group Analytics:
If you're on a plan that includes [Group Analytics](https://docs.mixpanel.com/docs/data-structure/advanced/group-analytics), you could associate the subscription_price with a user group (like an account or organization) rather than with an event. This would allow you to analyze conversion rates by price point without relying on borrowed properties.
3. Send subscription_price with trial_started event:
If possible, you could send the subscription_price property with the trial_started event, even if it's just the proposed price for that user. This would eliminate the need for borrowed properties altogether.
4. Use JQL for custom analysis:
For more complex scenarios that exceed Mixpanel's UI capabilities, you might need to use [JQL (JavaScript Query Language)](https://docs.mixpanel.com/docs/features/jql) to perform custom analysis that can look back further than 7 days.