Release notesNewest first

Notes from
the console

Everything we've shipped, newest first. A short roundup of Appstack product updates, nothing here needs a manual.

New Snapchat integration, More Cohorts Metrics and Views, and a batch of squashed bugs

Here's what shipped over the last couple weeks, no manual required, just scroll and enjoy.

The New Arrivals Shelf

New8
  • 01You can now run EAC on Snapchat, check it out in the integrations page!
  • 02Plugging Stripe as your revenue tracking source is now available, connect Stripe in the integrations page.
  • 03You can now pick a timezone for the activity page instead of only seeing timestamps in UTC.
  • 04Cohort tables now support multiple saved views, so you can keep several different setups instead of just one remembered configuration.
  • 05Cohorts tables now supports ROAS and Profit metrics based on custom events values. Just click on the custom event and then select ROAS or Profit from the second dropdown.
  • 06Custom domains for your links now work with every ad network except Google.
  • 07Standard links now support "Website" as a media source, for links you place on your own site.
  • 08Our server-to-server endpoint now accepts hashed email and phone values, so apps that can't send raw personal data can still match users to Meta.

Sanded Down the Rough Edges

Improved9
  • 01Installing MCP skills through Claude Chat got a cleaner, clearer setup flow.
  • 02Data exports are no longer capped at 50 rows, and you can now pick a date range when exporting.
  • 03Billing got a redesign for clearer pricing, and we removed the confusing add-ons section.
  • 04We added a tooltip in the app explaining the choice between sending all events versus just attributed ones.
  • 05The integrations page now stops you from accidentally connecting both RevenueCat and Superwall at once, with an explanation of why.
  • 06We added a full API reference to our docs.
  • 07If you map more than one source event onto the same target in a way that double counts, we now warn you instead of silently inflating your numbers.
  • 08The warning for using the wrong-platform SDK key, like an iOS key on Android, now shows directly in the UI instead of staying internal.
  • 09The integrations list got a design refresh. Qonversion and OpenAI Ads coming soon!

Bugs That Met Their Maker

Fixed9
  • 01Some timestamps on the activity page weren't consistently shown in UTC, causing confusing times, that's fixed as part of the new timezone selector.
  • 02Purchase amounts for RevenueCat and Superwall subscriptions in the user journey view showed a USD number labeled with the local currency, making amounts look wrong, that's fixed.
  • 03Inviting someone who already had an Appstack account used to send no notification at all, so they'd only find out if they happened to log in, they now get an email.
  • 04Standard links could sometimes fail attribution outright with an error due to a bad validation check, that's fixed.
  • 05Searching by a customer's user ID in User Journey could behave inconsistently because of ID format mismatches, that's fixed.
  • 06Applying one filter in Cohorts used to still show every option in the next filter instead of narrowing them down, both now work together properly.
  • 07An internal tracking event was leaking into your event lists in the frontend, we filtered it out just like we already do for "First open".
  • 08We were missing a device identifier to make Amplitude's device matching 100% consistent with what we send, that's fixed.
  • 09The status dot in the Media source dropdown of the Create Link dialog was getting visually clipped, that's fixed.

Custom revenue reporting, saved cohort views, a Unity SDK, and a solid pile of squashed bugs

Here's what we shipped over the last couple weeks, no manual required, just scroll and enjoy.

Fresh Out of the Oven

New8
  • 01We added a setting so you can choose whether your cohort tables show revenue before tax or the actual proceeds, no more guessing which number you're looking at.
  • 02You can now choose whether your ad networks receive every single event you send or just the ones tied to an ad click, your call.
  • 03Cohort tables now remember your last setup, so you don't have to rebuild your view every time you come back to the page.
  • 04We added a new event that captures whether someone's trial or intro offer actually stuck around instead of getting cancelled right away.
  • 05With specific configuration, tapping one of your standard links on iOS can now take people straight into the app instead of routing them through the browser first (public docs soon).
  • 06We shipped a full Unity SDK, so game studios building in Unity can now track installs and events just like on our other platforms.
  • 07Android apps can now let a user request that their data be deleted, matching what was already possible on iOS.
  • 08Our docs now have a changelog, so you can see what changed in the SDKs.

