framer-cms
Framer CMS management via the Server API — list, create, read, update, and delete CMS collections and items, upload images, publish previews, deploy to production, and manage project assets, all without opening Framer. Use when the user asks to manage Framer CMS content, publish a Framer site, push articles to Framer, update CMS items, upload images to Framer, create collections, sync content, or automate any Framer workflow. Trigger on: "framer", "framer cms", "framer publish", "framer deploy", "framer collection", "framer article", "push to framer", "upload to framer", "framer api", "framer server api", "cms item", "cms collection", "publish site", "deploy site", "framer preview", "framer image", "framer content". Do NOT trigger for: Framer design/layout work, Framer Motion animation library, building Framer plugins.
Install via CLI (Recommended)
clawhub install openclaw/skills/skills/berthelol/framer-crm-apiFramer CMS — Server API Skill
Manage Framer CMS content programmatically via the framer-api npm package. Push articles, upload images, create collections, and publish/deploy — all from the terminal, no Framer app needed.
First-time setup (onboarding)
If this is the first time the user uses this skill in a project, run the onboarding flow described in references/onboarding.md.
Quick check: Look for FRAMER_PROJECT_URL and FRAMER_API_KEY in the user's .env file or environment. If missing, onboard.
How it works
This skill uses the Framer Server API (framer-api npm package) which connects to Framer projects via WebSocket using an API key. It provides full CMS CRUD, image uploads, publishing, and deployment.
Important: The framer-api package must be installed in the project. If not present, run:
npm i framer-api
All operations use ES module scripts (.mjs files) with this connection pattern:
import { connect } from "framer-api"
// IMPORTANT: API key is passed as a plain string (2nd argument), NOT as {apiKey: "..."}
const framer = await connect(process.env.FRAMER_PROJECT_URL, process.env.FRAMER_API_KEY)
try {
// ... operations ...
} finally {
await framer.disconnect()
}
Available operations
CMS Collections
| Operation | Method | Notes |
|---|---|---|
| List collections | framer.getCollections() | Returns all CMS collections |
| Get one collection | framer.getCollection(id) | By collection ID |
| Create collection | framer.createCollection(name) | Creates empty collection |
| Get fields | collection.getFields() | Field definitions (name, type, id) |
| Add fields | collection.addFields([{type, name}]) | Add new fields to collection |
| Remove fields | collection.removeFields([fieldId]) | Delete fields by ID |
| Reorder fields | collection.setFieldOrder([fieldIds]) | Set field display order |
CMS Items (articles, entries)
| Operation | Method | Notes |
|---|---|---|
| List items | collection.getItems() | All items with field data |
| Create items | collection.addItems([{slug, fieldData}]) | Create new items. Returns undefined — re-fetch with getItems() to get IDs |
| Update item fields | item.setAttributes({ fieldData: { [fieldId]: {type, value} } }) | MUST wrap in fieldData: — without it, values are silently ignored |
| Update item slug/draft | item.setAttributes({ slug: "new", draft: false }) | Slug and draft are set directly (NOT inside fieldData) |
| Delete item | item.remove() | Single item |
| Bulk delete | collection.removeItems([itemIds]) | Multiple items |
| Reorder items | collection.setItemOrder([itemIds]) | Set display order |
⚠️ Critical: How to update CMS item fields
The setAttributes method has a non-obvious API design — field values MUST be wrapped in a fieldData key:
Metadata
Not sure this is the right skill?
Describe what you want to build — we'll match you to the best skill from 16,000+ options.
Find the right skillPaste this into your clawhub.json to enable this plugin.
{
"plugins": {
"official-berthelol-framer-crm-api": {
"enabled": true,
"auto_update": true
}
}
}Related Skills
scrapping
Use this skill whenever a user wants to get, pull, grab, fetch, or look up public data from social media platforms — profiles, posts, videos, comments, followers, engagement stats, transcripts, trending content, hashtags, or creator info from TikTok, Instagram, YouTube, Twitter/X, LinkedIn, Facebook, Reddit, Threads, Bluesky, Pinterest, Snapchat, Twitch, Kick, Truth Social, or link-in-bio sites (Linktree, Komi, Pillar). Also covers ad library lookups (Meta, Google, LinkedIn, Reddit) and TikTok Shop data. Trigger even when users say "scrape", "monitor", "search", or "check" a platform. Do NOT trigger for building apps, using official platform SDKs/APIs (like PRAW, tweepy, YouTube Data API), analyzing local files, or creating dashboards — only when the user needs to retrieve data directly from a social platform.
gleap
Gleap REST API integration for customer support analytics and ticket management. Use when the user asks to fetch support tickets, analyze customer support metrics, track team performance, measure response times, generate support reports, monitor ticket volume, check SLA compliance, analyze busiest hours, export team stats, or interact with Gleap data in any way. Trigger on: "gleap", "support tickets", "support metrics", "support report", "team performance", "response time", "time to close", "ticket analysis", "customer support", "support dashboard", "agent performance", "ticket volume", "SLA", "first response time", "reply time", "busiest hours", "ticket topics", "support trends". Also trigger when a user wants to build a support reporting pipeline, automate support analytics, or connect Gleap to other tools (Notion, Slack, etc.).
seo-geo-for-saas
Complete SEO + GEO (Generative Engine Optimization) system for SaaS companies wanting to rank on both Google and AI search engines (ChatGPT, Perplexity, Gemini, Claude). Use this skill whenever the user asks about SEO strategy, keyword research, content planning, writing SEO-optimized articles, auditing their search performance, creating a content calendar, analyzing competitors, or optimizing for AI search visibility. Trigger on: "seo", "keyword research", "content calendar", "rank on google", "search traffic", "write an article", "blog post", "serp", "backlinks", "competitor analysis", "content cluster", "seo audit", "geo optimization", "ai search", "search console", "organic traffic", "content strategy", "publish article", "seo setup", "ranking", "impressions", "ctr", "meta description", "schema markup", "faq schema". Also trigger when a user wants to set up their SaaS blog SEO from scratch, analyze their current rankings, or create a publishing workflow.