Publish to Ghost from Growth Calendar
Finished articles can go to Ghost without any copying and pasting. Send them one at a time, have every finished article arrive as a draft, or let them publish themselves.
There is one setting for the whole workspace, under CMS in the top right of Growth Calendar.
What you need
Ghost needs an Admin API key, which comes from a custom integration.
- In Ghost, open Settings > Integrations.
- Select Add custom integration and give it a name such as
Timothe. - Copy the Admin API key.
The Admin API key contains a colon, like 640b...4f2a:8c1d...9e07. The Content API key sits directly above it and looks similar, but it can only read; connecting with it will be refused.
Connecting
- Open CMS in the top right of Growth Calendar.
- Select Ghost, then enter the site URL (
https://example.com) and the Admin API key. - Select Connect.
Enter the address of your Ghost admin panel without the /ghost part. Connecting checks the site straight away to confirm it can accept posts. If it reports a problem, see "When it does not work" below.
Choosing how articles are sent
Once connected, the same screen offers three choices.
The default is Manual. Starting with manual or drafts and switching to automatic publishing once you trust the output is the safer path.
Sending a single article
Use Publish to CMS at the top right of an article. The control next to it switches between sending as a draft and publishing immediately.
Sending the same article twice updates the existing Ghost post rather than creating a second one, so revising and re-sending never leaves duplicates behind.
About internal links
Growth Calendar links articles in the same cluster to each other. When an article is sent, links to siblings that have already been sent become their real URLs.
This works even while those siblings are still drafts in Ghost. Ghost gives a draft a temporary preview address, so Growth Calendar works out the address the post will have once it is published and links to that instead.
Links to articles that have not been sent at all are unwrapped to plain text. A link to an address that does not exist would send readers to an error page. Work through a cluster in order and each article will link correctly to the ones before it.
If your site has custom permalinks (a routes.yaml that does not use /{slug}/), links made while a sibling is still a draft can point at the wrong address. Publishing that sibling corrects it on the next send.
About images
Images inside an article keep their Timothe-hosted addresses. They are not copied into the Ghost media library.
Ghost stores posts in its own editor format, so the article is converted on arrival. Headings, tables, lists, images and quotes all survive; tables arrive as an HTML card, which Ghost's editor shows as a single block rather than an editable table.
When it does not work
"That does not look like a Ghost Admin API key"
The key needs to be the Admin API key, which contains a colon. The Content API key shown next to it in the same panel is a different key and cannot post.
"Ghost did not accept that Admin API key"
The key is the right shape but Ghost rejected its signature. The most common cause is a key that was copied short. Copy it again from Settings > Integrations, including everything after the colon.
"That site does not know this Admin API key"
The key is valid in form but unknown to this site. Either it belongs to a different Ghost site, or the integration it came from has been deleted. Create a new custom integration and use its key.
"That address did not return the Ghost Admin API"
The site URL is probably wrong, or it points at something other than Ghost. Enter the address of the Ghost admin panel without the /ghost part.
"Ghost did not treat the request as authenticated"
Either the key has no access to posts, or a proxy or CDN in front of the site is removing the Authorization header. Check any reverse proxy configuration in front of Ghost.
"Ghost rejected the request as expired"
Ghost authenticates each request with a token that is only valid for a few minutes, so this means the site's clock is minutes away from ours rather than that anything is wrong with the key. Check the server's system time.
Other CMSs
WordPress, Ghost and Shopify are supported today. Other systems will connect from the same screen as they are added.
