Connect Shopify

Connect your Shopify store's blog to SerpPal with a Dev Dashboard app (client ID and secret) or an older Admin API token, then publish articles with images.

SerpPal publishes to your Shopify store's blog through the Shopify Admin API. Each post becomes a blog article, with its images copied to your store's Files so they load from Shopify's own servers.

Since January 2026, Shopify no longer lets you create new custom apps inside the store admin. New apps are made in the Shopify Dev Dashboard, and they connect with a client ID and client secret instead of a token you copy. SerpPal supports both kinds:

Your appWhat you enter in SerpPal
A new app made in the Dev DashboardClient ID and Client secret
An older custom app made in the store admin before 2026Admin API access token (starts with shpat_)

Before you start

  • Your store needs a blog. In Shopify, go to Online Store, Blog posts, Manage blogs and make one if the list is empty. Shopify stores usually start with one called "News".
  • You need to be the store owner, or a staff member allowed to develop apps.
  • The app must belong to the same Shopify organization as the store. The client ID and secret only work for stores in the app's own organization, so create the app while signed in to the account that owns the store.

Step 1: Create the app

  1. In your Shopify admin, go to Settings, then Apps, then Develop apps, and choose to build apps in the Dev Dashboard. (You can also open the Dev Dashboard directly from your Shopify account.)
  2. Click Create app and name it, for example SerpPal.

Step 2: Give it the right permissions

  1. Create a version of the app. In its Admin API access scopes, add:
    • write_content: lets SerpPal create and update blog articles.
    • write_files: lets SerpPal copy images and videos into your store's Files.
  2. Release the version. An app needs a released version before you can install it.

Step 3: Install it on your store

From the app in the Dev Dashboard, install it on your store and approve the permissions.

Important

If you add a scope later, release a new version and approve the new permissions on your store. Until you do, the store keeps the old permissions and SerpPal shows "the token is missing the ... permission".

Step 4: Copy the client ID and secret

Open the app's Settings in the Dev Dashboard and copy the Client ID and the Client secret (the secret starts with shpss_).

Step 5: Connect in SerpPal

  1. In SerpPal, open your project, click Project settings, and under Publishing click Connect a site.
  2. Choose Shopify and fill in:
FieldWhat to enter
Store addressYour store's .myshopify.com address, for example mystore.myshopify.com. Just mystore works too, and so does a link to your admin like admin.shopify.com/store/mystore. Your own domain (like shop.com) does not work here.
Client IDFrom the app's Settings.
Client secretFrom the app's Settings.
Admin API access tokenLeave empty.
Author nameOptional. Shown as the article's author, for example Store team.
  1. Click Connect. SerpPal asks Shopify for an access token, checks the permissions and lists your blogs.
  2. If your store has more than one blog, pick one under Blog and click Save and test.

Shopify's tokens from a client ID and secret last 24 hours. SerpPal gets a fresh one by itself whenever it needs one, so you never have to update anything.

Option B: an older custom app with a shpat_ token

If you made a custom app in your store admin before 2026, you can keep using it.

  1. In Shopify, open Settings, Apps, Develop apps and open your app.
  2. Make sure its Admin API scopes include write_content and write_files. If you change them, reinstall the app (Shopify then shows a new token).
  3. Under API credentials, copy the Admin API access token. It starts with shpat_.
  4. In SerpPal, choose Shopify, enter the Store address, paste the token into Admin API access token, and leave Client ID and Client secret empty.
Note

The API key (32 letters and numbers) and the API secret key (starts with shpss_) of an old app are not the access token. SerpPal tells you if you paste one of those into the token field.

What SerpPal sends to Shopify

  • Title and body. The first H1 is left out, because your theme shows the article title.
  • Handle: the slug you set, so the address is /blogs/<blog>/<slug>.
  • Summary: the excerpt.
  • Tags: your tags and categories together, as Shopify tags (Shopify has no categories).
  • Author: the Author name from the connection, if you set one.
  • Visibility: Live post makes the article visible. Draft to review saves it as hidden.
  • Featured image: set as the article's image. Shopify copies it from SerpPal.
  • Images and videos in the article: copied to Content, Files in your Shopify admin and served from Shopify. Videos can take up to about a minute and a half to process. If Shopify can't take a file in time, the post links to SerpPal's copy instead, so it still shows.

After a live post, SerpPal shows the article's address on your .myshopify.com domain. Shopify sends visitors from there to your main domain.

Publishing the same article to the same store again updates the existing article. If it was deleted in Shopify, a new one is made.

Troubleshooting

"Shopify: the client ID or client secret was not accepted..." Copy both again from the app's Settings in the Dev Dashboard. Check that the app is installed on this store, and that the store belongs to the same organization as the app.

"Shopify: the token is missing the write_content permission" (or write_files) Add the scope to the app, release a new version, and approve it on your store. For an older custom app, add the scope and reinstall it, then paste the new token.

"Shopify: enter your store's .myshopify.com address..." Use the .myshopify.com address, not your own domain. Find it in Shopify under Settings, Domains.

"Shopify: this store has no blog yet..." Make a blog under Online Store, Blog posts, Manage blogs, then click Test in SerpPal.

"Shopify: the chosen blog no longer exists..." The blog was deleted or renamed. Click the pencil on the connection, pick a blog again and click Save and test.

"Shopify did not accept the article: handle has already been taken" Another article in that blog already uses this slug. Change the Slug in the publish dialog.

"Shopify: this store is frozen or unpaid" or "this store is locked" Shopify doesn't allow changes to the store right now. Sort out the store's status in Shopify, then click Try again on the post.

More fixes are in Publishing troubleshooting.

Updated November 5, 2026Still stuck? Contact support