Glow-Ups You'll Actually Notice

Improved6
  • 01Store badges for iOS and Android are now the same size everywhere in the app, so your pages don't look like they got dressed in a hurry.
  • 02We clarified how event sending options work, both in the app and in the docs, so it's clearer which events go where.
  • 03Meta install events now always map to the "Lead" event automatically (no Install event for web datasets on Meta unfortunately), no more guessing which mapping option to pick.
  • 04The error you'd see when a Google integration failed to connect is now actually useful, it tells you what went wrong instead of a cryptic message.
  • 05We now detect when an SDK key is used on the wrong platform, like an iOS key on an Android app, and give you a heads up.
  • 06The dashboard's navigation tabs got a proper redesign, with clearer colors and backgrounds.

Bugs That Didn't Survive the Sprint

Fixed7
  • 01We fixed a crash that could happen on iOS when picking your birthday during onboarding.
  • 02Editors were getting blocked from editing ad links by a confusing permissions error even though their role should have allowed it, that's sorted now.
  • 03The Cohorts page had two metric selectors doing the exact same thing, we removed the extra one.
  • 04Some RevenueCat event descriptions in the app didn't match what actually triggers them, we corrected the wording.
  • 05Cohort tables were quietly leaving out clicks and installs from standard link campaigns, they're counted properly now.
  • 06If you sent test events from a development build, the SDK setup checklist and status indicators wouldn't notice them and looked like nothing was happening, now they do.
  • 07Integration status badges had stopped flagging when a connection was actually broken, like Apple Ads failing quietly in the background, they're back to showing real time status with a prompt to reconnect.

Ad spend tracking for standard links, richer cohort tables, and the MCP opened up to everyone

Here's what shipped over the last couple weeks, no manual required, just scroll and enjoy.

New Toys Fresh Off the Truck

New12
  • 01We built the core flow for Universal Links on iOS and Android, the first step toward your links opening directly in the app instead of the browser.
  • 02You can now choose the time window used to calculate qualified events at the project level, instead of being stuck with one fixed default.
  • 03You can now assign an ad spend amount to a standard link, so influencer or affiliate links show CPI, CPA, and ROAS just like your paid campaigns.
  • 04Apps that haven't launched on the App Store or Play Store yet can now create an Appstack account and get set up early.
  • 05You can now search directly for a custom event by name in the metric selector instead of digging through the full list first.
  • 06Our MCP is now available as a plugin for OpenAI users, so you can pull your Appstack data into more of your AI tools.
  • 07The MCP section is now visible in the navigation for every account, it used to be hidden behind a flag.
  • 08Cohort tables can now show in-app events like trial starts and trial conversions, not just installs.
  • 09Cohort tables now color-code the numbers so trends jump out at a glance.
  • 10Standard links now show a dedicated column for custom parameters, so you can see them without digging through the shortened link.
  • 11Cohort tables now support a Keyword dimension, so you can break results down by search keyword for search campaigns.
  • 12The activity page finally has a date picker, so you can look at a specific time range instead of just the default view.

A Little Extra Sparkle

Improved7
  • 01Invoices now say "credits consumed" instead of the confusing "paid install" wording, making the geo-based pricing and different tiers clearer.
  • 02The sidebar got a redesign with a new setup section built right into your projects.
  • 03Connecting Apple Ads is simpler now, you no longer have to pick a campaign group upfront, we just show you the data that matches your app.
  • 04Metrics in the widget builder now show the actual event name, like rc_trial_started, instead of generic labels like PURCHASE, so it's clearer what you're looking at.
  • 05Event sources are now clearly split between SDK/server-to-server and Superwall/RevenueCat in the widget builder, so it's obvious where a metric is coming from.
  • 06Your ad network and event data now refreshes every 10 minutes instead of the previous cadence.
  • 07The iOS SDK now ships with the privacy manifest Apple requires, one less thing to worry about for App Store review.

