← SkillSafe
HubSpot Submit

For SaaS vendors listing an app on the HubSpot Marketplace

HubSpot SubmitWill HubSpot let your app list - and which gate stops it first?

Paste your HubSpot app's project config, its Shared data table and your pilot installs, and get eligibility, distribution and auth, scope use, the install gate and platform-version deadlines checked against HubSpot Marketplace rules, then the listing plan or the fixes for a listing sent back to Draft. Your browser reads the config and flags a static token or private distribution, scopes with no Shared data row, read plus write listed one way, fewer than 3 active installs†, a legacy public app past 25 installs†, classic CRM cards, "Hub" in the name and AI acting on CRM data without user-level permissions, re-ranks the pilot menu and lays out the timeline backward from your launch.

Try a sample:

The app, its scopes and its pilots free

Read with JSON.parse; a paste that does not parse is named by its line and column. The fields can sit under config (projects) or at the top (public-app.json): name, distribution, auth.type, requiredScopes, optionalScopes, conditionallyRequiredScopes, redirectUrls, isUserLevel.

Kinds: app card, classic CRM card, workflow action, agent tool, MCP server, webhook, browser extension.

Directions: HubSpot to app, app to HubSpot, or both (bi-directional, two-way).

A scope with no note is flagged: HubSpot checks your API logs.

Kinds: customer, design partner, agency client, test, staff. Only unaffiliated customers, design partners and agency clients with a call in the last 30 days† count.

The interview - each answer moves a check, the menu or the timeline free

What it does in HubSpot
Who the product is for (none ticked = none of these)
The product also

The checks free

What the page flags

The app config as read

The scopes, object by object

The Shared data table against the scopes

The pilot portals and the install gate

Every check, rule by rule

The pilot menu, re-ranked

The timeline, backward from launch

The deadlines

Your stage, the feedback and the packet

The fixed config, the fixed Shared data table and the exports free

The fixed app config

Your config written back from what JSON.parse read, with distribution set to "marketplace". It never adds a scope, a URL or an id: after a plan runs, the plan's own download also sets auth.type to "oauth" when the plan's fix for auth_oauth says so, removes the scopes the plan drops and moves the ones it marks optional.

    
        

    The fixed Shared data table

    One row per scoped object, with the direction read and write give; a row with no scope behind it is kept and named.

      
          

      The listing plan

      Pricing as soon as the session is ready...

      NOT RUN YET

      The page's check of this reply

        Saved apps

        How it works - and what is sourced

        The checks follow the skill's rules the review enforces, its eligibility screen, its pilot menu, its submission, review and timeline sections, keeping the listing and certification, plus the skill's submission packet and its dated deadlines. The config is read with JSON.parse; a paste that does not parse is named by its line and column. Each scope of the form crm.objects.<object>.read or .write maps to its object; every other scope stays "other" and no object is guessed from it. Read alone is HubSpot to app, write alone is app to HubSpot, and read plus write advertises a bi-directional sync, so the Shared data row must say both.

        The install gate counts a pilot portal only when it is unaffiliated, a customer, a design partner or an agency client, with a successful call in the last 30 days† by this browser's date; own, test and staff portals never count, and two design partners never reach the gate. The pilot menu starts with existing customers this week; a launch inside two months starts design partners in parallel. The timeline counts backward from the launch with one Draft bounce; a goal the gates make impossible by then - certification before 6 months† listed, or a listing before two reviews can land - is named first with its realistic date. A saved app keeps a snapshot of its checks, so reopening it shows what changed since you saved it; mark it resubmitted and the next fixes run carries the previous round's fixes with the plan.

        Two labels, kept apart. HubSpot figures carry a dagger: 3 active installs†; 25 installs† before listing; private caps of 10 installs† and 100 installs†; 6 months† listed, 60 active installs† and API success above 95%† for certification, with a demo of at least 3 minutes† and 100 requests per 10 seconds†; reviews within 10 business days† and a feedback loop of no more than 60 days†; 90 days† and 180 days† to keep the listing; one year† of support after leaving; two replies† per negative review; stars from 10 reviews†; recertification every two years†; versions unsupported after 18 months†; platform 2026.09† for isUserLevel; 2025.2† or later for new listings; the dates October 31, 2026†, November 2, 2026†, June 2026†, March 2027† and September 2027†. Practitioner claims say so: the install counter lags by days (reported), and silent weeks after resubmitting are reported.

        † verify against current HubSpot developer docs and changelog. "reported" = practitioner reports, not HubSpot policy.