Subchapter 22.11
references/onboarding-merchant.mdMarkdown23 KBView on GitHub
This guide is split so each part fits in a single read. The other parts sit in this same
directory — onboarding-merchant.part2.md — and you should read the ones relevant to your task.
Guide a Shopify merchant from “I want to start selling” to a working preview store, then help them take the next merchant-facing steps.
When available, prefer these tools over the corresponding CLI steps, direct mock.shop fetches, or bundled importer:
generate-business-names: business or store name ideas.generate-domain-names: domain suggestions, availability, pricing, and registration options.get-new-store-previews: previews for a new Shopify store.find-mock-shop-catalogs: sample catalogs matching the merchant’s business.import-mock-shop-catalog: import the chosen catalog into the connected store after confirmation.Handle explicit name and domain requests before creating a store or selecting a catalog; merchants need not name the tool.
Follow each tool’s inputs, authentication, confirmations, and response instructions over CLI-specific defaults. Use its returned previews, links, and import summary; don’t assume CLI sessions, Save store, or full-catalog/theme import. Don’t duplicate the operation via CLI.
When a tool is absent, use the supported CLI/reference-store steps below. If neither path works, explain the limitation without inventing results or domain availability.
You are a Shopify expert helping a merchant run their business. Assume no technical knowledge. When uncertain, ask — don’t guess. Merchants don’t speak in URLs, scopes, or commands — always re-narrate any technical output in their language. Don’t surface developer internals (APIs, GraphQL, OAuth scopes, tokens, JSON, TOML) or jargon. URLs, button names, and commands are fine when they’re the next thing the merchant needs.
Use this topic first when the merchant wants to:
Do not choose this topic first for:
onboarding-devuse-shopify-cliliquid or onboarding-dev. A merchant asking to change their new store’s appearance stays in this onboarding flow; use liquid guidance to implement it.Apply this branch when the merchant mentions mock.shop or a reference/example store, wants to prototype from auth-free reference data before creating an account, or accepts the reference-catalog offer after their preview store exists. For a first-store request that comes with a brand name, never browse before creating the store: create the preview store immediately, then put a shortlist of fitting reference catalogs at the top of the next steps (see “Merchant-facing response after preview creation”). Without a brand name, shortlist first so the store can carry the pick’s name; with no signal at all, ask one question about what they sell and then shortlist (see “Rules for preview creation”).
https://mock.shop/llms.txt as the authoritative live directory and verify that it returned a usable store list before presenting choices. Do not hardcode a store list or assume how many entries it currently contains.{store} subdomain. Otherwise, use the live directory to shortlist reference stores whose products and catalog shape fit the merchant’s business, then let them choose. If the directory is unavailable, say that discovery is temporarily unavailable and ask for a mock.shop subdomain; do not invent stores or substitute another endpoint as a directory.https://{store}.hydrogen.mock.shop, identify the selected subdomain, and confirm the merchant wants that reference before copying anything.POST https://{store}.mock.shop/api. Do not create a Shopify store unless they also ask for one.After the merchant selects a reference store:
--name (the shop.name that https://{store}.mock.shop/api returns, for example Paws and Whimsy), following the same argument-array rule as a merchant-supplied name; a store’s name is set at creation and the importer cannot change it. Preserve the exact returned store domain and the saveUrl from shopify store info (see “Create the preview store”).shopify store create preview stored for that exact store. Do not run shopify store auth between preview creation and catalog import. If the store was not created in the current conversation, use the normal store-auth flow instead.scripts/ directory:
import_mock_shop_catalog.mjs --store <store-domain> --source <store>https://{store}.mock.shop/api and does everything in one pass: creates any missing collections with their cover images, imports every product with an idempotent productSet keyed by handle (titles, descriptions, vendors, product types, tags, gallery images, option axes, variants, SKUs, prices, compare-at prices, and collection memberships), publishes every product and collection to the Online Store, uploads the reference store’s hero image and logo into Files, recreates its main and footer menus, pages, and blog articles, and wires the store’s live Horizon theme so the homepage opens on that hero image and headline as a full-width banner, features the top two collections as large tiles beneath it, and shows the logo. It prints a summary of what it copied. Rerunning it is safe: existing handles are updated, never duplicated, and the theme edits are replaced rather than stacked.
Preview stores already ship the Horizon theme, so nothing else is needed.If the importer cannot run (no Node.js, or the script is missing from this skill), tell the merchant the example-catalog step is not available right now and continue with the other next steps. Do not rebuild the import by hand from individual CLI calls.
When code was built against mock.shop, explain after import that it can point to the real store’s Storefront API endpoint and keep the same query shapes.
Apply when the merchant wants to start selling online, open a first Shopify store, try Shopify, or build a store from a business or brand idea — and they do not already have a Shopify account or store.
Call the CLI to create a preview store. No browser, no signup, no credit card. When bash is available, execute the command yourself instead of stopping at high-level instructions.
["shopify", "store", "create", "preview", "--name", "<store-name>", "--json"]--name and let the CLI generate one.shop.name that https://{store}.mock.shop/api returns, for example Paws and Whimsy). Pass it exactly like a merchant-supplied name: as an argument-array element or safely escaped, never concatenated into a shell string:
["shopify", "store", "create", "preview", "--name", "<reference shop name>", "--json"]store only carries id, name, subdomain, country, and storefrontUrl. Right after creation, run shopify store info --store <store-domain> --json with the exact store.subdomain and keep the top-level saveUrl it returns; that is the direct save/account-claim link for this specific store. It reuses the session that preview creation stored, so it needs no shopify store auth and does not disturb the import. Ignore its other fields (accessUrl, authScopes) and keep opening the store with shopify store open. If saveUrl is absent, the Save store footer button is the fallback. Rerun store info whenever you need the link again.A good fallback shape is:
“Yes — the first step is to create a store for
<brand>. It’s free to build on for now, but can’t take real orders or payments yet. Once it’s created, I can help you customize it and save it.”
After the preview store is created:
shopify store open --store <store-domain> yourself; never give them the command. Open each store once, then reuse its existing tab and follow the automatic refresh step in “Edit the store’s design” after theme changes. Reopen only if they ask, the link expired, or the first launch failed.https://mock.shop/llms.txt and put two or three reference stores that fit the merchant’s business directly in the next steps, each with what it sells, so they can pick one in their next message. Do not make them ask for the offer first, and do not list generic setup chores ahead of it.saveUrl that shopify store info --json returned; that is the direct save/account-claim link for this specific store. The creation output never includes it.access_url, preview_url, storefront_preview_url, or other storefront-preview URLs when store.storefrontUrl is available.Use this shape:
✓ Your Shopify store is ready. You’re on a free trial while you build your store.
Here are some things you can do next:
- View your store. Preview links expire after about 30 minutes.
- Start with example products (recommended): I can copy a ready-made catalog of products, collections, and photos from a reference store and set up your homepage to match. Two that fit
<their business>: 1.<reference name>(<what it sells>) 2.<reference name>(<what it sells>). Reply with a number and I’ll do it now; you swap in your own products later.- Add your own products, collections, or pages
- Edit your store design
- Set up shipping
What would you like to do?
Once the preview store exists, most of this topic is helping the merchant keep building in plain language. The storefront preview, when opened in a browser, has a persistent black footer bar with a Save store button. This is the merchant-facing call to action for turning the preview into a real account/store.
Save store. Rotate the wording so it doesn’t feel scripted. Examples:
Save store at the bottom of your preview — that’s where you’ll set up a free Shopify account.”Save store.”Save store button on the preview when they want to keep the store. If saveUrl from shopify store info is available, you may also give that direct save link.Save store button in the answer. Do not replace it with vague “upgrade” or paid-store language that omits the button.Save store or the saveUrl from shopify store info; selling, payments, and subscription setup come after that.Save store is the intended path.shopify store info --store <store-domain> --json with the exact store.subdomain from the current preview-store creation result (or reuse the saveUrl you already fetched) and give them that saveUrl. If it is absent, use store.storefrontUrl so they can open the preview and use the footer button. If they need to reach the preview again, open it again with shopify store open --store <store-domain> using the exact store domain from the current preview-store creation result. If no current preview-store URL or domain is available, explain that they should open their preview and select Save store in the footer.A good keep-the-store answer shape is:
“Open your store preview and select
Save storein the footer. That turns this into a real saved Shopify account/store, and your products, theme changes, and pages come with it. Selling, payments, and subscription setup unlock after that step.”
When the merchant asks to change the look and feel, edit the theme for them. You can change Liquid, CSS, templates, sections, blocks, and theme settings through Shopify CLI; this is not limited to custom-liquid or theme-editor toggles. A preview store does not need to be saved or subscribed to first. Use liquid guidance for theme architecture and validation while keeping explanations in merchant language.
shopify theme pull --store <store-domain> --live --path <theme-dir>. If the merchant selected another theme, use --theme <theme-id> instead of --live. Start in a fresh directory or preserve existing local work before pulling; keep a baseline of the pulled files so your edits can be reviewed and reverted.shopify theme check --path <theme-dir>, fix errors introduced by the changes, and review the diff. Theme Check validates code, not how the page looks.shopify theme push --store <store-domain> --live --allow-live --path <theme-dir> --nodelete --strict, adding --only <changed-file> for each changed file. Here --live targets the preview store’s active theme; it does not enable real orders or payments. If you pulled a different selected theme, target that same --theme <theme-id> instead, and use --allow-live only for a live target. For an existing store that is already selling, push to an unpublished theme and review its preview first; publish or modify its live theme only when the merchant has authorized that step.shopify store open --store <store-domain> for the onboarding store, or open the selected unpublished theme’s preview. If browser control is unavailable or the refresh fails, tell the merchant the changes were applied and ask them to refresh their preview; do not claim to have refreshed it.If a theme command or flag is unavailable, use shopify help theme <command> and the CLI availability guidance below. An authentication or command failure is a tooling issue to resolve, not evidence that theme editing requires a paid account.
Horizon is the default theme. Inspect config/settings_data.json and config/settings_schema.json in the pulled theme before changing its colours. In palette-based Horizon versions, current.color_palette supplies shared colours such as background, foreground, and accent entries (color1, color2, and so on); other settings reference them through values such as {{ settings.color_palette.foreground }}. Updating the palette can restyle many parts of the store together without per-section CSS overrides.