Hi everyone,
We’re migrating a legacy HubSpot public app from legacy CRM cards to UI Extensions (app cards / developer projects), and we’re stuck on what feels like a circular dependency. Would appreciate any guidance from others who’ve been through this.
Our setup
We have three related apps:
-
Labra QA (legacy) — App ID
1071826- Internal QA app
- Still on legacy CRM cards
- ~12 installs (all internal test accounts)
-
Labra Production (legacy)
- Customer-facing app
- Legacy CRM cards
- 65+ active customer installs
-
Labra App Card (new)
- Separate developer project under a different app ID
- Built with UI Extensions / app cards
- Not yet rolled out to existing customers
The blocker
When we run the migrate command on the legacy QA app (1071826), we get an installation limit error and migration stops.
From the docs we’ve read, migrating a public app with multiple installs may require Marketplace listing — but Marketplace review feedback says:
- Legacy CRM cards are not allowed for listed apps
- We must migrate to app extensions first
- Listing must map to one app ID only (the app customers actually install)
So we’re in a loop:
Can’t migrate because of install limit error
Can’t list legacy app until it uses app cards
Can’t use a new app ID for listing and switch later
Can’t uninstall 65+ production customer installs to bypass the limit
What we’re trying to figure out
- What is the correct migration path for a legacy public app with many existing installs?
- Can migration be enabled without Marketplace listing?
- Should we migrate in place on the same app ID instead of keeping a separate app card project?
- How do others handle customer continuity during this transition?
What we’ve already tried
- Built app cards in a separate developer project (new app ID)
- Attempted
hs project migrate(or equivalent migrate flow) on legacy QA app → installation limit error - Reviewed “Migrate a public app to the developer projects framework” docs
- Received Marketplace feedback that listing must match the actual installed app
If anyone from HubSpot or the community has solved this for a production app with existing installs, we’d really appreciate pointers, docs, or the right team to contact.
Thanks in advance!
— Durvankur, Labra