- Webflow: the page goes straight into a collection of your brand’s Webflow site as a draft item. You publish it in Webflow.
- WordPress: the page goes straight to your brand’s WordPress site as a draft post. You publish it in WordPress.
- Framer: the page goes straight into a CMS collection of your brand’s Framer project as a draft item. You publish it in Framer.
- Wix: the page goes straight to your brand’s Wix site’s Blog as a draft post. You publish it in Wix.
- Your workflow: the page goes to your brand’s webhook as a content package (the page ready to publish, its title, slug, meta title, meta description, author and featured image). Your workflow tool (n8n, Make, Zapier or your own endpoint) turns it into a post or page in your CMS, and decides whether it lands as a draft or goes live.
Connect Webflow
-
Get a site token in Webflow, as the Webflow card’s steps say:
- Go to Site settings › Apps & Integrations › API access and click Generate API token.
- Enter a token name (4–80 characters), for example “Ansvisor connector”.
- Under Permissions, set CMS to Read and write and Sites to Read-only. Leave everything else on No access.
- Click Generate token and copy the token. Webflow shows it only once.
- In Ansvisor, open Settings → Integrations with the brand selected, and paste the token in the Webflow card. It’s checked with Webflow and kept by our connector service. It’s never shown again, and Ansvisor’s database doesn’t hold it. Only admins and managers can connect Webflow, pick the collection, replace the token or disconnect; members see where the brand’s pages go.
-
Pick the collection your pages go to (your blog’s, for example), then which of its fields takes what:
The page’s title and slug always go to the item’s Name and Slug. Ansvisor suggests fields from their names (
post-body,post-summary,seo-title…); change them if they’re wrong, and Save. A collection that requires a field Ansvisor doesn’t fill can’t be saved: Save names the field. Make it optional in Webflow first. A page sent again keeps its item’s date; an item that has none (sent before you mapped a date field) gets the day it’s sent again. -
To use the JSON-LD field, add an Embed to the collection template that puts the field inside a
<script type="application/ld+json">tag.
Self-hosting: Webflow goes through Composio. Set
COMPOSIO_API_KEY and COMPOSIO_WEBFLOW_AUTH_CONFIG_ID (a Composio auth config of the Webflow toolkit with API-key auth) on the API server. Without them, the card says Webflow isn’t set up, and pages go to your workflow only.Connect WordPress
- In WordPress, sign in as the user pages should be written by. A separate user with the Author role is enough, since Ansvisor writes drafts only. Open Users → Profile, type a name under Application Passwords (
Ansvisor, for example) and click Add New Application Password. Copy the password WordPress shows: 24 letters and digits, in groups of four. It’s shown once. Application Passwords come with WordPress 5.6 and later. - In Ansvisor, open Settings → Integrations with the brand selected. In the WordPress card, enter the Site address, the User and the Application Password, and click Connect.
- Type the address as you visit the site.
https://is added, and/wp-adminor/wp-jsoncopied with it is taken off. A site in a folder (example.com/blog) keeps it. WordPress takes an Application Password over https only, and Ansvisor reaches the standard port only: anhttp://address, or one with a port, isn’t taken. - Paste the Application Password, not the user’s own password. Connect stays off for a password too short to be one.
- Type the address as you visit the site.
Each brand connects its own site. Change sign-in takes a new password, user or site address, and revokes the old Application Password where the site allows it. After a switch to another site, pages sent again make new posts there, and posts on the old site are no longer checked. Disconnect removes the sign-in, and revokes the Application Password where the site allows it (WordPress 5.7 and later); when it can’t, the toast says to delete it in WordPress under Users → Profile. Posts already sent stay in WordPress. If WordPress refuses the saved sign-in (the password revoked, or the user removed), the card says Sign-in refused and asks for a new password.
Self-hosting: WordPress sign-ins are encrypted with
CONNECTOR_CREDENTIALS_KEY on the API server, the same key as the product catalog’s store connections: 32 bytes in base64 (openssl rand -base64 32). Without it, the card says WordPress isn’t set up, and pages go to Webflow or your workflow only. Changing the key makes saved sign-ins unreadable until they’re entered again. The API server reaches the site over public https.Connect Framer
- In Framer, open the project’s Site Settings → General and make an API key. The key works as the user who makes it, so make it as a user who can edit the CMS, and copy it.
-
In Ansvisor, open Settings → Integrations with the brand selected. In the Framer card, paste the Project address as your browser shows it in Framer (
https://framer.com/projects/…), or the project’s id, and the API key, and click Connect. -
Pick the collection your pages go to, then which of its fields takes what:
Ansvisor suggests the fields: the title goes to the field the collection’s slugs are made from when it’s plain text, the page content to a formatted text field named like Content or Body, else the first one, and the rest by their names. Change them if they’re wrong, and Save. A required text field must take the title, page content, meta title or meta description (not JSON-LD), or Save stays off. Only the project’s own collections are listed: a plugin’s collections can’t be written to. A collection with a required field Send to CMS can’t fill (an image or a date, say), or with no plain text field for the title or no formatted text field for the page, is marked in the list and can’t be saved. Make that field optional in Framer, or add the missing one, first.
-
To use the JSON-LD field, put it inside a
<script type="application/ld+json">tag on the collection’s page in Framer.
Self-hosting: Framer’s API keys are encrypted with
CONNECTOR_CREDENTIALS_KEY, as WordPress sign-ins are. The API server needs Node.js 22 or later (the Docker image runs 24) and reaches Framer at wss://api.framer.com. Framer’s client prints its own warnings to the console; set FRAMER_API_LOG_LEVEL=silent to quiet it. Without CONNECTOR_CREDENTIALS_KEY, the card says Framer isn’t set up. Changing the key makes saved keys unreadable: the card says Key refused until a new one is entered.Connect Wix
- In Wix, the site’s owner makes an API key: open Account Settings → API Keys Manager, click Generate API Key, name it (
Ansvisor, for example), pick the site, give it the permissions below, and copy the key. It’s shown once.- Manage Blog (under Wix Blog): to write the draft posts.
- Manage Ricos Document (under Ricos): Wix’s converter, which turns the page into the post’s text.
- Read Members (under Members), only while the Blog has no post: to find a member to write the posts. Or write one post on the Blog first.
- The site’s id is the long code after
manage.wix.com/dashboard/in the address of the site’s dashboard. - In Ansvisor, open Settings → Integrations with the brand selected. In the Wix card, paste the Site id (or the whole dashboard address) and the API key, and click Connect.
Each brand connects its own site. Change API key takes a new key, or another site. Disconnect removes the key from Ansvisor. Wix has no way for Ansvisor to revoke a key, so delete it in the API Keys Manager too. Posts already sent stay in Wix. If Wix refuses the saved key, the card says API key refused and asks for a new one.
Self-hosting: Wix API keys are encrypted with
CONNECTOR_CREDENTIALS_KEY, as WordPress sign-ins are. Without it, the card says Wix isn’t set up. Changing the key makes saved keys unreadable: the card says API key refused until a new one is entered. The API server reaches Wix at https://www.wixapis.com.Set up your workflow
- Open Content → Opportunities → Webhook Settings.
- Enter your workflow’s webhook URL.
- Set a Secret key. Ansvisor sends it with every request, signs each page with it, and your workflow needs it to report where a page went live.
- Tick Content page sent. It is off by default, so a workflow built for opportunities doesn’t receive pages it doesn’t expect.
- Save.
Choose where pages go
Once the brand’s Webflow collection is ready, its WordPress site is connected, its Framer collection is ready or its Wix site is connected, the Send dialog offers them beside Your workflow: Webflow, WordPress, Framer, Wix, then your workflow. Your choice, and where you last sent, is remembered for the brand in your browser. With nothing remembered, or the one remembered no longer connected, the first one ready is picked. A CMS connected but not ready shows but can’t be picked, with what to fix, so a page doesn’t go to your workflow unnoticed. Webflow isn’t ready when its token is refused or no collection is picked; WordPress isn’t ready when its sign-in is refused; Framer isn’t ready when its key is refused or no collection and fields are picked; Wix isn’t ready when its key is refused. If you chose that CMS before, the page goes to your workflow, never to another CMS. If the dialog can’t check Webflow, WordPress, Framer or Wix just then, it leaves that one out. If you chose it before, the page goes to your workflow and the dialog says so, with Try again.Send one page
- From the editor: click the paper-plane icon in the header. Before you publish opens first only when it has something to ask about: Trust under 60, something missing (an author, placeholders, alt text, broken links) or checks still being read. Check it and click Continue to send. Its JSON-LD is folded away here; Show the JSON-LD opens it for a CMS that doesn’t add one.
- From the Library: open a row’s … menu and pick Send to CMS.
The slug and meta you send are kept on the draft, so the next send starts from them.
To Webflow, the page becomes a draft item in the collection. Sending it again updates the same item (a new one is made if it was deleted in Webflow, or after you switch collections); a live item’s changes wait for your next publish in Webflow. The item’s slug is the page’s slug in the form Webflow takes: lowercase letters, digits,
- and _, with accents dropped and dots turned into -, so the live address can differ slightly from the slug in the dialog. Webflow’s rich text has no tables and Ansvisor doesn’t upload images yet, so:
- a table goes as a list, one item a row (“Header: cell · …”);
- images aren’t sent: add them in Webflow;
- a meta description left empty goes as the page’s opening words.
/{collection}/{slug} on the custom domain the site was last published to, or on its webflow.io address when it has none. Ansvisor checks when you open the Library and once a day, for sends from the last 60 days. A page published in Webflow later than that stays “In Webflow as a draft item”; sending it again starts the check over. A page sent again stays sent until Webflow publishes it again, and a page whose item you deleted in Webflow reads “Removed in Webflow”; send it again to make a new item.
To WordPress, the page becomes a draft post on the site, written by the connected user: the title, the slug, the page as its content, and the meta description as its excerpt.
- The meta title isn’t sent. Set it in your SEO plugin (Yoast, Rank Math…).
- JSON-LD is left out: WordPress keeps a
<script>only for users allowed unfiltered HTML, and shows the others’ as text in the post. Add schema with your SEO plugin. - Tables go as tables. Images keep their addresses: Ansvisor doesn’t upload them to your Media Library.
- No featured image or category is set: pick them in WordPress.
- WordPress may adjust the slug: lowercase, accents dropped and dots turned into
-. If another post has it when the post is published, WordPress adds-2(or the next free number).
-2. A post in the trash, or deleted, gets a new one.
The toast says whether the draft post was made or updated, whether the post was already published or scheduled, and when JSON-LD was left out.
Once you publish the post in WordPress, the page becomes Published at the post’s address. Ansvisor checks when you open the Library and once a day, for sends from the last 60 days. A post published later than that stays “In WordPress as a draft post”; sending the page again then makes a new draft post, as for a published one. A post moved to the trash or deleted reads “Removed in WordPress”; send the page again to make a new post. A site that stops answering as WordPress (moved, or its permalinks set to Plain) closes nothing.
To Framer, the page becomes a draft item in the collection, so it stays off the site until you publish it in Framer: the title, the slug, the page as formatted text, and the meta title, meta description and JSON-LD in the fields you picked.
- Tables go as tables. Images aren’t sent yet: add them in Framer.
- A meta description left empty goes as the page’s opening words. A JSON-LD field is emptied when the page has none.
- The item’s slug is the page’s slug with lowercase letters, digits and
-: accents are dropped, and dots and_turned into-, so the live address can differ slightly from the slug in the dialog. - Another item in the collection with the same slug stops the send: change the page’s slug, or that item’s. If the page has no item there yet and that item is a draft with the page’s title, it’s taken as the page’s own (a send cut off before it finished) and updated.
/blog/{slug}, for example). Ansvisor checks when you open the Library and once a day, for sends from the last 60 days. An item changed in Framer after the site’s last publish waits for the next one, and a page sent again stays sent until the site is published again. An item published later than 60 days stays “In Framer as a draft item”; sending the page again starts the check over. A collection with no page in Framer gives its items no address, so they don’t become Published. A page whose item you deleted in Framer reads “Removed in Framer”; send it again to make a new item.
To Wix, the page becomes a draft post on the site’s Blog, written by the connected member: the title, the slug, the page as the post’s text, the meta description as its excerpt, and the meta title, meta description and JSON-LD as the post’s SEO settings.
- Images aren’t sent: Wix shows only images in its Media Manager. Add them in Wix; the toast says how many stayed out.
- Wix turns the page into its own rich text: headings, lists, links, tables and code go as they are.
- No cover image or category is set: pick them in Wix.
- a placeholder such as
[figure, source]is still open: Fill now selects the first one, in the page or, when it’s in an image’s alt text, the JSON-LD or an HTML block, in the HTML view. The editor’s toolbar counts those left and steps through them; - the page has no title, or nothing under its title;
- the slug can’t be used.
Send several pages
In the Library, tick the rows to send (up to 25 at once) and click Send to CMS in the bar above the table. The dialog lists each page as Ready, or says why it can’t go. A page that can’t go is left out; fix it in the editor. Each page goes with the slug and meta of its last send, or the page’s own. The pages are sent one after another in the background, with a short pause between them so your CMS isn’t flooded. The dialog follows them and says how many went, and you can close it at any time: the Library keeps following them. Very long pages go in more than one request, each once the one before has gone; closing the dialog while one waits stops the rest, and it says how many didn’t go. A workspace can send 200 pages in 24 hours, to Webflow, WordPress, Framer, Wix and your workflow together. A page already on its way to Webflow, WordPress, Framer or Wix can’t be sent there again until it has gone. To WordPress, a page whose post is published or scheduled goes as a new draft post, as for one page. To Framer, a page whose item isn’t a draft is updated there, and the change goes live with your next publish of the site. To Wix, a page whose post is published updates the post’s draft version, as for one page.See how a send went
Beside each row’s status, the Library shows its last send:
To list only some of them, use the Last send filter beside Created: Never sent, Sending, Sent, Failed or Published. It shows once a page of the brand has been sent. The filter is kept in the page’s address (for example
?sent=failed), and Export exports the rows it lists.
Build the workflow
Every workflow has the same three steps:-
Receive the
content_draft.sentpackage with a webhook trigger. Check theX-Webhook-Secretheader, or theX-Ansvisor-Signatureheader, against your secret. -
Create the post in your CMS from
page, for example:Create it as a draft if someone should review it in the CMS first. Whenpage.methodisoptimize, the page was made from the live page atpage.sourceUrl: update that post instead of creating a new one. -
Report how it went: when the post is published, send
POSTto the package’scallback_urlwith{ "status": "published", "url": "https://www.example.com/blog/pour-over" }and your secret in theX-Webhook-Secretheader. If your CMS refused it, send{ "status": "failed", "reason": "…" }instead. If the post is published later, run this step from your CMS’s “post published” trigger. Keep the package’sdelivery.id, or thecallback_urlitself, with the post so the trigger can find it.