Apple Ads attribution in webhooks stays after a later “not attributed” answer
Theasa_attribution object in webhooks now reflects the most recent Apple response that attributed the user. Before, a later attribution=false answer for the same user (the iOS SDK asks Apple again on later launches) removed asa_attribution from webhooks; now it stays. Users whom Apple never attributed still get no asa_attribution.One “No ad” row per ad group
When Apple’s attribution has no ad ID (missing, or 0 or less — Apple uses-1), users are now grouped under one ad named No ad per ad group instead of a separate Q-… ad per user, so the Ad breakdown stays readable. Records from before this change keep their Q- identifiers.See Collect Apple Ads attribution and Webhooks.Apple Ads report and campaign management
The Apple Ads report is live for accounts with Apple Ads access. Open Apple Ads in the sidebar to compare campaigns, ad groups, and keywords with Growing or Mature cohort windows, ROAS, CAC, and Budget Usage. Users with Manage Apple Ads campaigns access can pause or enable entities, change keyword bids, and change campaign daily budgets.Start with Connect Apple Ads, then Read the Apple Ads report for definitions and known limitations and Manage Apple Ads campaigns for management limits. Programmatic access is covered in REST API v4 and MCP.Apple Ads: Connect with Apple
Connect Apple Ads in Settings → Connections → Apple Ads with Connect with Apple — no API key to create or upload. The integration guide and the new Apple Ads report guide cover setup, Growing and Mature cohort windows, Gross and Net revenue, and comparing figures with the Apple Ads console.Webhook Payload: period_type
Every webhook event now carries a top-level period_type naming the phase the event’s transaction belongs to: trial, intro, promotional or regular. It describes the transaction the event reports, while the entitlements block keeps describing the access the user holds at the moment the event was built. The App Store is the only store that reports all four values, and promotional is App Store only; Google Play adds intro for the minority of transactions where Google reports an introductory phase; Stripe and Paddle send only trial or regular. Existing fields are unchanged.The webhooks page now also documents transaction.promo_offer_id, which was already being sent, and the exact values the entitlements block can carry — including the three that our public API spells differently.See Webhooks.Multiple Secret Keys and zero-downtime rotation
A project can hold up to 10 Secret Keys at once, managed in the dashboard under Settings → Developer → Keys. To rotate, create a new key, move your servers to it, then delete the old one — the old key normally stops working within about an hour of deletion, and the new one works immediately.POST /v4/project-settings/regenerate-secret and the MCP tool regenerate_project_secret are now deprecated: they delete the project’s oldest Secret Key immediately, with no overlap — which, on a project with several keys, may be a key another server still uses. A deleted or regenerated key normally stops authenticating within about an hour.See How to manage and rotate project keys for the full runbook.Remote Config Cache Invalidation API
New SDK methodinvalidateRemoteConfigsCache() forces the next remoteConfig / remoteConfigList call to fetch a fresh targeting evaluation instead of serving the in-memory cache — useful right after setting user properties your targeting depends on. Additionally, identify now drops the config cache even when the user id doesn’t change, so re-login flows always evaluate fresh.Available in iOS 6.14.0, Android 9.7.0, React Native 10.11.0, Flutter 11.10.0, Cordova 7.9.0, Capacitor 1.8.0, and Unity 9.9.0.See Invalidate the config cache for usage and When a device fetches a config for the full caching rules.Freeze Assignments for Remote Configs
Keep users on the Remote Config they already received — no matter how the targeting changes later. Turn on Freeze assignments in the configuration’s Targeting card, and every user who newly receives the config is pinned: later targeting-rule or priority changes won’t re-seat them. When enabling, you can optionally pin everyone who has already received the config in one shot.Payload edits still apply to pinned users, and turning the switch off does not unfreeze anyone — detach users individually or archive/delete the configuration to release them.See Freezing assignments for the exact semantics.Web Funnel
Sell your subscriptions on the web and unlock them in your app. Build a checkout funnel as a No-Code screen, hosted by Qonversion atscreens.qonversion.io, let users pay with Stripe in the browser (from ads, emails, or influencer links), and have them redeem the purchase inside your mobile app — Qonversion grants entitlements and tracks the revenue alongside your App Store and Google Play subscriptions.Available now in beta / early access, and you can validate the whole flow end to end with sandbox testing before going live.See the Web Funnel guide and Web Funnel redemption to get started.No-Code Builder & SDK Updates
Several No-Code improvements shipped with iOS SDK 6.13.0 and Android No-Codes SDK 1.10.0:- Custom purchase loader. Replace the SDK’s default purchase spinner with your own — a styled spinner or a Lottie animation — configured entirely in the No-Code Builder. See the Purchase Loader guide.
- Read a screen’s configured products and variables. Load a screen up front with
loadScreenand read the product IDs and screen variables configured in the Builder — each value keeping its native type — for analytics consistency and app-side logic. See Reading default variables. - Custom actions. Trigger a custom action from a No-Code screen and handle it in your app through a new delegate event. See Custom Actions.
- No-Codes in Kids Mode. No-Code screens are now available from the No-IDFA (Kids Mode) Qonversion SDK, starting with iOS SDK 6.12.1. See Kids Mode.
Paddle Integration
Qonversion now supports Paddle as a web payment provider, alongside the App Store, Google Play, and Stripe. Connect your Paddle account with an API key (Qonversion registers the webhook destination automatically), map your Paddle products, and link purchases to Qonversion users withcustom_data so entitlements are granted and revenue is tracked from Paddle webhooks.See the Paddle Integration guide and Paddle Credentials to get started.