Bugs We Sent to Bed Without Supper

Fixed8
  • 01Disconnecting your RevenueCat or Superwall integration used to still show the page as "connected" even though the connection was gone behind the scenes, that's fixed now.
  • 02New projects created from certain organizations could pick up the wrong default dashboard templates, mixing up what showed up out of the box, that's fixed.
  • 03Badges on the integrations page were rendering incorrectly instead of matching the intended design, now fixed.
  • 04You could still get charged for Apple Ads data even after disconnecting the integration, we now only count it while the integration is actually connected.
  • 05Refunded purchases weren't being subtracted from revenue, so dashboard revenue and exported revenue didn't match, they're aligned now.
  • 06The activity page used to need a hard refresh to show new data, and View History could show the wrong thing, both are fixed.
  • 07The last-30-days dashboard view sometimes showed revenue with no matching ad spend, or a $0 spike out of nowhere, those numbers are accurate now.
  • 08getAttributionParams() was silently dropping any custom parameters you added to a link, it now returns them along with the standard ones.

The MCP goes into beta, cohort grouping arrives, and Apple Ads gets keyword-level data

Here's what shipped over the last couple weeks, no manual required, just scroll and enjoy.

Brand New Additions to the Toolbox

New7
  • 01Apple Ads campaigns now show keyword-level data, so you can see ROAS broken down by keyword instead of just the campaign as a whole.
  • 02You can now choose whether Mixpanel and Amplitude receive every event or just attributed ones, handy if you're watching event-volume costs in those tools.
  • 03Cohort tables now support grouping by dimension, so you can break results down instead of filtering one campaign at a time.
  • 04We released our MCP in beta and got it certified in Claude, so it's easy to find and connect your Appstack data directly.
  • 05The Unity SDK now supports an autoInitialize option, making setup easier for game studios integrating it.
  • 06You can now set a custom customer ID directly from the SDK, across both native and wrapper versions.
  • 07Connecting Apple Ads now uses a simple OAuth flow instead of the old clunky setup.

Small Tweaks, Big Relief

Improved5
  • 01Every dialog across the app got a visual refresh to match our new design system, consistent headers, spacing, and states.
  • 02Hovering over a long campaign name now shows the full text instead of cutting it off.
  • 03Clicking Group by now jumps straight into the search box, so you can start typing without an extra click.
  • 04Flutter builds now default to Swift Package Manager over CocoaPods, matching where Flutter itself is heading.
  • 05We added short tutorial videos walking through SDK setup and configuration, so you don't have to piece it together from docs alone.

Squashed Like the Bugs They Were

Fixed11
  • 01Cohort tables would go completely blank when you grouped installs by week, even though day and month worked fine, that's fixed.
  • 02Meta Ads syncs could get stuck with zero feedback if a connection didn't complete, now you'll see a clear error and a way to reconnect instead of a silent hang.
  • 03Editing a standard link used to drop its custom parameters, now they show up and can be updated properly.
  • 04The "events sent" count for attributed-only mode could undercount what was actually sent, that math is fixed now.
  • 05Some users couldn't finish connecting Google and Android because the Customer ID field wouldn't save, that's fixed.
  • 06Retrying a stuck integration connection could quietly create duplicate sources behind the scenes, we made that process safe to retry so it cleans up after itself instead.
  • 07Links shared on Instagram briefly stopped working because of a change on Meta's side, we patched around it to keep them working.
  • 08Android events weren't being properly linked to users in Amplitude, and Google install campaigns were showing the campaign ID instead of its name, both are fixed.
  • 09Renaming or swapping a widget's metric didn't update its saved name, so people kept thinking they were looking at the old metric, that's fixed.
  • 10The onboarding checklist kept asking you to launch a campaign even after one was already running, it now recognizes that and moves on.
  • 11The Billing page header was shrinking down to a sliver and cutting off the title, it's back to full size and consistent with the rest of Settings.

