Choose the likely migration command path.
hs app migrate vs hs project migrate
Use app structure and platform version to decide which path to verify. Non-project legacy public app, existing project app, and private app cases should not be collapsed into one generic migration step.
Last source check: 2026-05-24
Independent educational guide. Not affiliated with, endorsed by, or sponsored by HubSpot. Verify critical commands and platform behavior against official HubSpot documentation before deploying.
Decision rule
Do not choose between `hs app migrate` and `hs project migrate` from memory. Start by inspecting the app: does the repo have `hsproject.json`, what `platformVersion` is recorded, and is the app public, Marketplace-oriented, project-based, or private?
If there is no `hsproject.json` and the app is an existing legacy public app, review the public app migration path and `hs app migrate` guidance. That case is different from creating a brand-new app with `hs project create`.
If the app is already project-based, review platform-version guidance and `hs project migrate` where applicable. If the app is private, review private app documentation and latest-platform limitations before assuming automation.
What to inspect before running either command
Inspect the repository root for `hsproject.json`, then record `platformVersion`. Also find the app configuration files, including `app-hsmeta.json` where relevant, and list any serverless functions, app cards, OAuth settings, webhooks, scopes, and Marketplace listing dependencies.
For an existing public app, check active installs and test-install implications before migration. For a project app, understand whether the work is a platform-version update or a broader feature migration. For a private app, capture backend and token implications because the public-app migration decision tree does not automatically apply.
Write down the command as a path to verify, not a command to run immediately. The final pre-run step should be opening the relevant official HubSpot docs and confirming they still match the local source archive.
Common wrong turns
Wrong turn 1: using `hs project create` for an existing app modernization project. That command belongs to new Projects-based app creation, while migration paths require a separate review.
Wrong turn 2: treating every older project app as a non-project legacy public app. If `hsproject.json` exists, inspect platform-version guidance before selecting a migration path.
Wrong turn 3: promising automatic private app migration. Private app cases have documented limitations and may need manual planning or a net-new app approach depending on features.
Checklist
- Find `hsproject.json`.
- Record `platformVersion`.
- Document app distribution.
- Open the official migration docs before running a command.
Get the full Projects CLI Skill Pack
Includes the agent skill, command cheatsheet, checklist, CSV tracker, handoff template, and official source map.
Independent educational product. Gumroad checkout opens here after real product URLs are configured.