Requirements for UI Extensions / custom App Cards (for Hubspot Pro)

Hi HubSpot Support,

We’re evaluating whether we can build a custom App Card (UI Extension) using the React-based Developer Platform — specifically using the Table standard component from @hubspot/ui-extensions — to display an editable grid of custom Deal properties directly on the Deal record.

Our account is currently on Sales Hub Professional (not Enterprise). Could you confirm:

  1. Can a custom UI Extension / App Card built via the Developer Platform (using hs project create / hs project upload) be deployed to and used on a production Sales Hub Professional portal, or does displaying it on live Deal records require Sales or Service Hub Enterprise?
  2. If Enterprise is required, is that requirement tied to the portal the extension is deployed to, or to the developer account used to build/test it?
  3. Are there any limitations on Professional (e.g., number of installed private apps, number of custom cards per record, API call limits) that would affect a single custom App Card showing ~15–20 rows of data with 6 editable fields per row?
  4. Is there a minimum required scope or seat type (e.g., Super Admin) needed to install and maintain this once built?

For context: we’re trying to determine whether to build a custom grid-style card, or fall back to a simpler native property-list layout, so a clear yes/no on tier requirements would help us scope this correctly before committing developer time.

Thank you! Tom

Welcome @TSamuelson to the community!

You can you build something like this for HubSpot Sales Hub Pro.

Hey Tom, great questions. short answer is: yes, you can run a React-based app card on a production Sales Hub Professional portal, but there is one limitation you might want to be aware of:

The app card and HubSpot’s Table component do not require Enterprise. Enterprise becomes relevant if the app relies on HubSpot-hosted serverless functions. If you want to remain compatible with Professional, you can use an external backend through hubspot.fetch() or other supported CRM components.

That requirement is tied to the portal where the app is installed–not the developer account used to build it. You can build and test in a developer test account without Enterprise, but the production portal’s subscription determines which features the installed app can use.

For Deals, you’ll generally need:

  • crm.objects.deals.read to display Deal data.
  • crm.objects.deals.write if your backend will save property changes.

Both scopes are available on Professional. The installer can be a Super Admin, but that isn’t the only option: a user with HubSpot Marketplace access and the necessary scope permissions can also install the app. Placing the card on the Deal layout requires Super Admin or Customize record page layout permission.

Your proposed size–15-20 rows with six editable columns–isn’t a concern from a UI or API-limit perspective. I’d just avoid saving on every keystroke: save on commit, by row, or batch the changed values where possible.

One thing I’d clarify before building is what each row represents. CrmPropertyList won’t solve the multi-row use case–it displays properties from one Deal or one explicitly identified record. If each row represents a separate Deal, line item, associated CRM record, or external record, each row should carry its own record ID and be persisted independently.

CrmAssociationTable can display associated CRM records, but it doesn’t provide the editable-grid workflow you’re describing. For that, you’ll need to compose inputs inside HubSpot’s standard Table yourself or use a higher-level component.

Full disclosure: I maintain an open-source library called hs-uix, and this is exactly the kind of problem its DataTable is intended to help with. It’s built entirely from native @hubspot/ui-extensions components and already handles inline or full-row editing, validation, multiple input types, sorting, filtering, and pagination:

npm install hs-uix
import { DataTable } from "hs-uix/datatable";

You’d still own the actual persistence in onRowEdit–hs-uix handles the table and editing experience, while your app decides how each change is saved.

So my recommendation would be: the custom grid is completely viable on Sales Hub Professional. Just avoid HubSpot-hosted serverless functions if Professional compatibility is a requirement, and make sure the underlying row model is clear before building the interface.

Hope that helps and would be happy to provide you with a clearer example if you wanted to go the HS-UIX route.

Thank you!!

Thank you so much for your help.