Changelog
Changelog
Changelog
We ship new features, fixes, and improvements to Formo every week.
Changelog
We ship new features, fixes, and improvements to Formo every week.
Here are this week's highlights:
User Attribution Filters
Retention Cohorts by Label
Historical Label Backfills
Profiles Batch API
Improvements and Fixes
User Attribution Filters
The Users page now has an attribution mode toggle on the Wallets, Clusters, and Visitors tables, so you can switch between Any, First touch, and Last touch to see how a wallet looks under each attribution model without leaving the page.

This makes it easy to compare a campaign's first-touch reach against the wallets that actually converted under last-touch, and to spot the difference between users your channels introduced versus the ones they closed.
Retention Cohorts by Label
Retention cohorts now support filtering by user labels, so you can measure retention for the segments that actually matter to you.

If your product writes a custom label like open_interest or kyc_verified to Formo, you can now restrict a cohort to wallets that carry that label (e.g. open_interest > 10000) and watch how they retain over time, instead of being limited to event-based cohorts.
Carry-forward is built into the retention logic, so a label written once (or sporadically) is correctly applied to every subsequent week until the next event for that key.
Historical Label Backfills
The Create Label API now accepts an optional timestamp on each label write, so you can record labels at a point in the past instead of always at server time:
Current time: omit
timestampand the label is recorded at the moment you send it. This is the right default for live signals you're sending as users earn them.Historical data: pass an ISO-8601
timestampto record the label at a specific point in the past. This lets you backfill historical readings (for example, last quarter'sopen_interestsnapshot) so retention cohorts can evaluate each label value at the correct point in time.
This pairs especially well with cohorts based on numeric thresholds, where the value you cared about on a user's signup day may not be the value they carry today.
Profiles Batch API
The Profiles API now has batch endpoints for user labels and properties, so you can upsert up to 100 wallets in a single request instead of one wallet per call. Perfect for a nightly data syncs and cron jobs.

Both endpoints return partial-success results, so a single bad row doesn't fail the whole batch.
Improvements and Fixes
Added CSV export for analytics overview charts on Countries, Pages, Sources, Devices, Wallets, and Chains.
Added links from overview page charts to the users page so you can click any row to drill into the underlying wallets matching selected filters.
Added page size selector to the Activity and Users tables.
Improved accuracy for visitor and session counts on overview charts so they match the headline KPIs, using shared first-touch attribution model.
The Channel filter on the Users page now segments wallets by the channel that brought them in on their very first session, matching first-touch attribution on the Overview Channel chart.
Show full country names in the legend and tooltip of the Countries chart, in place of two-letter ISO codes.
Added
afandreferrerto the Web SDK's default tracked referral parameters so common affiliate and referrer query strings are captured out of the box.Added a workspace ID field to workspace settings, so support can debug your issues faster.
Improved Ask AI error diagnostics so transient failures are actually debuggable, with richer error context captured for our team.
Improved Ask AI response quality with reorganized system prompts and tighter SQL and chart guardrails.
Improved Ask AI tool-call resilience so mid-stream errors fall back gracefully instead of breaking the response.
Improved user clusters query performance.
Fixed Boards chart pagination scrolling to the wrong chart.
Fixed the date-picker disappearing on Boards.
Fixed the missing template title and description on the Dashboard template.
Fixed user count inflation in overview charts caused by anonymous ID churn from automated bots.
Platform security and performance improvements.
Here are this week's highlights:
User Attribution Filters
Retention Cohorts by Label
Historical Label Backfills
Profiles Batch API
Improvements and Fixes
User Attribution Filters
The Users page now has an attribution mode toggle on the Wallets, Clusters, and Visitors tables, so you can switch between Any, First touch, and Last touch to see how a wallet looks under each attribution model without leaving the page.

This makes it easy to compare a campaign's first-touch reach against the wallets that actually converted under last-touch, and to spot the difference between users your channels introduced versus the ones they closed.
Retention Cohorts by Label
Retention cohorts now support filtering by user labels, so you can measure retention for the segments that actually matter to you.

If your product writes a custom label like open_interest or kyc_verified to Formo, you can now restrict a cohort to wallets that carry that label (e.g. open_interest > 10000) and watch how they retain over time, instead of being limited to event-based cohorts.
Carry-forward is built into the retention logic, so a label written once (or sporadically) is correctly applied to every subsequent week until the next event for that key.
Historical Label Backfills
The Create Label API now accepts an optional timestamp on each label write, so you can record labels at a point in the past instead of always at server time:
Current time: omit
timestampand the label is recorded at the moment you send it. This is the right default for live signals you're sending as users earn them.Historical data: pass an ISO-8601
timestampto record the label at a specific point in the past. This lets you backfill historical readings (for example, last quarter'sopen_interestsnapshot) so retention cohorts can evaluate each label value at the correct point in time.
This pairs especially well with cohorts based on numeric thresholds, where the value you cared about on a user's signup day may not be the value they carry today.
Profiles Batch API
The Profiles API now has batch endpoints for user labels and properties, so you can upsert up to 100 wallets in a single request instead of one wallet per call. Perfect for a nightly data syncs and cron jobs.

Both endpoints return partial-success results, so a single bad row doesn't fail the whole batch.
Improvements and Fixes
Added CSV export for analytics overview charts on Countries, Pages, Sources, Devices, Wallets, and Chains.
Added links from overview page charts to the users page so you can click any row to drill into the underlying wallets matching selected filters.
Added page size selector to the Activity and Users tables.
Improved accuracy for visitor and session counts on overview charts so they match the headline KPIs, using shared first-touch attribution model.
The Channel filter on the Users page now segments wallets by the channel that brought them in on their very first session, matching first-touch attribution on the Overview Channel chart.
Show full country names in the legend and tooltip of the Countries chart, in place of two-letter ISO codes.
Added
afandreferrerto the Web SDK's default tracked referral parameters so common affiliate and referrer query strings are captured out of the box.Added a workspace ID field to workspace settings, so support can debug your issues faster.
Improved Ask AI error diagnostics so transient failures are actually debuggable, with richer error context captured for our team.
Improved Ask AI response quality with reorganized system prompts and tighter SQL and chart guardrails.
Improved Ask AI tool-call resilience so mid-stream errors fall back gracefully instead of breaking the response.
Improved user clusters query performance.
Fixed Boards chart pagination scrolling to the wrong chart.
Fixed the date-picker disappearing on Boards.
Fixed the missing template title and description on the Dashboard template.
Fixed user count inflation in overview charts caused by anonymous ID churn from automated bots.
Platform security and performance improvements.
Here are this week's highlights:
Wallet Clusters
Filter by Channel
New Dashboard Templates
Improved Geolocation
Improvements and Fixes
Wallet Clusters
Introducing a new wallet Clusters tab on the Users page. Clusters are groups of wallets associated with a single user.
Using identity resolution, multiple wallet addresses are grouped into identity-stitched user clusters: one row per wallet cluster.

Clustering happens automatically behind the scenes with minimal setup required. Here's how clustering works:
First, an explicit
user_idfrom the SDK identify event (for example, a Privy user ID or an in-app custom user id) merges every wallet identified under it into one cluster.Then, wallets without an explicit user ID are still grouped by
anonymous_id, using the earliest-seen canonical address as the cluster key.Otherwise, the wallet stands as its own single-address cluster.
Each cluster row shows the sum of individual wallet data including net worth, socials, labels, first and last seen, volume, revenue, and demographics.
Filter by Channel
You can now filter data by channel based on a 12-channel taxonomy such as Organic Social, Paid Search, Referrals, and more.

The twelve channels are:
Channel | How it's classified |
|---|---|
Paid Search | Paid signal + search-engine referrer ( |
Paid Video | Paid signal + video-platform referrer ( |
Paid Social | Paid signal + social-platform referrer ( |
| |
Referrals |
|
Display |
|
AI | Referrer is an AI assistant (ChatGPT, Claude, Perplexity, Gemini, DeepSeek, Copilot, etc.) |
Organic Search |
|
Organic Social |
|
Organic Video | Video-platform referrer with no paid signal |
Referrers | Any other non-empty referrer not matched above |
Direct | No referrer, no UTM, no click IDs (typed URL, bookmark, stripped referrer) |
Filter by Channel works across every chart and metric on the overview page (top sources, top pages, top locations, top chains, top events, top wallets, KPIs, revenue, volume, wallets, transactions).
Learn more about Channels.
New Dashboard Templates
Three new dashboard templates are now available. Choose from the following templates when you create a custom board, to help you get started:
User Retention & Cohorts Dashboard
User Segments Dashboard
Feature Adoption Dashboard

Each template ships with prebuilt charts and SQL queries against your project's custom events so you can set up a working board more quickly. Pick a template and create your first custom board in a few clicks.
Need more help? Check out How to Build a Custom Dashboard.
Improved Geolocation
Improved country detection for sesions and users is now live with server-side geolocation. This works together with a browser-timezone fallback to improve data accuracy for users with non-default timezones and VPNs.
Audience insights, top countries, and country breakdowns across the dashboard report countries is now more accurate than before.
Analytics remains privacy-friendly: no IP addresses are logged or stored anywhere in Formo. Read more about what we collect.
This improvement is live today. No SDK upgrade is required.
Improvements and Fixes
Added dashboard template previews so you can see the charts inside a template before creating it.
Added a new Tracking Plan Generator free tool that outputs a recommended event taxonomy, property schemas, and SDK code snippets for web and mobile to help users get started more quickly.
Added page and session scopes to the Filter by Page filter, so you can fllter for both sessions that viewed page X and data for a specific page X.
Added a refresh button to the Users table so you can pull fresh data without reloading the whole page.
Improved Format SQL performance in the SQL editor, with faster formatting on large queries.
Improved the churn analysis section on the Insights page.
Fixed an edge case with Solana wallet profiling.
Minor UI and UX fixes.
Performance improvements and security fixes.
Here are this week's highlights:
Wallet Clusters
Filter by Channel
New Dashboard Templates
Improved Geolocation
Improvements and Fixes
Wallet Clusters
Introducing a new wallet Clusters tab on the Users page. Clusters are groups of wallets associated with a single user.
Using identity resolution, multiple wallet addresses are grouped into identity-stitched user clusters: one row per wallet cluster.

Clustering happens automatically behind the scenes with minimal setup required. Here's how clustering works:
First, an explicit
user_idfrom the SDK identify event (for example, a Privy user ID or an in-app custom user id) merges every wallet identified under it into one cluster.Then, wallets without an explicit user ID are still grouped by
anonymous_id, using the earliest-seen canonical address as the cluster key.Otherwise, the wallet stands as its own single-address cluster.
Each cluster row shows the sum of individual wallet data including net worth, socials, labels, first and last seen, volume, revenue, and demographics.
Filter by Channel
You can now filter data by channel based on a 12-channel taxonomy such as Organic Social, Paid Search, Referrals, and more.

The twelve channels are:
Channel | How it's classified |
|---|---|
Paid Search | Paid signal + search-engine referrer ( |
Paid Video | Paid signal + video-platform referrer ( |
Paid Social | Paid signal + social-platform referrer ( |
| |
Referrals |
|
Display |
|
AI | Referrer is an AI assistant (ChatGPT, Claude, Perplexity, Gemini, DeepSeek, Copilot, etc.) |
Organic Search |
|
Organic Social |
|
Organic Video | Video-platform referrer with no paid signal |
Referrers | Any other non-empty referrer not matched above |
Direct | No referrer, no UTM, no click IDs (typed URL, bookmark, stripped referrer) |
Filter by Channel works across every chart and metric on the overview page (top sources, top pages, top locations, top chains, top events, top wallets, KPIs, revenue, volume, wallets, transactions).
Learn more about Channels.
New Dashboard Templates
Three new dashboard templates are now available. Choose from the following templates when you create a custom board, to help you get started:
User Retention & Cohorts Dashboard
User Segments Dashboard
Feature Adoption Dashboard

Each template ships with prebuilt charts and SQL queries against your project's custom events so you can set up a working board more quickly. Pick a template and create your first custom board in a few clicks.
Need more help? Check out How to Build a Custom Dashboard.
Improved Geolocation
Improved country detection for sesions and users is now live with server-side geolocation. This works together with a browser-timezone fallback to improve data accuracy for users with non-default timezones and VPNs.
Audience insights, top countries, and country breakdowns across the dashboard report countries is now more accurate than before.
Analytics remains privacy-friendly: no IP addresses are logged or stored anywhere in Formo. Read more about what we collect.
This improvement is live today. No SDK upgrade is required.
Improvements and Fixes
Added dashboard template previews so you can see the charts inside a template before creating it.
Added a new Tracking Plan Generator free tool that outputs a recommended event taxonomy, property schemas, and SDK code snippets for web and mobile to help users get started more quickly.
Added page and session scopes to the Filter by Page filter, so you can fllter for both sessions that viewed page X and data for a specific page X.
Added a refresh button to the Users table so you can pull fresh data without reloading the whole page.
Improved Format SQL performance in the SQL editor, with faster formatting on large queries.
Improved the churn analysis section on the Insights page.
Fixed an edge case with Solana wallet profiling.
Minor UI and UX fixes.
Performance improvements and security fixes.
Here are this week's highlights:
Lifecycle Settings
At-Risk Lifecycle Stage
x402 and MPP Support
Unique Visitors
Improvements and Fixes
Lifecycle Settings
Lifecycle thresholds are now configurable per project from your project settings page.

Defaults like "Power user = 5 active days in last 30 days" don't fit every product, so you can now tune the windows for New, Returning, Power user, At Risk, Churned, and Resurrected lifecycles to match how your team defines engagement.
New At Risk Lifecycle Stage
You can now see a new At Risk lifecycle stage that flags previously engaged users whose activity has slowed but who haven't fully churned yet.
At Risk is the right lifecycle to retain them with an intervention campaign before they're gone for good, and it surfaces consistently across the Users page, Lifecycle reports, and wallet profile labels.
x402 and MPP Support for Profiles API
The Profiles API is now available to AI Agents via x402 (Base) and MPP (Tempo.) Agents can pay 0.05 USDC per request to get enriched wallet profile data with no API key required.

This unlocks pay-per-call agent access to wallet enrichment and personalization use cases based on onchain data.
Unique Visitors
Formo now tracks Unique Visitors, equivalent to GA's Active Users. Unique Visitors counts distinct anonymous_ids over the selected period, deduplicating across sessions and days.
This gives you a clean top-of-funnel KPIs alongside wallets, transactions, and revenue, and a like-for-like comparison with the visitor metric most teams already report from web analytics.
Improvements and Fixes
Added Binance verification labels, automatically tagging wallets that hold a Binance Account Bound Token so you can segment KYC-verified users.
Added a billing period selector on the Usage page so you can page through previous billing periods to inspect historical event and MAU consumption.
Added a hover dropdown for Dashboards when the sidebar is collapsed, so you can switch boards without expanding the nav.
Fixed duplicating a board so chart settings and positions are copied alongside the layout.
Improved form digest cron resilience, retrying through transient 522s from upstream origins instead of failing the run.
Performance improvements and security fixes.
Here are this week's highlights:
Lifecycle Settings
At-Risk Lifecycle Stage
x402 and MPP Support
Unique Visitors
Improvements and Fixes
Lifecycle Settings
Lifecycle thresholds are now configurable per project from your project settings page.

Defaults like "Power user = 5 active days in last 30 days" don't fit every product, so you can now tune the windows for New, Returning, Power user, At Risk, Churned, and Resurrected lifecycles to match how your team defines engagement.
New At Risk Lifecycle Stage
You can now see a new At Risk lifecycle stage that flags previously engaged users whose activity has slowed but who haven't fully churned yet.
At Risk is the right lifecycle to retain them with an intervention campaign before they're gone for good, and it surfaces consistently across the Users page, Lifecycle reports, and wallet profile labels.
x402 and MPP Support for Profiles API
The Profiles API is now available to AI Agents via x402 (Base) and MPP (Tempo.) Agents can pay 0.05 USDC per request to get enriched wallet profile data with no API key required.

This unlocks pay-per-call agent access to wallet enrichment and personalization use cases based on onchain data.
Unique Visitors
Formo now tracks Unique Visitors, equivalent to GA's Active Users. Unique Visitors counts distinct anonymous_ids over the selected period, deduplicating across sessions and days.
This gives you a clean top-of-funnel KPIs alongside wallets, transactions, and revenue, and a like-for-like comparison with the visitor metric most teams already report from web analytics.
Improvements and Fixes
Added Binance verification labels, automatically tagging wallets that hold a Binance Account Bound Token so you can segment KYC-verified users.
Added a billing period selector on the Usage page so you can page through previous billing periods to inspect historical event and MAU consumption.
Added a hover dropdown for Dashboards when the sidebar is collapsed, so you can switch boards without expanding the nav.
Fixed duplicating a board so chart settings and positions are copied alongside the layout.
Improved form digest cron resilience, retrying through transient 522s from upstream origins instead of failing the run.
Performance improvements and security fixes.
Here are this week's highlights:
Behavior Filters Based on First-Seen
Transaction Frequency Chart
Query Parameter Redaction
Sticky Referrer Tracking
Improvements and Fixes
Behavior Filters Based on First-Seen
Behavior filters now support First-seen relative time windows to make targeting much more precise.

Until now, behavior filters were limited to rolling windows ("did X in the last N days"). You can now anchor windows to each user's first-seen timestamp, so you can ask questions like:
Users who visited the Trading Competition page within 2 hours of their first session (attribute engagement directly to the campaign that brought them in).
Users who connected a wallet, deposited, and clicked "Enroll" within their first 24 hours (first-day activation funnel).
Users who came back to transact more than 7 days after first-seen (true returning users vs. same-session conversions).
Together these mean better attribution to specific campaigns, sharper onboarding activation analysis, and more targeted segments.
Learn more in the Wallet Segmentation guide.
Transaction Frequency Chart
A new transaction frequency chart on the Users page show you how often your users transact.

View the distribution of transaction counts per wallet to distinguish one-time users from power users, spot drop-off between first and second transactions, and target wallets by activity tier.
Query Parameter Redaction
You can now strip sensitive query parameters before events are stored or sent. Pass a list of query parameter names and the SDK redacts matching keys (case-insensitive) from event properties.

Learn more in the Web SDK docs.
Sticky Referrer Tracking
The Web SDK now keeps first-touch referrer sticky across an entire session, so internal navigation no longer overwrites the source that brought a user in.
This means cleaner channel reports, more accurate first-touch attribution, and no more "self-referral" noise from internal page-to-page navigation.
Improvements and Fixes
Hardened AI Insights generation so Acquisition, Activation, and Behavioral cards reliably render on the page and in the weekly email.
Improved Ask AI response quality with an eval-and-review harness, tighter prompt rules, and better date and tool-selection handling.
Extracted
volume,revenue, andpointsto typed columns on events for faster, more reliable revenue and volume queries across dashboards and the SQL Explorer.Fixed a bug with filtering by Referrer URLs.
Steered invited users to join their team's existing workspace during onboarding instead of accidentally creating a new one.
Added wallet icons (via RDNS) to the Top Wallets chart for quicker visual identification of which wallets your users are connecting with.
Standardized all destructive-action confirmation modals to a single "type the resource name to confirm" pattern across projects, workspaces, dashboards, charts, and API keys.
Added an upgrade button to the Usage page, mirroring the Billing page placement.
Upgraded
@formo/analyticsto v1.32.0 across all 17 example apps.Improved infrastructure monitoring for faster incident detection.
Performance and security improvements.
Here are this week's highlights:
Behavior Filters Based on First-Seen
Transaction Frequency Chart
Query Parameter Redaction
Sticky Referrer Tracking
Improvements and Fixes
Behavior Filters Based on First-Seen
Behavior filters now support First-seen relative time windows to make targeting much more precise.

Until now, behavior filters were limited to rolling windows ("did X in the last N days"). You can now anchor windows to each user's first-seen timestamp, so you can ask questions like:
Users who visited the Trading Competition page within 2 hours of their first session (attribute engagement directly to the campaign that brought them in).
Users who connected a wallet, deposited, and clicked "Enroll" within their first 24 hours (first-day activation funnel).
Users who came back to transact more than 7 days after first-seen (true returning users vs. same-session conversions).
Together these mean better attribution to specific campaigns, sharper onboarding activation analysis, and more targeted segments.
Learn more in the Wallet Segmentation guide.
Transaction Frequency Chart
A new transaction frequency chart on the Users page show you how often your users transact.

View the distribution of transaction counts per wallet to distinguish one-time users from power users, spot drop-off between first and second transactions, and target wallets by activity tier.
Query Parameter Redaction
You can now strip sensitive query parameters before events are stored or sent. Pass a list of query parameter names and the SDK redacts matching keys (case-insensitive) from event properties.

Learn more in the Web SDK docs.
Sticky Referrer Tracking
The Web SDK now keeps first-touch referrer sticky across an entire session, so internal navigation no longer overwrites the source that brought a user in.
This means cleaner channel reports, more accurate first-touch attribution, and no more "self-referral" noise from internal page-to-page navigation.
Improvements and Fixes
Hardened AI Insights generation so Acquisition, Activation, and Behavioral cards reliably render on the page and in the weekly email.
Improved Ask AI response quality with an eval-and-review harness, tighter prompt rules, and better date and tool-selection handling.
Extracted
volume,revenue, andpointsto typed columns on events for faster, more reliable revenue and volume queries across dashboards and the SQL Explorer.Fixed a bug with filtering by Referrer URLs.
Steered invited users to join their team's existing workspace during onboarding instead of accidentally creating a new one.
Added wallet icons (via RDNS) to the Top Wallets chart for quicker visual identification of which wallets your users are connecting with.
Standardized all destructive-action confirmation modals to a single "type the resource name to confirm" pattern across projects, workspaces, dashboards, charts, and API keys.
Added an upgrade button to the Usage page, mirroring the Billing page placement.
Upgraded
@formo/analyticsto v1.32.0 across all 17 example apps.Improved infrastructure monitoring for faster incident detection.
Performance and security improvements.
Here are this week's highlights:
Filter by Page
Angular SDK support
Crossmint and OpenFort examples
Improvements and Fixes
Filter by Page
You can view the performance of specific pages with the new Page filter. The Overview and Activity pages now support filtering by Page, such as specific vault or campaign page.
You can also click any row in the Top Pages chart to apply the page filter inline, the same way segments work elsewhere in the dashboard.
Angular SDK support
The Web SDK now supports Angular. Non-React frameworks (Angular, Vue, Svelte, vanilla JS) can now use Formo without React types. React and Next.js apps continue to work as before.
See the Angular example and the docs for more details.
Crossmint and OpenFort examples
The examples repo now includes end-to-end integrations for Crossmint embedded wallets and OpenFort smart wallets.
Crossmint is a platform for companies and agents to integrate stablecoin rails — including wallets, onramps, stablecoin orchestration & more.
OpenFort is the wallet stack for agentic and stablecoin payments —one open-source SDK instead of five vendors.
Improvements and Fixes
Added Angular SDK support.
Added Crossmint and OpenFort wallet examples to the examples repo.
Added a rolling curve view and richer tooltip to the Retention chart.
Refined bounce rate to an engagement-aware definition so single-page sessions with real engagement no longer inflate the metric.
Replaced the cohort-analysis Insights with volume and revenue Insights.
Added ENS name support to the public profiles API.
Added a copy button to Top Pages chart rows in the Analytics Overview.
Restricted the Formo MCP OAuth flow to Scale and Enterprise plans, matching API key access.
Restricted Weekly Insights emails to paid workspaces.
Fixed the referrer URL filter not applying on the overview page.
Fixed funnel conversion-window editor display drifting from execution.
Fixed a datepicker visual glitch when selecting a date range.
Fixed the Retention chart so still-maturing weeks render as blank instead of 0%, removing the false churn cliff on the newest cohort. AI insight rules and weekly email prompts were updated in the same pass so missing weekly retention is no longer misread as churn.
Fixed token-gated forms SIWE verification for smart-contract wallets on non-mainnet chains.
Fixed empty segments dropdown on public boards.
Fixed invalid MCP tools list error.
Migrated all SDK repos to pnpm 11 with a 7-day minimum release age for stricter supply-chain protection.
Hardened GitHub Actions across SDK repos (SHA-pinned third-party actions, command-injection fixes in the release workflow, protected credentials.)
Performance and security fixes across the platform.
Here are this week's highlights:
Filter by Page
Angular SDK support
Crossmint and OpenFort examples
Improvements and Fixes
Filter by Page
You can view the performance of specific pages with the new Page filter. The Overview and Activity pages now support filtering by Page, such as specific vault or campaign page.
You can also click any row in the Top Pages chart to apply the page filter inline, the same way segments work elsewhere in the dashboard.
Angular SDK support
The Web SDK now supports Angular. Non-React frameworks (Angular, Vue, Svelte, vanilla JS) can now use Formo without React types. React and Next.js apps continue to work as before.
See the Angular example and the docs for more details.
Crossmint and OpenFort examples
The examples repo now includes end-to-end integrations for Crossmint embedded wallets and OpenFort smart wallets.
Crossmint is a platform for companies and agents to integrate stablecoin rails — including wallets, onramps, stablecoin orchestration & more.
OpenFort is the wallet stack for agentic and stablecoin payments —one open-source SDK instead of five vendors.
Improvements and Fixes
Added Angular SDK support.
Added Crossmint and OpenFort wallet examples to the examples repo.
Added a rolling curve view and richer tooltip to the Retention chart.
Refined bounce rate to an engagement-aware definition so single-page sessions with real engagement no longer inflate the metric.
Replaced the cohort-analysis Insights with volume and revenue Insights.
Added ENS name support to the public profiles API.
Added a copy button to Top Pages chart rows in the Analytics Overview.
Restricted the Formo MCP OAuth flow to Scale and Enterprise plans, matching API key access.
Restricted Weekly Insights emails to paid workspaces.
Fixed the referrer URL filter not applying on the overview page.
Fixed funnel conversion-window editor display drifting from execution.
Fixed a datepicker visual glitch when selecting a date range.
Fixed the Retention chart so still-maturing weeks render as blank instead of 0%, removing the false churn cliff on the newest cohort. AI insight rules and weekly email prompts were updated in the same pass so missing weekly retention is no longer misread as churn.
Fixed token-gated forms SIWE verification for smart-contract wallets on non-mainnet chains.
Fixed empty segments dropdown on public boards.
Fixed invalid MCP tools list error.
Migrated all SDK repos to pnpm 11 with a 7-day minimum release age for stricter supply-chain protection.
Hardened GitHub Actions across SDK repos (SHA-pinned third-party actions, command-injection fixes in the release workflow, protected credentials.)
Performance and security fixes across the platform.
Here are this week's highlights:
OAuth on Formo MCP
Segments on Funnels
Event Exclusions in Flow Charts
Improvements and Fixes
OAuth on Formo MCP
The Formo MCP server now supports OAuth, so you can add it as a remote MCP connector in Claude, ChatGPT, Cursor, and other clients. Connect your Formo account with the tools you already use.

Learn more in the MCP docs.
Segments on Funnels
You can now filter Funnels by any saved segment, the same way you can on the Users and Activity pages.
Pick a segment from the chart controls and the entire funnel recomputes against that cohort, so you can compare conversion across audiences without duplicating charts.

Learn more in the Segments docs.
Event Exclusions in Flow Charts
Flow charts (user paths) now support an event exclusion filter. Pick events to leave out of the path entirely and the chart reflows around only the events you care about.
This is the fastest way to clean up noisy flows without changing what you instrument.
Improvements and Fixes
Added
cmd+enterkeyboard shortcut to submit on all code editors.Added unsubscribe controls usage limit alerts.
Fixed Ask AI stopping after the initial request.
Fixed datepicker not rendering on the Number charts edit preview.
Fixed errors when deleting a newly created board.
Fixed flow chart undercount where long converters were dropped from the end-step branch.
Fixed device, browser, and OS aggregations losing
unknownvalues.Fixed minor billing UI bugs.
Fixed orphaned instance page events in the Web SDK.
Fixed a Formo MCP
tools/list400 error.Performance and security fixes across the platform.
Here are this week's highlights:
OAuth on Formo MCP
Segments on Funnels
Event Exclusions in Flow Charts
Improvements and Fixes
OAuth on Formo MCP
The Formo MCP server now supports OAuth, so you can add it as a remote MCP connector in Claude, ChatGPT, Cursor, and other clients. Connect your Formo account with the tools you already use.

Learn more in the MCP docs.
Segments on Funnels
You can now filter Funnels by any saved segment, the same way you can on the Users and Activity pages.
Pick a segment from the chart controls and the entire funnel recomputes against that cohort, so you can compare conversion across audiences without duplicating charts.

Learn more in the Segments docs.
Event Exclusions in Flow Charts
Flow charts (user paths) now support an event exclusion filter. Pick events to leave out of the path entirely and the chart reflows around only the events you care about.
This is the fastest way to clean up noisy flows without changing what you instrument.
Improvements and Fixes
Added
cmd+enterkeyboard shortcut to submit on all code editors.Added unsubscribe controls usage limit alerts.
Fixed Ask AI stopping after the initial request.
Fixed datepicker not rendering on the Number charts edit preview.
Fixed errors when deleting a newly created board.
Fixed flow chart undercount where long converters were dropped from the end-step branch.
Fixed device, browser, and OS aggregations losing
unknownvalues.Fixed minor billing UI bugs.
Fixed orphaned instance page events in the Web SDK.
Fixed a Formo MCP
tools/list400 error.Performance and security fixes across the platform.
Here are this week's highlights:
Performance improvements
Last-touch attribution for funnels
Funnel and Flow public API endpoints
Performance improvements
We've completed significant performance improvements across the platform, including wallets, transactions, top pages, top sources, funnels, and flow charts.
Last-touch attribution for funnels
Funnels now support last-touch attribution as a first-class breakdown option, letting you credit the most recent source, campaign, or referrer before a user converted.
This complements first-touch attribution and gives growth and marketing teams a clearer view of which channels are actually driving conversion at the moment of action, rather than only the channel that introduced the user.
Open any existing funnel and toggle the attribution type to last-touch to see how your numbers shift. Learn more in the Funnels documentation.
Funnel and Flow public API endpoints
Funnels and Flows are now available through the public Query API, so you can pull conversion and user-journey data programmatically into dashboards, notebooks, and downstream systems.
The OpenAPI spec has been updated alongside the new endpoints, making it easy to generate clients and explore the schema. If you build internal tooling on top of Formo, point your scripts and integrations at the new endpoints.
See the API overview for more.
Here are this week's highlights:
Performance improvements
Last-touch attribution for funnels
Funnel and Flow public API endpoints
Performance improvements
We've completed significant performance improvements across the platform, including wallets, transactions, top pages, top sources, funnels, and flow charts.
Last-touch attribution for funnels
Funnels now support last-touch attribution as a first-class breakdown option, letting you credit the most recent source, campaign, or referrer before a user converted.
This complements first-touch attribution and gives growth and marketing teams a clearer view of which channels are actually driving conversion at the moment of action, rather than only the channel that introduced the user.
Open any existing funnel and toggle the attribution type to last-touch to see how your numbers shift. Learn more in the Funnels documentation.
Funnel and Flow public API endpoints
Funnels and Flows are now available through the public Query API, so you can pull conversion and user-journey data programmatically into dashboards, notebooks, and downstream systems.
The OpenAPI spec has been updated alongside the new endpoints, making it easy to generate clients and explore the schema. If you build internal tooling on top of Formo, point your scripts and integrations at the new endpoints.
See the API overview for more.
Here are this week's highlights:
AI SQL Helpers
Ask AI Follow-up Questions
Funnels Compare Mode
Area Chart
Global Search
Profile Side Panel
Query API
Improvements and Fixes
AI SQL helpers
Three new AI helpers now sit next to the SQL editor on both the Explorer page and the create/edit chart page
Explain this Query describes what a SQL query does in plain English.
Generate SQL turns a prompt into SQL.
Format SQL cleans up an existing query in place.

Ask AI Follow-up Questions
Every Ask AI response now ends suggested follow-up questions you can click to keep digging.

The suggestions are generated from the conversation so far and the project's saved charts, events, and segments, so they stay relevant to the data you're actually looking at instead of pulling you off-topic.
Funnels Compare Mode
The funnel chart now has a Compare mode toggle in its date controls, mirroring the one on the overview page, so you can put two date ranges side by side.

Each step now also shows the median time to convert from the previous step, so you can see where users stall, not just where they drop.
Area Charts
You can now create Area Charts.

Area charts support stacking out of the box. It's available alongside Line, Bar, Number, and the other existing chart types.
Global Search
Hit Cmd+K (or Ctrl+K) anywhere in the app to open a command palette. Jump to key pages, custom boards, segments, past chats, and settings even more quickly.

If your query does not match a known action, ask the question directly to Ask AI.

Profile Side Panel
On the Users page, clicking a user now opens its profile in a side panel instead opening a new tab for a smoother experience.

The side panel keeps your filtered list visible so you can scan a cohort and dip into individual wallets without losing context. A link to the standalone profile page is still there when you want to bookmark and share it.
Query API
The full Query API is now live, with 18 public endpoints that expose the same backed data that powers every chart on the Formo dashboard. Use this to build internal tooling and dashboards with Formo data.
Improvements and Fixes
Added standardized public API error codes.
Added Idempotency-Key support on writes to public API.
Added new Formo CLI
profiles updateandprofiles labels create/deletecommands.Added a
user_idfield to wallet profile data so server-side identifiers can be carried alongside wallet identity.Added a Send Test Alert action to alerts so you can verify your webhook endpoint and payload.
Added URL validation for external SSO and OAuth redirects for security.
Refactored account and workspace onboarding flow.
Standardized filter field naming across the public API surface.
Fixed sticky table column rendering and users filter bar UI issue.
Performance improvements and fixes.
Here are this week's highlights:
AI SQL Helpers
Ask AI Follow-up Questions
Funnels Compare Mode
Area Chart
Global Search
Profile Side Panel
Query API
Improvements and Fixes
AI SQL helpers
Three new AI helpers now sit next to the SQL editor on both the Explorer page and the create/edit chart page
Explain this Query describes what a SQL query does in plain English.
Generate SQL turns a prompt into SQL.
Format SQL cleans up an existing query in place.

Ask AI Follow-up Questions
Every Ask AI response now ends suggested follow-up questions you can click to keep digging.

The suggestions are generated from the conversation so far and the project's saved charts, events, and segments, so they stay relevant to the data you're actually looking at instead of pulling you off-topic.
Funnels Compare Mode
The funnel chart now has a Compare mode toggle in its date controls, mirroring the one on the overview page, so you can put two date ranges side by side.

Each step now also shows the median time to convert from the previous step, so you can see where users stall, not just where they drop.
Area Charts
You can now create Area Charts.

Area charts support stacking out of the box. It's available alongside Line, Bar, Number, and the other existing chart types.
Global Search
Hit Cmd+K (or Ctrl+K) anywhere in the app to open a command palette. Jump to key pages, custom boards, segments, past chats, and settings even more quickly.

If your query does not match a known action, ask the question directly to Ask AI.

Profile Side Panel
On the Users page, clicking a user now opens its profile in a side panel instead opening a new tab for a smoother experience.

The side panel keeps your filtered list visible so you can scan a cohort and dip into individual wallets without losing context. A link to the standalone profile page is still there when you want to bookmark and share it.
Query API
The full Query API is now live, with 18 public endpoints that expose the same backed data that powers every chart on the Formo dashboard. Use this to build internal tooling and dashboards with Formo data.
Improvements and Fixes
Added standardized public API error codes.
Added Idempotency-Key support on writes to public API.
Added new Formo CLI
profiles updateandprofiles labels create/deletecommands.Added a
user_idfield to wallet profile data so server-side identifiers can be carried alongside wallet identity.Added a Send Test Alert action to alerts so you can verify your webhook endpoint and payload.
Added URL validation for external SSO and OAuth redirects for security.
Refactored account and workspace onboarding flow.
Standardized filter field naming across the public API surface.
Fixed sticky table column rendering and users filter bar UI issue.
Performance improvements and fixes.
Here are this week's highlights:
User Properties and Labels
Workspace Audit Log
Improved Wallet Search
Improvements and Fixes
User Properties and Labels
You can now add first-party user properties and custom user labels for wallet profiles, on the dashboard and the API.

Set a custom display name, email, socials, avatar, location, and other identity fields on a wallet profile. Tag wallets with custom labels (VIP tier, KYC status, etc). Custom user labels work with all existing features including segments, filters, and charts out of the box.
With first-party data alongside the web, product, and onchain data Formo already collects, you can now use Formo as the single source of truth for your DeFi app. No more manually stitching together a separate CRM, analytics tool, and internal database. Push user properties and labels into Formo's customer data platform, then use the unified profile across product analytics, attribution, segmentation, and outreach.
Workspace Audit Log
Workspaces now record an Audit Log of who did what: invites, role changes, project updates, billing changes, and other key actions.

This is designed for SOC2 readiness and is useful for any team that wants visibility into workspace changes, especially when multiple team members have admin access.
Improved Wallet Search
You can now search wallets from social profiles on the Users page and Profile Search API . Search based on a partial address, ENS name, Twitter handle, or any social identifier and Formo will find the matching wallet profile.
Improvements and Fixes
Added confirmation step to destructive deletes on projects, segments, boards, contracts, and API keys.
Added a row-limit control to SQL Explorer so you can control the size of large queries.
Added raw results table to charts so you can inspect the underlying numbers behind them.
Added volume to weekly email reports so you can see week-over-week change at a glance.
Added MCP and API setup instructions to the API keys page so it's easier to get started.
Added a feedback link to the sidebar so it's easier to share what's working and what isn't.
Added 2FA status to the workspace members page.
Added ENS name support to the Activity page search bar.
Added time-based sorting to the Activity page.
Added a tooltip to the board global datepicker explaining how the selected range applies to charts.
Replaced the underlying engine for Sankey visualizations for faster, more consistent rendering.
Improved handling for unknown values from device, browser, and OS tracking.
Improved label value filtering to be case-insensitive.
Improved error handling and API key validation across the API.
Improved Ask AI's handling of date variables in queries and charts.
Improved Web SDK location detection to only emit valid country codes.
Fixed an issue with SQL Editor exports to JSON and CSV.
Fixed an issue with the weekly email report.
Performance and scalability improvements across the platform
Here are this week's highlights:
User Properties and Labels
Workspace Audit Log
Improved Wallet Search
Improvements and Fixes
User Properties and Labels
You can now add first-party user properties and custom user labels for wallet profiles, on the dashboard and the API.

Set a custom display name, email, socials, avatar, location, and other identity fields on a wallet profile. Tag wallets with custom labels (VIP tier, KYC status, etc). Custom user labels work with all existing features including segments, filters, and charts out of the box.
With first-party data alongside the web, product, and onchain data Formo already collects, you can now use Formo as the single source of truth for your DeFi app. No more manually stitching together a separate CRM, analytics tool, and internal database. Push user properties and labels into Formo's customer data platform, then use the unified profile across product analytics, attribution, segmentation, and outreach.
Workspace Audit Log
Workspaces now record an Audit Log of who did what: invites, role changes, project updates, billing changes, and other key actions.

This is designed for SOC2 readiness and is useful for any team that wants visibility into workspace changes, especially when multiple team members have admin access.
Improved Wallet Search
You can now search wallets from social profiles on the Users page and Profile Search API . Search based on a partial address, ENS name, Twitter handle, or any social identifier and Formo will find the matching wallet profile.
Improvements and Fixes
Added confirmation step to destructive deletes on projects, segments, boards, contracts, and API keys.
Added a row-limit control to SQL Explorer so you can control the size of large queries.
Added raw results table to charts so you can inspect the underlying numbers behind them.
Added volume to weekly email reports so you can see week-over-week change at a glance.
Added MCP and API setup instructions to the API keys page so it's easier to get started.
Added a feedback link to the sidebar so it's easier to share what's working and what isn't.
Added 2FA status to the workspace members page.
Added ENS name support to the Activity page search bar.
Added time-based sorting to the Activity page.
Added a tooltip to the board global datepicker explaining how the selected range applies to charts.
Replaced the underlying engine for Sankey visualizations for faster, more consistent rendering.
Improved handling for unknown values from device, browser, and OS tracking.
Improved label value filtering to be case-insensitive.
Improved error handling and API key validation across the API.
Improved Ask AI's handling of date variables in queries and charts.
Improved Web SDK location detection to only emit valid country codes.
Fixed an issue with SQL Editor exports to JSON and CSV.
Fixed an issue with the weekly email report.
Performance and scalability improvements across the platform
Here are this week's highlights:
Extra Usage
Ask AI Gets Smarter
Top Channels
Click IDs for Paid Attribution
Install-Time Mobile Attribution
Improvements and Fixes
Extra Usage
Workspaces with a payment methodcan now go above their plan's MAU limit without missing any data.

This means growing projects no longer lose data during a spike, and teams don't need to keep upgrading mid-cycle to keep tracking users.
Overages are billed as a one-time charge at the end of the cycle, and you can set a monthly spend cap so there are no surprises.
Ask AI Gets Smarter
A big batch of Ask AI improvements landed this week.

Here is a summary:
Ask AI can now answer product, SDK, and API questions by searching and citing the exact doc pages it used, instead of bouncing you to the docs.
The system prompt was updated with the latest SQL functions and variables introduced last week.
Chart proposals now enforce per-chart date ranges and tighter SQL validation.
Raw aggregate states are no longer leaked into answers.
You can save individual charts from an Ask AI dashboard to an existing board, instead of saving the whole dashboard.
New guardrails keep Ask AI focused on analytics questions it can actually answer well.
Top Channels
You can now see a Channels chart alongside Referrers and UTM.

Referrers, UTMs, and other properties are grouped into marketing channels like Organic Social, Paid Search, Direct, Referral, and Email, so you can see traffic composition by channel without having to bucket domains yourself.
Click IDs for Paid Attribution
The Web SDK now captures and persists click ID parameters from landing page URLs alongside UTMs, so paid traffic from Google, Meta, TikTok, LinkedIn, Reddit, and X is attributed correctly to the campaigns that drove it.
Twelve vendor parameters are supported including gclid, gad_source, gbraid, wbraid, dclid, fbclid, msclkid, yclid, ttclid, twclid, li_fat_id, and rdt_cid.
Install-Time Mobile Attribution
The React Native SDK now automatically captures install-time attribution from:
Google Play Install Referrer API on Android
Apple AdServices on iOS
This means you can see incoming traffic source fields (utm_source, utm_medium, utm_campaign, and friends) to your mobile app.
Deep link attribution still takes precedence, and the merge logic only fills empty fields, so real deep links never get overwritten by install referrer data.
Improvements and Fixes
Added more breakdown dimensions for charts and funnels
Added vertical resizing to the SQL Query Editor
Added per-request nonce-based Content Security Policy for tighter frontend security
Added the ability to remove saved payment methods on the free plan
Fixed double-counting of protocol-issued token values in wallet events
Fixed stale Tinybird tokens after pipe renames by auto-refreshing on scope errors
Fixed email notification defaults to use the local timezone instead of UTC
Fixed a bug where deleting a chat made links unclickable on the page
Fixed weekly insights emails sending duplicates with missing insights
Improved performance across the platform and dashboard pages
Here are this week's highlights:
Extra Usage
Ask AI Gets Smarter
Top Channels
Click IDs for Paid Attribution
Install-Time Mobile Attribution
Improvements and Fixes
Extra Usage
Workspaces with a payment methodcan now go above their plan's MAU limit without missing any data.

This means growing projects no longer lose data during a spike, and teams don't need to keep upgrading mid-cycle to keep tracking users.
Overages are billed as a one-time charge at the end of the cycle, and you can set a monthly spend cap so there are no surprises.
Ask AI Gets Smarter
A big batch of Ask AI improvements landed this week.

Here is a summary:
Ask AI can now answer product, SDK, and API questions by searching and citing the exact doc pages it used, instead of bouncing you to the docs.
The system prompt was updated with the latest SQL functions and variables introduced last week.
Chart proposals now enforce per-chart date ranges and tighter SQL validation.
Raw aggregate states are no longer leaked into answers.
You can save individual charts from an Ask AI dashboard to an existing board, instead of saving the whole dashboard.
New guardrails keep Ask AI focused on analytics questions it can actually answer well.
Top Channels
You can now see a Channels chart alongside Referrers and UTM.

Referrers, UTMs, and other properties are grouped into marketing channels like Organic Social, Paid Search, Direct, Referral, and Email, so you can see traffic composition by channel without having to bucket domains yourself.
Click IDs for Paid Attribution
The Web SDK now captures and persists click ID parameters from landing page URLs alongside UTMs, so paid traffic from Google, Meta, TikTok, LinkedIn, Reddit, and X is attributed correctly to the campaigns that drove it.
Twelve vendor parameters are supported including gclid, gad_source, gbraid, wbraid, dclid, fbclid, msclkid, yclid, ttclid, twclid, li_fat_id, and rdt_cid.
Install-Time Mobile Attribution
The React Native SDK now automatically captures install-time attribution from:
Google Play Install Referrer API on Android
Apple AdServices on iOS
This means you can see incoming traffic source fields (utm_source, utm_medium, utm_campaign, and friends) to your mobile app.
Deep link attribution still takes precedence, and the merge logic only fills empty fields, so real deep links never get overwritten by install referrer data.
Improvements and Fixes
Added more breakdown dimensions for charts and funnels
Added vertical resizing to the SQL Query Editor
Added per-request nonce-based Content Security Policy for tighter frontend security
Added the ability to remove saved payment methods on the free plan
Fixed double-counting of protocol-issued token values in wallet events
Fixed stale Tinybird tokens after pipe renames by auto-refreshing on scope errors
Fixed email notification defaults to use the local timezone instead of UTC
Fixed a bug where deleting a chat made links unclickable on the page
Fixed weekly insights emails sending duplicates with missing insights
Improved performance across the platform and dashboard pages
Load more
Turn data into action
Measure what matters and make impactful decisions with Formo.
Turn data into action
Measure what matters and make impactful decisions with Formo.
Turn data into action
Measure what matters and make impactful decisions with Formo.
Compare
Ask AI about Formo
Compare
Ask AI about Formo