Skip to content

Connect Shopify with your own app

Create a Shopify app for your store, then use Install via Shopify to connect it to Lifter. You configure the app once for your Lifter gateway. Specialists can then connect through Shopify without copying access tokens.

This walkthrough uses Fresh Feels Lifter as the example app. Use your own store name, permanent Shopify domain and Lifter address when following it.

You need:

  • Shopify access that lets you develop apps and install them on the store.
  • A Shopify organisation where you can create an app and choose its distribution.
  • An Administrator account on your Lifter gateway.
  • Access to the specialist that will use Shopify.
  • An agreed list of what the specialist should be able to read or change.

Keep these two addresses separate:

Address Where you use it
Your Lifter address, such as https://your-brand.lifter.work Shopify’s App URL and the start of its callback URL
Your permanent myshopify.com domain Identifying the store when connecting a specialist

Find the permanent Shopify domain under Settings → Domains in Shopify. Your public storefront address, such as www.your-brand.com, is not the shop subdomain that Lifter asks for.

  1. Open the correct store in Shopify admin.
  2. Select Settings → Apps → Develop apps.

Apps settings header with the Develop apps link.

  1. The App development screen explains that new apps belong in the Dev Dashboard. Open the Shopify Dev Dashboard. If your store shows a dashboard button, you can use that instead.
  2. Select the organisation that will own the app. A collaborator’s development organisation can be different from the store’s organisation.

Shopify’s App development screen pointing users to the Dev Dashboard.

If the dashboard opens with 403: Forbidden, check the selected organisation and your app-development permissions. For a Partner account, you can select your organisation in the Partner Dashboard and follow its Dev dashboard link.

  1. In the Dev Dashboard, open Apps → Create app.
  2. Use Start from Dev Dashboard.
  3. Enter a clear name, such as Fresh Feels Lifter, then select Create app.

Create an app, with Fresh Feels Lifter entered under Start from Dev Dashboard.

You do not need a Shopify CLI project for this dashboard walkthrough. If Lifter support manages your app configuration, coordinate later changes with them so an older configuration is not released over your dashboard changes.

Shopify opens Create version. For an existing app, use Versions → Create version.

Enter these values:

Field Value
App name Your app’s name
App URL Your Lifter gateway’s public HTTPS address
Embed app in Shopify admin Off
Preferences URL (optional) Leave blank
Webhooks API version The latest stable option offered by Shopify; the example used 2026-07
Optional scopes Leave blank for this setup
Use legacy install flow Off
Allowed redirection URL(s) Your Lifter address followed by /connectors/oauth/callback

App name, gateway URL, embedding disabled and Webhooks API version selected.

For the Fresh Feels example, the callback is:

https://fresh-feels.lifter.work/connectors/oauth/callback

Replace the hostname with your own Lifter gateway. Keep the exact path, HTTPS and no trailing slash. Do not use your Shopify storefront URL as the callback.

Scopes define what Shopify allows the app to do. Under Scopes, select Select scopes, choose Admin API, and search for the permissions you need. Select the relevant boxes, then choose Done. You can also paste a comma-separated list directly into Scopes.

Admin API scope picker filtered to products, with write_products selected.

The example configuration supports product and inventory management, publishing, and read-only reporting:

What the specialist can do Scope
Read and update products and collections write_products
Read and adjust inventory write_inventory
Read store locations read_locations
Read and manage product publication write_publications
Read recent orders read_orders
Read draft orders read_draft_orders
Read fulfilment services read_fulfillments
Read returns read_returns
Read customers read_customers
Read discounts and price rules read_discounts, read_price_rules
Read reports and analytics read_reports, read_analytics

Copy this example only if those operations match your needs:

write_products,write_inventory,read_locations,write_publications,read_orders,read_draft_orders,read_fulfillments,read_returns,read_customers,read_discounts,read_price_rules,read_reports,read_analytics

A write scope includes its matching read access. For a reporting-only specialist, replace write_products, write_inventory and write_publications with their read_ equivalents. Omit other scopes that your specialist will not use. Lifter’s tool permissions remain a separate control over the specialist’s actions.

Add other scopes only for planned tasks. For example, updating customers needs write_customers, creating discounts needs write_discounts, and uploading files needs write_files. Order changes require permissions appropriate to the specific operation. See Shopify’s scope reference.

Required scopes, empty optional scopes, legacy installation disabled and the Lifter callback URL.

read_orders normally covers the last 60 days. Historical reporting also needs read_all_orders, which requires Shopify approval.

  1. Follow Request access beside the scope settings.
  2. On API access requests, find Read all orders scope → Request access.
  3. Explain your actual use of older orders and submit the request.
  4. After approval, add read_all_orders alongside read_orders and release a version with that scope. An already connected store must approve the change through Lifter’s Reconnect flow.

Historical-order access request with an example explanation of reporting needs.

