Publishing

Framer

Available

Publish articles to Framer CMS and auto-deploy your site — all via the Framer Server API. KwikScaleAI connects over WebSocket, pushes content to your collection, then triggers a site rebuild so new articles go live automatically.

Prerequisites

  • A Framer project on a paid Site plan (Mini or higher).
  • A CMS Collection in your project. Our standard blog schema has 6 fields: Title, Content (formatted text, HTML), SEO Description, Tags, Categories, Publish Date. The adapter maps to whatever field names your collection uses.

Setup guide

  1. In Framer, create a CMS Collection named Blog (or reuse an existing one). Add the 6 fields listed above — or keep your existing schema, KwikScaleAI will map by display name.
  2. Open Site Settings (top-right gear) → GeneralAPI Keys Generate. Copy the key.
  3. Copy the project URL from the browser address bar while editing the site (e.g. https://framer.com/projects/abcXYZ).
  4. In KwikScaleAI: Integrations → Framer → Connect. Paste the project URL and API key, pick your collection.
  5. Confirm the auto-detected field mapping (or tweak it), and decide whether autoDeploy should be on.
  6. Click Test connection. KwikScaleAI connects over WebSocket, reads the collection schema, and confirms.

How it works

Unlike the other adapters, Framer uses a WebSocket-based Server API rather than REST. The adapter opens a fresh connection per publish, authenticates with the API key, does its work, and disconnects in a finally block.

  • connect(projectUrl, apiKey) → session token
  • collection.addItems(items) — upsert by slug. Items with a matching id update; items without an id are created.
  • framer.publish() — marks the content as ready (autoDeploy only).
  • framer.deploy() — triggers a site rebuild + push to production (autoDeploy only).
  • disconnect() — always called in finally.
Simplified flow (internal)
const framer = await connect(projectUrl, apiKey);
try {
  const collections = await framer.getCollections();
  const collection = collections.find((c) => c.id === collectionId);

  await collection.addItems([{
    slug: input.slug,
    fields: {
      [fieldMap.title]: input.title,
      [fieldMap.content]: input.contentHtml,
      [fieldMap.seoDescription]: input.metaDescription,
      [fieldMap.tags]: input.tags.join(", "),
      [fieldMap.categories]: input.categories.join(", "),
      [fieldMap.publishDate]: input.publishedAt,
    },
  }]);

  if (config.autoDeploy) {
    await framer.publish();
    await framer.deploy();
  }
} finally {
  framer.disconnect();
}

Configuration

projectUrlRequired

string (URL)

Full Framer project URL, must contain framer.com. Copy from the browser while editing.

apiKeyRequired

string

API key from Site Settings → General → API Keys. Treat as a password.

collectionIdRequired

string

Framer CMS collection ID. Selected from a dropdown in the dashboard after connect.

fieldMapOptional

Record<string, string>

Canonical-field → Framer-field-ID mapping. Auto-populated from collection schema during setup; override only if the auto-detection picks wrong fields.

autoDeployOptional

boolean

true = publish + deploy after content push (article goes live immediately). false = write to CMS only, publish manually in Framer Designer.

Default: true

Capabilities

Update existing
Draft
Tags
Categories
Featured image
Scheduled publish
Delete

Troubleshooting

WebSocket connection fails
Usually a wrong API key or a project on the free plan. Regenerate the key in Site Settings, and verify you're on Mini or higher. Corporate firewalls that block WebSocket upgrades can also cause this — test from a consumer network.
Collection not found
The collectionId doesn't exist in this project. Open the Framer Designer, confirm the collection's existence, and re-pick it in the KwikScaleAI dashboard.
Content pushed but site doesn't update
autoDeploy is set to false. Either flip it to true in the dashboard, or open Framer Designer and click Publish manually.
Fields don't populate correctly
Field mapping is incorrect — most often because the auto-detection matched two fields with similar names. Review fieldMap in the dashboard and pick the right field ID for each canonical slot (title, content, seoDescription, tags, categories, publishDate).
Deploy takes several minutes
Framer deploys are asynchronous — the API call returns quickly but the actual CDN push happens in the background. Large sites (many pages) can take 1–3 minutes to fully propagate. This is normal; check the Framer dashboard for deploy status.
Rate limits during bulk import
Framer's Server API throttles at around 60 req/min per key. For bulk initial content import, space publishes 2 seconds apart or use a single bulk-write endpoint (not yet wired in KwikScaleAI).

FAQ

Do I need a paid Framer plan for the API?
Yes. The Framer Server API is available on Framer Site plans (Mini, Basic, Pro). The free plan does not expose the Server API.
Where do I get the Framer API key?
In Framer: open your project → Site Settings (top-right gear icon) → General → API Keys → Generate. Copy the key and paste it into KwikScaleAI.
What is autoDeploy and why is it on by default?
Framer separates 'content updated' from 'site rebuilt and pushed live.' With autoDeploy: true (default), KwikScaleAI calls publish() + deploy() after writing content, so the new article is immediately visible. With autoDeploy: false, you need to hit Publish in Framer Designer manually — useful for staging workflows.
Does KwikScaleAI auto-detect my CMS field names?
Yes. On first connect, we read your collection's fields and map our canonical names (title, content, seoDescription, tags, categories, publishDate) to your field IDs by display name. You can review and override the mapping in the dashboard.
Can I use Framer without the CMS?
No — you need a CMS Collection in your Framer site to receive articles. Framer's static pages are not writeable via API.

Ready to automate publishing?

Connect your site once. KwikScaleAI researches, writes, and publishes SEO content on autopilot.

Get started free