Use Framer with Retool through a design-to-code bridge workflow: extract interaction patterns and visual language from Framer prototypes to guide your Retool app layout, replicate transitions using Retool Custom Components, and connect to Framer's CMS API via REST Resource to manage Framer site content from a Retool admin dashboard.
| Fact | Value |
|---|---|
| Tool | Framer |
| Category | Design |
| Method | Design-to-Code Bridge |
| Difficulty | Intermediate |
| Time required | 30 minutes |
| Last updated | April 2026 |
Bridge Framer Prototypes and Retool Internal Tools
Framer occupies a unique position in the design toolchain — it is both a high-fidelity prototype tool and a production website builder with a built-in CMS. Teams often use Framer to design and prototype user-facing experiences before building them, and then manage the published Framer site content through an operations workflow. Retool can serve two roles in this ecosystem: as a recipient of Framer's design thinking, and as an admin panel for Framer's CMS.
When using Framer as a design source, the workflow is one-directional: product designers prototype interactions in Framer, stakeholders approve the UX, and Retool developers then use those prototypes as blueprints when building internal tool interfaces. The interaction patterns, component hierarchy, and visual language of a Framer prototype can directly inform how you organize Retool Tables, Modals, and Charts. For animated transitions that appear in the Framer prototype, Retool Custom Components (React-based) can replicate similar visual behaviors within the constraints of Retool's platform.
For teams that publish marketing sites, documentation, or landing pages on Framer, the second integration path is operationally valuable: Framer exposes a REST API for its CMS that allows creating and updating collection items programmatically. A Retool admin panel connected to Framer's CMS API lets content editors, marketers, or operations teams manage Framer site content with a more powerful interface than Framer's native CMS editor — adding bulk operations, approval workflows, and data validation that Framer's editor does not natively support.
Integration method
Framer and Retool serve fundamentally different purposes — Framer excels at interactive prototyping and published marketing sites, while Retool is optimized for internal tools and data-driven dashboards. The integration works in two directions: Framer prototypes inform the UX design of your Retool apps (interaction patterns, layout decisions, component hierarchy), and Framer's REST API allows you to manage Framer CMS content directly from a Retool admin panel. There is no direct visual sync between the two tools — the bridge is a workflow and an API connection.
Prerequisites
- A Framer account with a published site that uses Framer CMS (required for the API integration path)
- A Framer API key from your Framer account settings
- Your Framer site ID (visible in the Framer dashboard URL or API documentation)
- A Retool account with permission to create Resources and Custom Components
- Basic familiarity with React if you plan to build Custom Components that replicate Framer animations
Step-by-step guide
Extract interaction patterns from your Framer prototype
Before opening Retool, spend time in Framer documenting the design patterns from your prototype that you want to replicate in the internal tool. Open your Framer project and review each interactive screen. Note the following for each major UI section: what component type is being used (list, form, modal, tabs), what triggers interactions (button clicks, row selections, dropdown changes), and what visual feedback is provided (loading states, success animations, error states). Create a simple mapping document or spreadsheet with two columns: 'Framer Pattern' and 'Retool Equivalent'. Common mappings include: Framer Stack → Retool Container, Framer List → Retool Table component, Framer Overlay → Retool Modal, Framer Inputs → Retool Form, Framer Badge → Retool Tag component, Framer Link → Retool Button with link action. Pay special attention to multi-step flows (like wizards or onboarding flows) — these often require Retool's Tab component or Custom Components to replicate faithfully. Document any patterns that have no direct Retool equivalent (complex animations, drag-and-drop reordering, canvas-based interactions) and plan these as Custom Components from the start. This documentation step saves hours of rework when building the Retool app, especially for complex internal tools where stakeholders approved a specific UX in Framer.
Pro tip: Export Framer prototype screens as annotated PDFs (Framer supports PDF export from the Share menu) and share them with your Retool development team as the design specification. Include interaction notes using Framer's annotation tools before exporting.
Expected result: A component mapping document that pairs each Framer design element with its Retool equivalent, flagging any elements that require Custom Components.
Obtain a Framer API key and locate your site ID
To connect Retool to Framer's CMS API, you need an API key and your site's CMS base URL. Log in to Framer at app.framer.com and navigate to your workspace settings. Click on your avatar or workspace name in the top left, then select Settings. Look for the API section — Framer provides API keys per workspace for CMS access. Click Generate API Key and copy the key immediately (it is shown only once). Store it securely in a password manager. Next, identify your Framer site ID. When you have a Framer site open, the URL in your browser will contain a format like app.framer.com/projects/YOUR_SITE_ID. Alternatively, the Framer CMS API documentation specifies that the base URL for CMS operations is https://api.framer.com/store/api/v1/sites/{siteId}/collections. You can find your site ID by making a test API call to GET https://api.framer.com/store/api/v1/sites with your Bearer token — this returns all sites in your workspace with their IDs. Make note of both the API key and the site ID for the Resource configuration in the next step.
Pro tip: Framer's API is specifically for the Framer CMS (content management) — it is not an API for the Framer design canvas or prototype interactions. If you only use Framer for prototyping (not as a CMS-powered site), skip Steps 2-4 and focus on the design-to-Retool workflow in Step 1.
Expected result: You have a Framer API key copied and know your site ID, ready to configure the REST API Resource in Retool.
Configure the Framer CMS REST API Resource in Retool
In Retool, navigate to the Resources tab in the left sidebar and click Add Resource. Select REST API from the resource type list. Name the resource 'Framer CMS API'. In the Base URL field, enter https://api.framer.com/store/api/v1. Scroll to the Authentication section and select Bearer Token from the dropdown. In the Token field, enter your Framer API key. This configures every query made through this resource to include an Authorization: Bearer YOUR_API_KEY header automatically. Add a default header: key Accept, value application/json. Click Save Changes and test the connection by using the Test button if available, or by creating a test query in a Retool app. To test, create a GET query to the path /sites — if the response returns your Framer workspace sites, the connection is working correctly. Once you have confirmed connectivity, note your site ID from the test response and store it as a Retool Configuration Variable (Settings → Configuration Variables) named FRAMER_SITE_ID so you can reference it in queries as {{ retoolContext.configVars.FRAMER_SITE_ID }} without hard-coding it.
Pro tip: Create the Framer site ID as a Configuration Variable rather than hard-coding it in query paths. This allows you to switch between Framer staging and production sites by changing a single variable.
Expected result: A Framer CMS API resource is saved in Retool and test queries return your Framer site data successfully.
Build a Framer CMS content management dashboard
Create a new Retool app and build the CMS management interface. First, create a query named 'getCollections' — set Method to GET, Path to /sites/{{ retoolContext.configVars.FRAMER_SITE_ID }}/collections. This returns all CMS collections in your Framer site (e.g., Blog Posts, Team Members, Products). Add a Select component to your canvas named 'collectionSelect' and set its options to {{ getCollections.data?.collections?.map(c => ({ label: c.name, value: c.id })) || [] }}. Next, create a query named 'getCollectionItems' — set Method to GET, Path to /sites/{{ retoolContext.configVars.FRAMER_SITE_ID }}/collections/{{ collectionSelect.value }}/items, and set it to trigger when collectionSelect changes. Drag a Table component onto the canvas, set its Data to {{ getCollectionItems.data?.items || [] }}. For creating new CMS items, add a Modal component to the canvas. Inside the modal, add a Form with Text Input fields corresponding to the CMS collection fields (these vary by collection). Create a query named 'createItem' — set Method to POST, Path to /sites/{{ retoolContext.configVars.FRAMER_SITE_ID }}/collections/{{ collectionSelect.value }}/items, Body Type to JSON. Set the Body to a dynamic object built from the Form inputs. In the query's On Success handler, trigger 'getCollectionItems' to refresh the table and close the modal.
1// Transformer: reshape Framer CMS items for Retool Table display2const items = data?.items || [];3return items.map(item => {4 const fields = item.fieldData || {};5 return {6 id: item.id,7 name: fields.name || fields.title || item.id,8 slug: fields.slug || '',9 published: item.isArchived ? 'Draft' : 'Published',10 created_at: item.createdAt11 ? new Date(item.createdAt).toLocaleDateString()12 : 'N/A',13 updated_at: item.lastPublished14 ? new Date(item.lastPublished).toLocaleDateString()15 : 'N/A'16 };17});Pro tip: Framer CMS field names in the API response are nested under 'fieldData' with keys matching the CMS field slugs. Inspect a single item response first to understand your collection's specific field structure before building the transformer.
Expected result: A Framer CMS management panel shows all collections in a Select dropdown, loads collection items into a Table, and provides a Modal Form for creating new items.
Replicate Framer interaction patterns in Retool Custom Components
For visual interactions that exist in your Framer prototype but have no direct Retool equivalent — animated transitions, custom hover states, drag-and-drop reordering — Retool Custom Components allow you to embed React code directly in your app. In the Retool editor, drag a Custom Component from the component panel onto your canvas. Click the component to open its configuration, then click 'Open in Code Editor' to access the Custom Component IDE. Custom Components in Retool use the @retool-ui/components package and can receive and send model data to the parent Retool app. For a simple animated card transition (common in Framer prototypes), write a React component that uses CSS transitions. For a progress stepper that mimics a Framer onboarding flow, use React state to manage the current step and animate transitions between steps. Keep Custom Components focused on visual presentation — data fetching should still happen through Retool's standard queries, with results passed into the Custom Component via its model properties. Reference the component's data from the parent app using {{ customComponent1.model.data }} and dispatch events back using modelUpdate. Note that Custom Components require a Business or Enterprise Retool plan.
1// Custom Component: Animated Status Badge (matches Framer prototype styling)2import React from 'react';34const STATUS_COLORS = {5 published: { bg: '#d1fae5', text: '#065f46' },6 draft: { bg: '#fef3c7', text: '#92400e' },7 archived: { bg: '#f3f4f6', text: '#374151' }8};910export default function StatusBadge({ model }) {11 const status = (model.status || 'draft').toLowerCase();12 const colors = STATUS_COLORS[status] || STATUS_COLORS.draft;1314 return (15 <span style={{16 padding: '4px 10px',17 borderRadius: '9999px',18 fontSize: '12px',19 fontWeight: 500,20 backgroundColor: colors.bg,21 color: colors.text,22 transition: 'all 0.2s ease'23 }}>24 {status.charAt(0).toUpperCase() + status.slice(1)}25 </span>26 );27}Pro tip: Before building Custom Components, check if Retool's native components — especially Table column types (tags, links, badges) and the rich formatting options in Text components — can already replicate the Framer visual you need. Custom Components add maintenance overhead.
Expected result: Custom Components in the Retool app provide visual polish that matches the interaction language established in the Framer prototype, with animations and styled elements consistent with the approved design.
Common use cases
Build a Framer CMS content management panel in Retool
Create a Retool admin panel that connects to your Framer site's CMS API to manage blog posts, product pages, or team member profiles. Content editors can create new CMS items, update existing ones, and trigger site republishing — all without needing access to Framer itself. Bulk operations allow updating multiple items simultaneously.
Build a Retool panel for managing Framer CMS items. Show a Table of existing blog posts from the Framer CMS API with title, published date, and status. Include a Form for creating new posts, and buttons to update or delete existing entries.
Copy this prompt to try it in Retool
Use a Framer prototype to design a Retool ops dashboard layout
Design the UX of a complex multi-step internal tool in Framer first — prototype the user flow, component interactions, and modal sequences — then use the approved Framer prototype as a specification document when building the Retool app. Map each Framer component to its closest Retool equivalent and document any gaps that require Custom Components.
Reference the Framer prototype at [URL] for the order fulfillment dashboard. Build the equivalent Retool app with the same three-panel layout: order list on left, order details in center, and action buttons on right, matching the interaction patterns from the prototype.
Copy this prompt to try it in Retool
Build a Retool panel to manage Framer site publishing
Create an operations dashboard that shows all Framer CMS collections, their item counts, last-updated timestamps, and publishing status. Include the ability to manage content across multiple Framer sites from a single Retool interface, with filters for draft vs. published items and approval workflow integration.
Build a Retool dashboard that lists all Framer CMS collections via API, shows item counts and last-modified dates, and lets operators create, update, and manage CMS items with a Form and Table combination.
Copy this prompt to try it in Retool
Troubleshooting
Framer API returns 401 Unauthorized when testing the resource connection
Cause: The Framer CMS API key may have been entered incorrectly, expired, or the wrong authentication method is selected. Framer API keys use Bearer Token authentication, not Basic Auth or API key header.
Solution: In the Retool Resource settings, confirm the Authentication type is set to 'Bearer Token' (not Basic Auth or a custom header). Verify the token value does not contain extra whitespace or newline characters — regenerate it in Framer Settings → API if unsure. Framer API keys do not expire, so a 401 typically means the key value is incorrect.
Framer CMS items return but fieldData is empty or missing expected fields
Cause: Framer CMS field names in the API are based on the field slugs defined in the CMS collection, not the display names. A field called 'Blog Title' in the Framer editor might have slug 'blog-title' and appear as fieldData['blog-title'] in the API response.
Solution: Fetch a single item and log its complete fieldData object to see the exact key names. Use the raw query result panel in Retool's query editor to inspect the response. Update your transformer to use the correct slug-based field keys. If fields are entirely missing, verify the items have been published in Framer — draft items may not expose all fields.
1// Log field keys to debug2const item = data?.items?.[0];3if (item) {4 console.log('Available field keys:', Object.keys(item.fieldData || {}));5}6return data?.items || [];Custom Component does not receive model data from the parent Retool app
Cause: Custom Components require the model to be explicitly defined in the component's Model tab in the Custom Component IDE. If the model properties are not defined, data passed from the parent app is not available inside the component.
Solution: In the Custom Component IDE, click the 'Model' tab and define each property your component expects — set the property name, type, and default value. In the parent app, set the Custom Component's model properties to the values you want to pass (e.g., set 'status' to {{ table1.selectedRow.status }}). The component then accesses these via the model prop.
Best practices
- Create a Framer-to-Retool component mapping document before building the Retool app — this prevents UX inconsistencies and aligns stakeholder expectations set during Framer prototyping
- Store the Framer API key and site ID as Retool Configuration Variables rather than hard-coding them in resources or queries — this enables environment-specific configuration for staging vs. production sites
- Use Framer CMS collections with consistent, descriptive field slugs (not auto-generated IDs) to make the API response easier to work with in Retool transformers
- Leverage Retool's native Table column types (tags, links, status badges) to replicate Framer visual patterns before resorting to Custom Components — native components are maintained by Retool and require no custom code
- For Framer CMS management, build a dedicated Retool app for content editors with simplified forms rather than exposing the full API — hide technical fields like IDs and use Select components to constrain input options
- Document which Framer interactions are intentionally not replicated in the Retool tool (marketing animations, consumer-facing polish) versus which represent functional requirements that must be implemented
- Test Framer API connections in Retool's query editor before building the full UI — verify the response structure matches your transformer expectations with real data
Alternatives
Figma is a better design source for Retool if your team uses static design handoffs and component libraries rather than interactive prototypes, as Figma's design tokens map more directly to Retool's style system.
Sketch is an alternative for macOS-based design teams that prefer local file-based design workflows over Framer's browser-based prototyping approach.
Adobe XD works well as a Retool design source for teams already in the Adobe Creative Cloud ecosystem who want tight integration with Illustrator and Photoshop assets.
Frequently asked questions
Can Retool directly import or sync with Framer design files?
No, there is no direct import or sync between Framer and Retool. The integration is a workflow bridge: Framer prototypes serve as design specifications that Retool developers reference when building apps, and Framer's CMS API provides programmatic content management. There is no automated way to convert a Framer prototype into a Retool app.
Does Framer's API provide access to the design canvas or prototype interactions?
No. Framer's publicly available REST API is specifically for the Framer CMS — it allows creating, reading, updating, and deleting CMS collection items on Framer-published sites. It does not expose the design canvas, components, prototype interactions, or animation configurations. If you need programmatic access to Framer design files, use the Framer API in combination with Framer's export features.
What is the best way to replicate Framer's smooth animations in a Retool app?
Retool Custom Components are the primary path for replicating complex animations. Custom Components are React-based and can use CSS transitions, React Spring, or Framer Motion (the animation library, separate from Framer the design tool). For simpler transitions like loading states and status changes, Retool's native components include built-in animation options in the component styling panel — check the Appearance section for transition settings.
Can I use Retool as an admin panel for a Framer-built website?
Yes, and this is one of the most practical use cases for the Framer-Retool integration. Use the Framer CMS API via a REST API Resource in Retool to create a full CRUD admin panel for managing Framer site content. Content editors can use the Retool interface to manage posts, products, or any other CMS collection without needing Framer access. Combine this with approval workflows or scheduled publishing logic using Retool Workflows.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation