Legacy CRM cards will be sunset on Oct 31, 2026. This means if your app currently contains a legacy CRM card, it must be migrated to an app card before the sunset date to avoid interruptions for your end users. App cards built with React can do everything legacy CRM cards can do, but offer more advanced customization options. This guide walks you through how to build a replacement app card and swap your legacy CRM card for an app card in user accounts. Once your card is migrated, your users will not need to take action to adopt the replacement app card.Documentation Index
Fetch the complete documentation index at: https://developers.hubspot.com/docs/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
- Ensure you’ve installed the latest version of the HubSpot CLI.
- Ensure your app is on the projects framework, using version
2025.2or newer. Learn how to migrate a public app to the projects framework. - It’s recommended to create a configurable test account so that you can build and test in an isolated environment.
Create an app card to replace the legacy CRM card
To start the migration process, create an app card that will replace your legacy card. When creating your replacement app card, you can either:- Start from scratch: create a new app card. Choose this option if you want to use new functionality and design elements to redesign your card.
- Use HubSpot’s converter app card as an example: use the Legacy CRM Card Converter GitHub sample code to create an app card based on the design and functionality of a legacy CRM card. Choose this option if you want to quickly add a replacement that works and looks as close as possible to your legacy CRM card.
Redesign by creating a new app card
To start from scratch, follow the instructions to create a new app card. React-based app cards can include more design elements than your existing legacy card, such as images, forms, and tables. With more UI components and data fetching capabilities, app cards give you the opportunity to design dynamic experiences embedded within HubSpot to meet your users where they work. Use the Figma design kit to plan your designs, or refer to the components reference to get started. During beta testing, you can enable the app card for a subset of your users by using feature flags. Once your new app card is ready, you can add it to the app with the legacy CRM card to begin the migration process.Convert a legacy CRM card into an app card
If you want to quickly convert your legacy CRM card to an app card, refer to the Legacy CRM Card Converter GitHub sample for guidance. This sample provides an app card that works like a legacy CRM card to help you test and develop a new app card before migrating. The converter fetches data from an API endpoint to display tiles, expandable content, and action buttons that work almost identically to your legacy CRM card. Refer to the README.md for instructions and more details, including the differences between the legacy CRM card and the converter app card. Once your new app card is ready, you can add it to the app with the legacy CRM card to begin the migration process. If you want to redesign the card later, you can update the app card design as needed.Add the app card to the app with the legacy CRM card
Once you’ve set up the replacement app card, add it to the project with the legacy CRM card.- Copy the contents of the
cardsfolder of the development project. - Paste the card content in the
cardsfolder of the app with the legacy CRM card. - Upload the project (
hs project upload). Theuidof the replacement card will be shown as processing during build and deploy. - Verify the app card displays in installs with scopes by adding it to views.
Swap the legacy CRM card for the app card in user accounts
Once the new app card is included in your app, you can swap it with the legacy CRM card so the new card appears for your users. Once swapped, the legacy CRM card will be replaced by the app card in all user views. Once the swap is complete, the legacy CRM card will be hidden and users will not be able to add it to views. To use the migrate views API endpoint to swap the cards:- Copy the values for the following fields:
appId,appCardId,legacyCrmCardId, and if your legacy CRM card supports tickets,helpdeskAppCardId. Retrieve cards to get the legacy card ID and view projects in HubSpot to get the app, app card, and help desk app card IDs.


- Make the following call to the migration endpoint (
/crm/v3/extensions/cards-dev/{appId}/views/migrate).
appCardId is already associated with another legacy CRM card migration. This prevents multiple legacy CRM cards from being migrated into a single app card. To consolidate multiple legacy CRM cards into a single app card, set allowDuplicateAppCardIds in the request body to true.
- The migration process will begin and the API will return a message summarizing the progress. View updates are processed asynchronously. You can safely call the endpoint again with the same request body to check progress. Retrying the endpoint will not duplicate work or cause adverse effects.
- Once the migration is complete, the following message will be returned.
Delete unused legacy CRM cards
It is safe to delete a legacy CRM card once the migration is complete. This process will have no impact on end users and they’ll automatically have access to the new app card. If not deleted, the legacy CRM card will continue to exist in the backend until it is automatically deleted after the deprecation of legacy CRM cards on Oct 31, 2026. To delete a swapped legacy CRM card, make aDELETE request to /crm/v3/extensions/cards-dev/{appId}/{cardId}?hapikey={developerApiKey}. Include the appId and cardId values of the legacy CRM card.
Once the legacy CRM is deleted, there will no longer be warnings about the legacy CRM card existing in your app.