Changelog

Changelog

We ship new features, fixes, and improvements to Formo every week

Privy Wallet Clustering, Filter by Data Source, and Form Allowlists

Here are this week's highlights:

  • Privy Wallet Clustering

  • Filter by Data Source

  • Allowlists for Token-Gated Forms

  • Revenue and Volume by Ad Platform

  • Improved API, MCP, CLI Coverage

  • Historical Wallet Profiles API

  • Delete Profile Properties and Labels API

  • Improvements and Fixes

Privy Wallet Clustering

The latest Web SDK now automatically links Privy linked wallets in one call: pass the Privy user object and the SDK identifies every linked wallet and groups them into a wallet cluster.

const { user } = usePrivy();
formo.identify(user);

For apps using Privy embedded wallets, identify(user) reads every wallet linked to the Privy account and tags each one with the same DID, so they cluster into a single user. The primary wallet the user is active on is used for attribution.

Are you using Privy? Upgrade to the latest SDK or learn more about the Privy integration.

Filter by Data Source

The dashboard now supports a Data source filter, available on the Overview, Activity, and Users pages. You can now better understand cross-platform data from web to mobile on a single view.

Use the data source filter to segment your key metrics and KPIS by where the data actually came in, such as web, mobile, or onchain. The filter makes it easy to compare KPIs between web and mobile platforms or separate onchain and server-side events from web traffic.

Allowlists for Token-Gated Forms

You can now restrict a form to a list of wallet addresses you upload as a CSV. Useful for private alphas or any form where the target audience is an allowlist you already hold. Available for both EVM and Solana.

Your list never leaves your device. Your browser turns the CSV into a bloom filter, a compact bit array that answers "is this address on the list?" without containing the addresses.

Get started with allowlists.

Revenue and Volume by Ad Platform

Revenue and Volume are now available in the Ads chart, so you can see which campaigns produce revenue rather than clicks. Both Revenue and Volume are attributed per event, classified at ingest from the click ID or a paid utm_medium.

Grouping by ad platform is also live on the API: pass metric_column=paid_source to revenue by metric and volume by metric, which return paid rows only, or group_by=paid_source to revenue overview.

See ad attribution to learn more.

Improved API, MCP, CLI Coverage

Most of what you can do in the dashboard, you can now do from the API, the MCP server, and the CLI. Every dashboard action reachable by a coding agent means Formo is agent-ready: point Claude or Cursor at the MCP server and it can query your analytics, manage boards and alerts, and manage wallet profiles for you.

  • MCP: 8 new tools, including execute_saved_chart, reorder_charts, and the profile write tools for updating properties, upserting and deleting labels, and importing wallets.

  • API: 4 chart routes (reorder, move, duplicate, and saved-query execution) are now in the reference with their required permissions.

  • CLI: @formo/cli 1.3.0 supports the latest additions and changes

Browse the MCP tools and the API reference to learn more.

Historical Wallet Profiles API

Historical wallet data is now available on the API and the CLI, in addition to the wallet profile page.

Pass a timestamp to a profile read and Formo returns the stored enrichment snapshot closest to that instant, so you can reconstruct net worth, holdings, and app positions as they stood before a campaign, an airdrop, or a churn event.

formo profiles get vitalik.eth --timestamp 2026-06-21T10

See the Profiles API and CLI docs for reference.

Delete Profile Properties and Labels API

Profile properties can now be deleted through the API. Send null as a property value to unset it, in the same call where you set others. Every key you do not mention is left untouched:

curl -X PUT https://api.formo.so/v0/profiles/vitalik.eth/properties \
  -H "Authorization: Bearer <your_workspace_api_key>" \
  -d '{ "display_name": "alice.eth", "email": null }'

A deleted property reads as null everywhere: profile reads, the Users table, search, and filters such as notEmpty.

Labels gain a dedicated delete endpoint and MCP tool, which remove a label outright rather than marking it deleted at a past timestamp with _is_deleted.

See update properties and delete label.

Improvements and Fixes

  • Added an SDK Write Key field with a copy button between the install guidance and the code snippets, so you no longer have to hunt for it inside the snippet. See the install guide.

  • Updated the Web SDK (1.35.0) to flush the first event of a page load immediately, so short visits like ad-click landings in mobile in-app browsers are captured for more accurate ad attribution.

  • Fixed the reCAPTCHA delay on form submit: the button now enables as soon as the widget returns a token, and the token is verified server-side at submission instead of in the browser.

  • Fixed Solana token gates and identity fields accepting unverified addresses. Signatures are now checked server-side against the claimed address, bound to the form, with an expiry and a domain allowlist. See Solana gating.

  • Fixed the SQL Explorer crashing on a failing query, with better error messages.

  • Fixed charts hitting "Maximum update depth exceeded" on re-render.

  • Fixed the SQL Explorer tables schema showing outdated and improperly formatted descriptions.

  • Fixed the React Native SDK crash reporter severing the handler chain.

  • Fixed React Native screen names containing ? or # silently dropping part of the screen URL.

  • Fixed Deep Link Opened silently not firing in the React Native SDK when deep link attribution was turned off. The event now follows its own autocapture setting.

  • Platform security and performance improvements.

  • Minor UX and UI improvements.

Share this on

Crypto analytics that drive growth

Formo helps you define, measure, and drive impact onchain in less time.