# Connect your CMS

> Connect the CMS your blog lives in to a property: where to get each key, the exact access it needs, what LopeBase reads, and how Content publishes there.

Source: https://lopebase.com/docs/connect-a-cms
Updated: 2026-10-09
Open in the app: https://app.lopebase.com/connections

Connect the CMS a property's blog lives in, and LopeBase lists its posts beside everything else you run, shows which published posts have no description or run under 300 words, and lets Content publish approved articles there with the same key. Each CMS below connects this way. EmDash has its own connector.

## Connect a CMS to a property

1. **Open the connection:** From a property's page or Connections, open your CMS under Content. [Open Connections](https://app.lopebase.com/connections)
2. **Create the key in your CMS:** Follow the steps for your CMS below. The connect dialog shows the same steps, with a link to the right screen.
3. **Paste and connect:** LopeBase reads one post (or runs one small query) with what you pasted. Nothing is saved unless that works, and the message says what to fix if it does not.

Once connected, the posts show under **Posts on your sites** in Content, and the connection's own page shows its SEO health. LopeBase only reads with the key until you choose that CMS as the property's Content destination. Then it publishes the articles you approve, and never deletes anything.

## Connect WordPress

1. **Pick the user:** Use an Author or Editor. LopeBase reads drafts with it, and publishes as that user once you pick WordPress as the Content destination.
2. **Add an application password:** In WordPress, open **Users** > **Profile**, scroll to Application Passwords, name it LopeBase, and press Add New Application Password. The section only shows on sites served over https.
3. **Paste it:** Enter the site address, the user's username, and the application password (not the user's login password).

Descriptions come from the excerpt you wrote, or from Yoast SEO when that plugin is installed.

## Connect Ghost

1. **Add a custom integration:** In Ghost Admin, open Settings, search for Integrations, and press Add custom integration. Name it LopeBase.
2. **Paste the API URL and key:** Copy the API URL and the Admin API key the integration shows. The key looks like two parts joined by a colon.

An Admin API key can edit posts, so LopeBase only uses it to read until Ghost is the Content destination.

## Connect Webflow

1. **Generate a site token:** Open the site's settings, then **Apps and integrations** > **API access**, and press Generate API token. Give it CMS read and write.
2. **Find the collection ID:** Open your blog collection's settings in the Webflow CMS and copy its collection ID.
3. **Name the fields:** The body field is the slug of the rich text field (post-body unless you changed it). Add the summary field to have descriptions checked, and the blog's address, like https://example.com/blog, so each post links to its page.

## Connect a Shopify blog

1. **Make an app in the Dev Dashboard:** In Shopify's Dev Dashboard, create an app, choose the read_content and write_content scopes on its version, release it, and install it on your store. The app and the store need to be in the same organization.
2. **Copy the client ID and secret:** Copy both from the app's settings. LopeBase trades them for a short-lived token whenever it calls Shopify. If you already have an older custom app made in the Shopify admin, paste its Admin API access token instead.
3. **Find the blog ID:** In the Shopify admin, open the blog under Online Store and copy the number at the end of its address. Enter the store as your-store.myshopify.com.

read_content and write_content cover blogs and pages only. LopeBase never sees products, orders, or customers.

## Connect Contentful

1. **Create a personal access token:** In Contentful, open **Settings** > **CMA tokens** and create a token named LopeBase.
2. **Name the space, type, and fields:** Copy the space ID from General settings. Enter the content type ID of your blog posts (blogPost unless you changed it) and the IDs of its title, slug, and body fields. Add a description field to have descriptions checked.

To publish from LopeBase, the body should be a Long text field, so the Markdown fits. Reading works with Rich Text too.

## Connect Sanity

1. **Add a token:** At sanity.io/manage, open the project, then **API** > **Tokens**, and add a token named LopeBase with Editor permissions.
2. **Name the project and type:** Enter the project ID, the dataset (production unless you changed it), and your post's document type and body field. Add a description field to have descriptions checked.

LopeBase lists published documents only. Drafts stay in your Studio.

## Publish to the CMS you connected

Open **Grow** > **Content**, pick the property, and choose CMS as the destination, then the same CMS. Leave the fields blank to use the connection's settings and key, or fill one in to use something different for publishing. Use **Test connection** before your first article goes out.

## If something goes wrong

### WordPress says the password is wrong, but it is right

Paste the application password, not the password you sign in with, and enter the username it belongs to. Some security plugins and hosts turn application passwords off, so check that the Application Passwords section shows on the profile. Some hosts also drop the login on its way to WordPress; your host's help pages call this passing the Authorization header, and it is usually one line in the site's settings or .htaccess.

### Shopify refuses the client ID and secret

The app has to be installed on the store, and made in the same organization that owns the store. A store made from the Shopify admin rather than the Dev Dashboard can sit outside your organization; in that case use an older custom app's access token if you have one.

### The SEO health shows no count for missing descriptions

That CMS keeps no description LopeBase can check yet. For Webflow, Contentful, and Sanity, add the field that holds each post's description on the connection.

### It says the CMS is limiting requests

The key works, the CMS is just busy. LopeBase saves the connection and reads the posts again on its next pass.
