Publishing
Framer
AvailablePublish 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
- 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.
- Open Site Settings (top-right gear) → General → API Keys → Generate. Copy the key.
- Copy the project URL from the browser address bar while editing the site (e.g.
https://framer.com/projects/abcXYZ). - In KwikScaleAI: Integrations → Framer → Connect. Paste the project URL and API key, pick your collection.
- Confirm the auto-detected field mapping (or tweak it), and decide whether autoDeploy should be on.
- 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
idupdate; items without anidare 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.
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
| Parameter | Type | Required | Description |
|---|---|---|---|
| projectUrl | string (URL) | Required | Full Framer project URL, must contain framer.com. Copy from the browser while editing. |
| apiKey | string | Required | API key from Site Settings → General → API Keys. Treat as a password. |
| collectionId | string | Required | Framer CMS collection ID. Selected from a dropdown in the dashboard after connect. |
| fieldMap | Record<string, string> | Optional | Canonical-field → Framer-field-ID mapping. Auto-populated from collection schema during setup; override only if the auto-detection picks wrong fields. |
| autoDeploy | boolean | Optional | true = publish + deploy after content push (article goes live immediately). false = write to CMS only, publish manually in Framer Designer.Default: true |
projectUrlRequiredstring (URL)
Full Framer project URL, must contain framer.com. Copy from the browser while editing.
apiKeyRequiredstring
API key from Site Settings → General → API Keys. Treat as a password.
collectionIdRequiredstring
Framer CMS collection ID. Selected from a dropdown in the dashboard after connect.
fieldMapOptionalRecord<string, string>
Canonical-field → Framer-field-ID mapping. Auto-populated from collection schema during setup; override only if the auto-detection picks wrong fields.
autoDeployOptionalboolean
true = publish + deploy after content push (article goes live immediately). false = write to CMS only, publish manually in Framer Designer.
Default: true
Capabilities
Troubleshooting
WebSocket connection fails
Collection not found
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
Deploy takes several minutes
Rate limits during bulk import
FAQ
Do I need a paid Framer plan for the API?
Where do I get the Framer API key?
What is autoDeploy and why is it on by default?
Does KwikScaleAI auto-detect my CMS field names?
Can I use Framer without the CMS?
Related
- Webflow, Wix — other no-code platforms.
- Integrations overview.
Ready to automate publishing?
Connect your site once. KwikScaleAI researches, writes, and publishes SEO content on autopilot.