On this page

Connect a CMS or webhook

Connect a destination once and Outcited can publish the articles it generates straight to your site - no copy-paste. This guide walks through every option, from a one-field webhook to a full WordPress or GitHub connection.

Overview

Outcited generates GEO-optimized articles aimed at the queries where AI engines cite your competitors instead of you. A publishing destination is where those articles go live. You can connect as many as you like and choose a destination each time you publish.

Every connection is managed from the Publishing page. Credentials (passwords, API keys, tokens) are encrypted before they are stored and are never shown back to you or sent to your browser.

In a hurry?
The fastest way to ship today is to open an article on the Content page and download it as Markdown or MDX - no setup at all. Wire up an automated destination below whenever you are ready.

Choose a path

Not sure which to pick? Use this table. WordPress, GitHub PR, and a webhook give fully hands-off publishing; Markdown export is the zero-setup manual option that works with any stack.

OptionBest forSetupAutomation
Download Markdown / MDXAny stack, fastest startNo setupManual
WebhookCustom tools, Zapier, Make1 fieldFull
WordPressWordPress blogs~2 minFull
GitHub PRNext.js / MDX on Vercel~3 minFull (on merge)
Webflow / Ghost / Shopify / NotionThose platforms~2-3 minFull

Publish an article

Once a destination is connected, publishing takes one click:

  1. 1Go to Content and open any article (or generate a new one).
  2. 2Review it - tweak the draft and check its GEO-readiness score.
  3. 3Click Publish, then choose the destination you connected.
  4. 4Outcited sends the article and stores the live URL on the article once it is published.
Note
AI engines typically take 2 - 4 weeks to crawl and start citing new content. Publishing is the trigger - the Bot Tracking page shows you the crawls as they happen, well before citations move.

WordPress

Publish straight into a self-hosted WordPress blog via the REST API and an application password.

Note
On WordPress.com (rather than self-hosted), use the same steps - they require the Business plan or higher for REST API access.

Step by step

  1. 1Log in to your WordPress dashboard (the wp-admin page on your site).
  2. 2In the left menu, click Users, then open Profile (your own account).
  3. 3Scroll down to 'Application Passwords', type a name like 'Outcited', and click 'Add New Application Password'.
  4. 4Copy the password it shows you (a few short blocks of letters) and paste it into 'Application password' below. WordPress only shows it once.
  5. 5Fill in your site address and the username you log in with, then click Connect.

What you will enter

FieldRequiredNotes
Site URLYesYour WordPress site root (no trailing /wp-json).
UsernameYese.g. editor
Application passwordencryptedYesCreate under Users -> Profile -> Application Passwords.

Webflow

Publish into a Webflow CMS Collection using a site API token.

Step by step

  1. 1Open your Webflow project and go to Site settings, then 'Apps & integrations'.
  2. 2Find 'API access', click 'Generate API token', name it 'Outcited', and copy the token.
  3. 3In the left CMS panel, open the collection you want articles to go into (for example 'Blog Posts').
  4. 4Click the collection's settings (the gear icon) - the 'Collection ID' is listed there. Copy and paste it below.
  5. 5Leave 'Body field slug' as post-body unless your blog uses a different rich-text field, then click Connect.

What you will enter

FieldRequiredNotes
API tokenencryptedYesWebflow -> Site settings -> Apps & integrations -> API access.
Collection IDYesThe CMS Collection to publish articles into.
Body field slugOptionalRich-text field slug for the article body (defaults to post-body).
Live URL baseOptionalOptional. Used to build the published article link.

Ghost

Publish to a Ghost blog with an Admin API key from a custom integration.

Step by step

  1. 1In your Ghost admin, open Settings, then 'Integrations'.
  2. 2Click 'Add custom integration', name it 'Outcited', and create it.
  3. 3Copy the 'Admin API Key' (a long code with a colon in the middle) and paste it below.
  4. 4Set 'Site URL' to your blog's address (for example https://yourblog.ghost.io), then click Connect.

What you will enter

FieldRequiredNotes
Site URLYesYour Ghost site URL (no trailing slash).
Admin API keyencryptedYesGhost Admin -> Settings -> Integrations -> Add custom integration.

Shopify

Publish blog posts to your Shopify store with a custom app's Admin API token.

Step by step

  1. 1In your Shopify admin, go to Settings, then 'Apps and sales channels', then 'Develop apps'.
  2. 2Click 'Create an app', name it 'Outcited', and create it.
  3. 3Open the 'Configuration' tab, click Configure on Admin API, turn on the 'write_content' permission, and Save.
  4. 4Open the 'API credentials' tab, click 'Install app', then copy the 'Admin API access token' (it starts with shpat_). It is shown only once.
  5. 5Your store domain is your yourstore.myshopify.com address. For Blog ID, go to Online Store > Blog posts > Manage blogs, open your blog, and copy the number from the page's web address.

What you will enter

FieldRequiredNotes
Store domainYese.g. yourstore.myshopify.com
Admin API access tokenencryptedYesCreate a custom app with the write_content scope and use its Admin API token.
Blog IDYesNumeric ID of the blog to post into (Online Store -> Blog posts).

Notion

Create a page per article in a Notion database using an internal integration.

