# HubSpot Submit > Get an app onto the HubSpot Marketplace. 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. > Built on the SkillSafe skill @samber/hubspot-marketplace-playbook, from samber/developer-platform-skills (MIT), by > Samuel Berthe. > Not affiliated with or endorsed by HubSpot. > Scope: a B2B SaaS vendor listing its own app on the HubSpot Marketplace and keeping it there - the install gate, the cap > on unlisted apps, the apps HubSpot refuses, scopes and the Shared data table, Draft bounces, review timelines, version > deadlines, AI connector and MCP rules, App Certification. Not listing copy or install conversion, not running your own > marketplace, not CMS themes, not admins vetting another vendor's app, not CRM admin, API code or agency work. https://hubspot-submit.skillsafe.ai/ ## What is free - Parsing: the app config (app-hsmeta.json from a projects build, or a flat public-app.json) read with JSON.parse; a paste that does not parse is named by its line and column. Read: uid, type, name, distribution, auth.type, auth.redirectUrls (counted, never copied), requiredScopes, optionalScopes, conditionallyRequiredScopes, permittedUrls, support, isUserLevel, and platformVersion from hsproject.json or the config. - The scope table: each scope with required, optional or conditionally required; crm.objects..read or .write (and their sensitive forms) and crm.lists.read or .write map to their object and access; every other scope stays "other" and no object is guessed. Each scope's Shared data row, the direction read and write give (read alone: HubSpot to app; write alone: app to HubSpot; read plus write: both, a bi-directional sync) and the feature note that uses it. - The Shared data table (object | direction, one row per line; HubSpot to app, app to HubSpot, both, bi-directional, two-way and arrows are read) held against the scopes both ways: a scoped object with no row fails, a row with no scope warns, a direction that contradicts read and write fails. - The install gate from the pilot rows (portal | affiliated? | last successful call | kind): a portal counts only when it is unaffiliated, a customer, a design partner or an agency client, with a successful call in the last 30 days† by the browser's date; test and staff portals never count. - The checks, each with an id, the skill's rule and pass, fix, fail, note or n/a: elig_brokering, elig_devinfra, elig_embedded, elig_emails, elig_linkedin, elig_prospects, elig_restricted, elig_second_app (a fail refuses to plan a listing), extra_review and browser_extension (eligibility); distribution_marketplace, auth_oauth, private_caps and unlisted_cap; legacy_app, legacy_migration, classic_cards, platform_version and platform_migrate (the developer platform); scope_shared_missing, shared_unscoped, scope_direction, scope_unused, scope_other and scope_sensitive; name_hubspot and name_casing; ai_user_level, mcp_server and component_reviews; install_gate; crawler, setup_guide, install_returnurl, demo_video, super_admin, one_in_review and review_incentives (the submission); listing_floor; cert_months, cert_installs, cert_api, cert_domain, cert_security, cert_uninstall, cert_video and cert_extension (certification); timeline_fit. - The pilot menu: existing customers already on HubSpot > design partners for one real workflow > a Solutions Partner installing in its clients' portals; a launch inside two months starts design partners in parallel, naming the answer that moved it. - The timeline backward from the launch with one Draft bounce, the goals the gates make impossible named first with their realistic date (certification before 6 months† listed; a listing before two reviews can land); the reference's dated deadlines, each marked as applying to this app or not; the submission packet with an owner role per item; the Draft feedback read for its outcome (back to Draft, or rejected for a missed minimum requirement) and its numbered points. - Exports: the scope table (.csv: scope, required/optional/conditional, object, access, shared-data row, direction, feature), the checks (.csv), everything (.json), a fixed app config (app-hsmeta.fixed.json: distribution set to marketplace; auth.type set to oauth, the plan's dropped scopes removed and its optional scopes moved only when a plan says so - never a scope, a URL or an id the page did not read) and a fixed Shared data table (one row per scoped object with its derived direction). - Saved apps keep a compact snapshot of the checks: reopening one, or pasting an app of the same name, shows what changed since it was saved. "Mark as resubmitted" logs the date and how the app went back; the next fixes run then carries the previous round's fixes with the plan. - Two labels, kept distinct. HubSpot figures carry a dagger: 3 active installs†, the last 30 days†, 25 installs† before listing, private caps of 10 installs† and 100 installs†, 6 months† listed, 60 active installs†, API success above 95%†, 100 requests per 10 seconds†, a demo of at least 3 minutes†, 10 business days†, 60 days†, 90 days†, 180 days†, one year†, two replies†, 10 reviews†, two years†, 18 months†, 800x800 px†, platform 2026.09†, 2025.2† or later, October 31, 2026†, November 2, 2026†, June 2026†, March 2027†, September 2027†. Practitioner claims say "reported": the install counter lags by days (reported); silent weeks after resubmitting are reported. - † verify against current HubSpot developer docs and changelog. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (plan or fixes), `app`, `config` (the config as read, with the scope table and the components), `shared` (the Shared data table as read), `pilots` (the pilot rows with whether each counts), `feedback` (fixes only: the Draft feedback or the review email), `carry` (fixes only: the plan's eligibility, fixes, scope changes and packet, plus the previous round's fixes once a resubmission is logged), `facts` and an optional `retry_note`. - `plan` replies with `summary`, `eligibility` (`verdict` eligible, not_yet or refused, `why`), `scopes` (`scope`, `object`, `feature`, `action` keep, optional or drop), `shared_data` (`object`, `direction`), `pilot` (`rung` existing_customers, design_partners or solutions_partner, `action`), `fixes` (`check`, `change`), `packet` (`item`, `owner` a role, `done`), `timeline` (`step`, `wait`), `deadlines` (`what`, `date`), `footnote` and `caveats`. - `fixes` replies with `summary`, `outcome` (draft or rejected), `points` (`n`, `feedback`, `fix`, `check`), `resubmit` (`when`, `wait`), `reply` (each point on its own line), `footnote` and `caveats`. A reply stays on the page when the form changes after it ran, under an out-of-date banner, and its downloads and copies keep working; each plan fix and each point copies on its own, and the fixes export a resubmission checklist (.md). The page holds every reply to its own facts: the plan keeps the page's eligibility verdict, carries every page scope exactly once with the page's object, one Shared data row per scoped object with the direction read and write give, the pilot rungs in the page's order, a fix for every fail check, packet owners by role and deadline dates only from the page's list; the fixes keep the outcome the text shows, answer at least as many points as the text numbers (counted on their own lines or inline), resubmit once after one pass with the scopes and the setup guide frozen, wait another 10 business days† and chase by replying to the review email, and answer the reviewer one point per line, never arguing and never asking to expedite; both carry the dagger on every HubSpot figure and "reported" beside every practitioner claim, the footnote, HubSpot with a capital S, no URL, no backticks and no implied HubSpot endorsement. ## Links - API tutorial: https://hubspot-submit.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@samber/hubspot-marketplace-playbook - Source repository: https://github.com/samber/developer-platform-skills