Branded domains for links, PostHog joins the integration lineup, and a fresh batch of squashed bugs

Here's what shipped over the last couple weeks, no manual required, just scroll and enjoy.

Fresh Off the Workbench

New9
  • 01Sandbox and test purchases from RevenueCat and Superwall now show up in your SDK's dev environment instead of being ignored, and they won't get forwarded to ad networks.
  • 02You can now use your own branded domain for Appstack links, like theopray.appstack.link, instead of the shared appstack.link.
  • 03We added a new onboarding checklist right in the sidebar to help new accounts get up and running.
  • 04You can now connect PostHog as an integration directly from the web app and send your events there.
  • 05Standard links, the kind you would hand an influencer, can now use a custom product page too, not just paid links.
  • 06We published integration guidance for AI coding assistants like Claude Code, so they now know about common SDK setup gotchas like a missing appstack_id.
  • 07Table widgets can now be grouped by Date, so you're not forced into one aggregated number across your whole date range.
  • 08You can now create a default dashboard directly from the Links page, with the option to share it.
  • 09Dashboards got a new list view where you can reorder them, mark favorites, and give each one an emoji icon.

Buffed, Polished, Better

Improved10
  • 01You can now drag and drop to reorder group-by dimensions in the widget builder, and swap one out without deleting and re-adding it.
  • 02The widget creation flow got a visual refresh, cleaner and easier to follow.
  • 03Meta's Sales campaign mapping no longer lists event options that don't actually work for Sales, and event names now match exactly what you'd see in Meta.
  • 04Onboarding now guesses your country from your browser's timezone, one less field to fill in manually.
  • 05The fallback page shown when an app store link can't open directly got a redesign, it now feels action-oriented instead of like an error screen.
  • 06Custom and server-to-server events now show up in the activity page, they used to be missing.
  • 07The traffic origin labeled "Web" is now labeled "Appstack" for your EAC campaigns, clearer wording throughout your dashboards.
  • 08The Links page now shows clean short URLs instead of the full string with query parameters, the parameters still work behind the scenes.
  • 09Global filters now apply once you close the filter chip instead of updating on every keystroke, so pages load faster while you're picking values.
  • 10Apple Ads attributions now show a click step in your user history, matching how other ad networks are displayed.

Bugs Shown the Door

Fixed10
  • 01Switching datasets on the Meta Ads integration page used to leave the old API token in place, causing confusing mismatches, now switching datasets clears it and asks for a fresh one.
  • 02The Meta integration setup could spin forever if the very first request silently failed to reach our servers, it now retries automatically instead of leaving you stuck.
  • 03Fixed a visual glitch where the focus outline was getting clipped in the event mapping screen.
  • 04Pasting an Appstack link into a custom product page could create a redirect loop, we now block that and show an error instead.
  • 05Organic traffic in the Google Ads dashboard was showing up labeled "null" instead of "organic", that's fixed.
  • 06Custom events for organic traffic were sometimes getting lumped together under the wrong event name, that's fixed.
  • 07Cleaned up duplicate ad network logos, two Metas, two Google Ads, that were cluttering the icon selector.
  • 08Manually-triggered "install" events sent by mistake from the SDK were skewing install counts, we now ignore those and only count real installs.
  • 09A lot of RevenueCat and Superwall events tagged as "promotional" were being silently filtered out and never counted, we now accept events from all stores.
  • 10When someone clicked one ad network but ended up attributed to another, like clicking Meta and getting attributed to Apple, the user history showed the wrong network logo for that first click, it's accurate now.