Step by step

  1. 1Go to notion.so/my-integrations and click 'New integration'. Name it 'Outcited' and submit.
  2. 2Copy the 'Internal Integration Secret' (it starts with secret_ or ntn_) and paste it into the token field below.
  3. 3Open the Notion database (a table) where you want articles to appear.
  4. 4Click the '...' menu at the top-right of that database, choose 'Connections', and add 'Outcited' so it can create pages.
  5. 5For Database ID, copy the database's web address - the long code after the last slash and before the '?' is the ID. Leave 'Title property' as Name unless your database uses a different title column.

What you will enter

FieldRequiredNotes
Integration tokenencryptedYesCreate an internal integration at notion.so/my-integrations.
Database IDYesShare the target database with your integration, then paste its ID.
Title propertyOptionalName of the database's title property (defaults to Name).

GitHub PR

Open a pull request that adds the article as a Markdown file - ideal for Next.js / MDX blogs on Vercel.

We create a new branch, commit the article as a Markdown file into your content directory, and open a pull request. Merge it and your host (for example Vercel) deploys automatically. Nothing goes live until you merge, so you always keep a review step.

Token scope
Use a fine-grained or classic personal access token with Contents and Pull requests write access for the target repository.

Step by step

  1. 1This option is for blogs whose code lives in a GitHub repository. If that's not you, pick a different destination.
  2. 2Enter your repository as owner/repo (for example acme/website).
  3. 3At github.com, go to Settings > Developer settings > Personal access tokens and create a token that can write 'Contents' and 'Pull requests'. Copy and paste it below.
  4. 4Leave 'Base branch' and 'Content directory' blank unless you know you need specific values, then click Connect.

What you will enter

FieldRequiredNotes
RepositoryYese.g. owner/repo
Personal access tokenencryptedYesFine-grained or classic token with Contents + Pull requests write.
Base branchOptionale.g. main (defaults to repo default)
Content directoryOptionale.g. content/blog

Webhook

Send each published article as JSON to any URL - perfect for custom tooling or automations like Zapier and Make.

When you publish, we POST a JSON body to your endpoint. If you set an optional signing secret, we add an X-Outcited-Signature header containing an HMAC-SHA256 of the raw request body so you can verify it came from us.

POST request
POST https://example.com/hooks/outcited
Content-Type: application/json
X-Outcited-Signature: sha256=<hmac of the raw body>

{
  "event": "article.published",
  "title": "How to choose a CRM for startups",
  "slug": "how-to-choose-a-crm-for-startups",
  "markdown": "# How to choose a CRM ...",
  "html": "<h1>How to choose a CRM ...</h1>",
  "targetQuery": "best crm for startups",
  "domain": "example.com"
}

Verify the signature by computing an HMAC-SHA256 of the raw body with your signing secret and comparing it to the header:

Node.js
import { createHmac, timingSafeEqual } from "node:crypto";

function isValid(rawBody, header, secret) {
  const expected = "sha256=" +
    createHmac("sha256", secret).update(rawBody).digest("hex");
  const a = Buffer.from(expected);
  const b = Buffer.from(header ?? "");
  return a.length === b.length && timingSafeEqual(a, b);
}

Step by step

  1. 1This sends each published article as data to any web address you choose - handy for custom tools or automations like Zapier.
  2. 2Paste the address that should receive the article into 'Endpoint URL'.
  3. 3If your endpoint verifies signatures, add a signing secret. If you're not sure, leave it blank.

What you will enter

FieldRequiredNotes
Endpoint URLYese.g. https://example.com/hooks/outcited
Signing secretencryptedOptionalOptional. If set, we send an X-Outcited-Signature HMAC header.

Markdown / MDX export

No integration required. Open any article on the Content page and use the actions menu to copy or download it as Markdown or MDX. FAQ schema and structured data are included in the file, so it stays GEO-optimized wherever you paste it.

  1. 1Open the article from the Content page.
  2. 2Use the actions menu to copy Markdown or download the .mdx file.
  3. 3Drop it into your repo, CMS, or editor and publish however you normally do.
Tip
This is the best way to confirm the output looks right before you commit to an automated destination.

Troubleshooting

The destination shows an 'Error' status.

Open it with Manage and re-enter the credential - tokens and application passwords expire or get revoked. Errors usually mean a key is no longer valid or a permission (scope) is missing.

WordPress returns 401 or 403.

Make sure you pasted an application password (from Users → Profile → Application Passwords), not your login password, and that the user has permission to publish posts.

GitHub PR fails to open.

Confirm the repository is entered as owner/repo and the token has Contents and Pull requests write access. If you set a base branch, make sure it exists.

My webhook never fires.

Check the endpoint is reachable over HTTPS and returns a 2xx status quickly. We treat non-2xx responses and timeouts as a failed publish.

Secrets fields are disabled.

Secure credential storage is briefly unavailable. Webhook destinations (which need no secret) still work; try the others again shortly.

FAQ

Are my credentials safe?

Yes. Secrets are encrypted with AES-256-GCM before storage and are never returned to your browser. When you Manage a destination, the secret fields stay blank - leave them blank to keep the stored value.

Can I connect more than one destination?

Yes - connect as many as you like and pick one each time you publish. Auto-publishing availability depends on your plan.

Will publishing make AI cite me immediately?

No. Publishing is what lets AI engines discover your content; citations usually follow in 2 - 4 weeks. Watch Bot Tracking for the earliest signal that crawlers have found the new pages.

Can I edit before it goes live?

Always. Review and edit the draft on the Content page first. With GitHub PR nothing ships until you merge the pull request.

Still stuck? Reach us from the contact page or the in-app assistant and we will help you connect.