Connect Specter to your Ghost blog (first sync)
Specter is a small native macOS menu-bar app that keeps a folder of local markdown files in two-way sync with your Ghost blog. A bundled Node daemon does the actual syncing, and everything is local-first — your posts live as files on your Mac, and nothing routes through a third-party server. This guide walks through connecting Specter to Ghost and running your first sync, which pulls your existing posts down as markdown.
Before you start
You need two things in place:
- A Ghost Admin API key. This is what lets Specter read and write your posts. It looks like
id:secretand is not the same as the Content API key. If you don’t have it yet, here’s how to get your Ghost Admin API key. - Specter installed and running. If you haven’t done that, see how to install Specter on macOS. You’ll need macOS 14 or later on Apple Silicon.
Once Specter is launched, it lives in your menu bar near the clock. Click its icon to open the first-run onboarding.
Step 1: Paste your site URL and Admin API key
The onboarding screen asks for two values:
- Your Ghost site URL — the full address of your blog, such as
https://yourblog.com. - Your Admin API key in the
id:secretformat you copied from Ghost.
Specter stores the key locally in a config file with 600 permissions, meaning only your user account can read it. It is never uploaded anywhere.
Step 2: Test the connection
Click Test Connection. Specter uses your URL and key to make a quick authenticated call to your Ghost Admin API and confirm everything checks out. A green result means you’re good to continue. If it fails, jump to the troubleshooting note at the bottom of this page — it’s almost always the wrong key type or a typo in the URL.
Step 3: Choose a local folder
Next, Specter asks you to pick a folder on your Mac. This is where your posts will live as markdown files. An empty folder is the cleanest place to start, but any folder works. Specter only manages markdown files it knows about, so it won’t disturb unrelated files sitting alongside them.
Step 4: Run your first sync (pull)
With the connection verified and a folder chosen, Specter runs a first sync. This is a pull: it reads your existing Ghost posts and writes each one to disk as a markdown file. Depending on how many posts you have, this takes a few seconds to a minute.
Before anything touches your disk, you can use the dry-run preview. A dry run shows exactly what the sync will create, update, or flag, without writing a single file — handy the first time so you know what to expect. When you’re happy with the preview, run the real sync.
What appears on disk
After the pull finishes, open your folder. You’ll see one markdown file per post, each with a frontmatter block at the top carrying the post’s metadata. The frontmatter includes:
title— the post titletags— your Ghost tagsstatus— draft or published- the feature image URL
- the custom excerpt
The body of each file is your post content as plain markdown. Edit these files in any editor, and Specter syncs the changes back to Ghost on the next run.
A note on scope: Specter syncs posts only. It does not pull or push images, themes, members, or newsletters. Feature images come through as URLs in frontmatter, not as downloaded files.
How Specter protects your work
Two-way sync means changes can collide. Specter guards against that with conflict prompts: if both the Ghost copy and the local file changed since the last sync, Specter stops and asks you which version to keep rather than silently overwriting either side. Combined with the dry-run preview, that means a sync never clobbers your work without telling you first.
Now edit your posts
With your posts on disk as markdown, the writing workflow is yours to choose. Specter has no built-in AI — you bring your own tools. A popular setup is editing posts with an AI assistant; see editing Ghost posts with Claude. If you’d rather write in a dedicated markdown app, point your sync folder at your vault and read about the Ghost and Obsidian sync workflow.
Troubleshooting: connection failed
If Test Connection fails, the cause is usually one of two things: you pasted the Content API key instead of the Admin API key, or there’s a typo in your site URL (a missing https://, a trailing slash, or the wrong domain). Double-check both, and if the key looks wrong, walk back through how to get your Ghost Admin API key to copy a fresh one.
That’s the whole connection flow. Paste, test, pick a folder, pull — and your Ghost blog is now a folder of markdown you can edit however you like.