The screenshot shows an example explanation, not an approved request. Do not add the restricted scope to a version until Shopify grants access.

Customer names, email addresses, phone numbers and addresses have additional protected-data rules. A scope selection alone does not establish access to all of those fields. Check Shopify’s protected customer data requirements for your app and verify the fields your specialist actually needs.

4. Release the version and choose custom distribution

Section titled “4. Release the version and choose custom distribution”
  1. Select Release on the version form.
  2. Add a version name, such as lifter-connector-v1, and a short description.
  3. Select Release in the confirmation dialog.
  4. Check that your version appears as Active under Versions.

Release dialog with a version name and description of the configured access.

Next, restrict where the app can be installed:

  1. Open the app’s overview by selecting its name in the sidebar.
  2. Under Distribution, select Select distribution method. This may open the Partner Dashboard in another tab.
  3. Select Custom distribution, then confirm your choice. Shopify does not let you change the distribution method afterwards.

Custom distribution selected instead of public distribution.

  1. Enter your store’s myshopify.com domain or its admin.shopify.com/store/... address.
  2. Turn off Allow multi-store install for one Plus organization when this app is for one store.
  3. Select Generate link and confirm the store shown in the dialog.

Custom distribution targeted to Fresh Feels with multi-store installation turned off.

Keep the generated install link for the store owner or an authorised installer. Custom distribution does not put the app in the public Shopify App Store. See Shopify’s distribution guidance.

Do this once as a Lifter administrator, before connecting the specialist.

  1. In the Shopify Dev Dashboard, open your app’s App settings.
  2. Under Credentials, locate Client ID and Secret.
  3. In your Lifter gateway, open Settings → Connectors.
  4. Find Shopify and select its configuration cog (Configure Shopify).
  5. Copy Shopify’s Client ID into Lifter’s Client ID field and Shopify’s Secret into Client secret.
  6. Leave App handle blank unless you know the app’s actual URL handle. It is optional and supplies the Manage in Shopify link; it is not the version name or the shop subdomain.
  7. Select Save and make sure the Shopify connector is enabled.

Configure Shopify dialog in Lifter before the client ID and secret are entered.

This image shows the live configuration form before credentials are entered. Keep the secret private; do not put it in a specialist conversation or a screenshot. Lifter stores it encrypted and does not display the saved secret again.

Saving these settings makes Install via Shopify available to specialists. It does not, by itself, connect a specialist to the store.

  1. Open the custom install link from step 4 as a Shopify user who can install apps on the target store.
  2. Check the store, app name and requested permissions. Expand the permission groups to distinguish viewing data from changing it, then select Install. Return to Lifter if Shopify takes you to the app’s URL.

Shopify installation screen for Fresh Feels Lifter, showing permission groups and the Install button.

  1. In Lifter, open Specialists, choose your specialist, then open Connectors → Add connector, then select Connect on Shopify.
  2. Choose Install via Shopify. Keep Profile name as default for the first connection, or give it a name that distinguishes this store.
  3. Enter Shop subdomain: only the part before .myshopify.com. For example, enter fresh-feels-au for fresh-feels-au.myshopify.com. Use your own store’s value.
  4. Select Install via Shopify and complete Shopify’s authorisation screen.
  5. On returning to Lifter, check that the specialist’s Shopify connection is active and points to the intended store.

Connect Shopify dialog with Install via Shopify selected and fresh-feels-au entered as the shop subdomain.

The app option asks for the shop subdomain. If you see Admin API access token and Refresh token, you are in via Shopify CLI mode. Switch to Install via Shopify; do not paste the app secret into a token field.

If Install via Shopify is missing, ask the gateway administrator to check the saved app credentials under Settings → Connectors → Shopify.

Ask the specialist:

Use the Shopify connection to tell me the store name and list three product titles. Do not change anything.

Check that the result comes from the expected store. Then test the reads or changes that your specialist is intended to perform. Use a draft or disposable test product for a write test. A successful connection does not prove that every scope, protected field or reporting feature is available.

Symptom What to check
Shopify rejects the redirect URL The released version must contain the exact Lifter callback URL, with HTTPS and no trailing slash.
The app cannot be installed on this store Check the store restriction under custom distribution and the installer’s permissions.
Shopify rejects a scope when releasing Check its spelling and whether Shopify must approve it first. Leave restricted scopes out until approved.
The specialist cannot perform one operation Check both the app’s granted scopes and the specialist’s tool permissions.
Older orders are missing Check approval and consent for read_all_orders.
Customer fields are missing or access is denied Check protected customer data eligibility and the specific fields requested.
You released more scopes but they still do not work In Lifter, open the specialist’s Shopify connection and select Reconnect to authorise again.

After changing scopes, release a new Shopify app version and reconnect the Lifter connection. Opening Manage in Shopify alone may return directly to Lifter without asking the merchant to approve the new permissions.