The Embeddables Platform
Compliance & Security
Are you HIPAA compliant?
Are you HIPAA compliant?
Are you SOC2 compliant?
Are you SOC2 compliant?
Do you sign BAAs (Business Associate Agreements)?
Do you sign BAAs (Business Associate Agreements)?
Data Processing & Privacy
Do you process or store personal data?
Do you process or store personal data?
Do you provide DPAs (Data Processing Agreements)?
Do you provide DPAs (Data Processing Agreements)?
Do you conduct DPIAs (Data Protection Impact Assessments)?
Do you conduct DPIAs (Data Protection Impact Assessments)?
Infrastructure & Hosting
Where is your code/platform hosted?
Where is your code/platform hosted?
- Cloudflare
- Vercel
- Heroku
- Supabase
- Firebase
- Clickhouse
Are Embeddables embedded using iframes?
Are Embeddables embedded using iframes?
- Better performance and faster load times
- Seamless integration with your page’s styling
- No cross-origin restrictions
- Better SEO as content is part of your page
- Easier data passing between your site and the Embeddable
- Better support for Stripe payments, since Stripe uses its own iframes (avoiding nested iframes)
Building with Embeddables
Troubleshooting
Builder not loading or stuck in infinite loop
Builder not loading or stuck in infinite loop
health_conditions_options, rename your Computed Field to something like health_conditions_options_cf (adding a suffix like _cf for “Computed Field”).Logic
How do I find where a User Data key is being created/updated?
How do I find where a User Data key is being created/updated?
- Open the Builder for your Embeddable
- Press ESC to deselect any components (so nothing is selected)
- In the Options sidebar, click the three dots menu (⋮) in the top right corner
- Click “Edit JSON” to open the JSON editor modal
- Use the search inside the code editor box (Cmd+F or Ctrl+F with the code editor in focus) to search for the key name within the JSON
- Input fields and form components that create the key
- Actions that update the key
- Computed Fields that are set with their key as the key you’re looking for, or that reference the key
- Conditions that use the key
Design, Styling, and Layouts
How do I place components side by side?
How do I place components side by side?
- Add a container to the page if it does not already exist.
- For each component that you want to align horizontally, move it into the container.
- Select the container, and in the Designer sidebar, set the
display property to flex. - Ensure the
flex direction is set to row(this is usually the default).
How do I edit styles for specific screen sizes?
How do I edit styles for specific screen sizes?
- Select the component you want to style.
- In the Designer sidebar, look for the “On” dropdown.
- Choose the specific screen size you want to style for:
- Mobile: up to 520px width
- Tablet: 521px to 720px width
- Desktop: 721px width and above
- Apply your styles while that screen size is selected - this will set the styles for only that screen size and smaller screen sizes.
What do the device screen type options (Desktop/Mobile/Tablet) do?
What do the device screen type options (Desktop/Mobile/Tablet) do?
- Mobile: Shows layout for devices with width up to 520px.
- Tablet: Shows layout for devices with width between 521px and 720px.
- Desktop: Shows layout for devices with width of 721px and above.
Why do my desktop styles affect mobile too?
Why do my desktop styles affect mobile too?
- Desktop styles (721px+) apply to desktop, tablet, and mobile
- Tablet styles (521px-720px) apply to tablet and mobile
- Mobile styles (up to 520px) apply only to mobile
- Select the component that has unwanted styles on mobile
- Switch to Mobile view using the “On” dropdown in the Designer sidebar
- Override the problematic styles by setting different values for mobile
- Desktop: width = 300px
- Mobile: width = 100%
Why does my Embeddable look different on my website than in the preview?
Why does my Embeddable look different on my website than in the preview?
- Global CSS styles on your page are overriding the Embeddable’s styles
- Margin or padding applied to elements inside the Embeddable (e.g., body margins preventing edge-to-edge display)
- Font styles or other inherited CSS properties from your page
- CSS reset or normalize stylesheets affecting the Embeddable’s layout
- Inspect the Embeddable on your website using browser developer tools (right-click → Inspect)
- Look for conflicting styles that are being applied from your website’s CSS
- Override the conflicting styles by adding more specific CSS rules to your page:
- Test the changes to ensure the Embeddable displays correctly
Form Elements
How do I reference multiple form elements in Computed Fields?
How do I reference multiple form elements in Computed Fields?
How do I add a phone number input field?
How do I add a phone number input field?
- Add a regular Input component.
- In the Options tab, set the
Input TypetoPhone.
- Under the
Validationsection, checkValidate value. - Set
FormulatoPhone Number (US)orCustom formula. - If you choose
Phone Number (US), the phone number will be automatically formatted as(xxx) xxx-xxxx. - If you choose
Custom formula, you can use the something like the following formula to validate the phone number:
Can I prevent users from entering text in a phone input field?
Can I prevent users from entering text in a phone input field?
Option 1: Use the built-in US phone validation (Recommended)
The simplest and most reliable approach is to use the built-in phone validation:- Set the Input component’s
Input TypetoPhone - In the Validation section, check
Validate value - Set the Formula to
Phone Number (US)
- Formats the number as
(xxx) xxx-xxxxas the user types - Validates the format is correct
- Provides a consistent user experience
- Handles edge cases and formatting automatically
Option 2: Custom validation with regex
For more control over the validation rules, you can use a custom formula:- Set the Input component’s
Input TypetoPhone - In the Validation section, check
Validate value - Set the Formula to
Custom formula - Write a custom function to validate the phone number, for example:
Option 3: Remove disallowed characters immediately on type, using a custom action
Create an action that runs on page load to restrict input to numeric characters only:Does the phone input automatically format numbers?
Does the phone input automatically format numbers?
Phone, and choose Phone Number (US) for validation, it automatically formats the number as (xxx) xxx-xxxx as the user types.This provides a better user experience and ensures consistent formatting across all submissions.Versions & Publishing
If I edit an old version, do those edits become the newest version?
If I edit an old version, do those edits become the newest version?
How do I roll back to a previous version?
How do I roll back to a previous version?
- Open the Version Control card in the Builder sidebar.
- Find the version you want to roll back to in the version history list.
- Click on that version to load it in the Builder.
- Make a small edit (the Save button won’t be active until you make a change).
- Click Save - this creates a new version based on the old one.
Where can I see the audit trail of staging and production deployments?
Where can I see the audit trail of staging and production deployments?
- Click on Version Control in the top bar of the Builder.
- Go to the Logs tab.
- This shows an audit trail of staging and production deployments.
How do I compare changes between two versions?
How do I compare changes between two versions?
- Open Version Control in the Builder Top Bar.
- Click the
<>icon (compare icon) in Version Control. - Select the two versions you want to compare.
Data & Analytics
How do I find my funnel submissions data?
How do I find my funnel submissions data?
- Users page
- Shows individual user sessions.
- You can click on a user to see their activity and their submission data for each Embeddable.
- Embeddable —> Submissions tab
- Shows the User Data for completed form submissions.
- Each user will have a separate row for each Embeddable they have interacted with, meaning there could be multiple rows for the same user.
- All users from all stages of the funnel are included, so the majority of rows will likely correspond to users who did not reach the end of the funnel.
How do I access production data vs. test data?
How do I access production data vs. test data?
- Go to your funnel dashboard.
- Look for the “Data collected in production version” button.
- Click it to toggle between:
- Production data only
- All data (including both production and test data)
How do I capture UTM parameters and campaign IDs from incoming links?
How do I capture UTM parameters and campaign IDs from incoming links?
- In the Builder, select nothing (press ESC) to see the Options tab for the Entire Embeddable settings.
- Go to the Options tab and find the URL Keys section.
- Add the UTM parameters you want to capture (e.g.,
utm_source,utm_campaign,utm_medium) - add one on each line. - These values will automatically be stored in UserData when users visit your page.
Why can't I see user details or search by email address?
Why can't I see user details or search by email address?
- Your workspace has HIPAA Compliance enabled, which restricts access to personally identifiable information (PII) and protected health information (PHI).
- Your account has Anonymized Data Access, which means you can only view anonymized data—personally identifiable information about end-users is hidden.
- Email addresses are classified as contact information and PII, so they are not visible to users with Anonymized Data Access.
- Going to Settings → Team tab
- Finding your user in the table
- Changing your Data Access Level to Full Data Access
CLI
Do I need to install the CLI in my project as well as globally?
Do I need to install the CLI in my project as well as globally?
npm install -g @embeddables/cli. Your project only needs the files created by embeddables init (including .types/ for editor support). You do not add @embeddables/cli as a dependency in package.json for normal use.Where is my login stored?
Where is my login stored?
embeddables logout to clear it.Can I use the CLI without ever using the Builder?
Can I use the CLI without ever using the Builder?
What is the difference between id and key on components?
What is the difference between id and key on components?
id is the stable internal identifier (e.g. comp_12345). key is used in React and for targeting (e.g. in conditions or user data). Keys must not start with a number; use a prefix like option_ or range_ if the label would otherwise slug to a number.Can I have multiple Embeddables in one project?
Can I have multiple Embeddables in one project?
embeddables pull for each; they live in embeddables/<embeddable-id>/. When you run embeddables dev, embeddables save, or embeddables branch without -i, you’ll be prompted to choose which Embeddable to use. To avoid the prompt, go into that Embeddable’s folder (e.g. cd embeddables/<EMBEDDABLE_ID>) and run the command from there—the CLI will automatically use that Embeddable.First pull changes the JSON too much. How can I reduce noise?
First pull changes the JSON too much. How can I reduce noise?
embeddables pull —preserve. It keeps the same order of components in the config. Most of the “changes” you see on a first pull are from React reordering components within containers—that doesn’t affect how the Embeddable renders. With —preserve, you may still see smaller changes (e.g. parent_key fixes), but it’s easier to verify what actually changed.How do I point the dev server at a local Engine?
How do I point the dev server at a local Engine?
embeddables dev --local to use http://localhost:8787. Or use embeddables dev --engine https://your-engine.example.com for a custom URL.What is the Workbench and how do I open it?
What is the Workbench and how do I open it?
embeddables dev, it is shown by default; add ?workbench=false to hide it. On non-localhost preview links, add ?workbench=true to show it. It is served by the dev proxy and does not require a separate deploy.Does the CLI work with Cursor / Claude / Codex?
Does the CLI work with Cursor / Claude / Codex?
embeddables init injects Cursor rules (.cursor/rules/), Claude project context (.claude/), and a Codex-compatible AGENTS.md file so the assistant understands the file layout, component types, and conventions. You can also use the built-in prompts from the CLI repo in your own rules.How do I get the latest CLI version?
How do I get the latest CLI version?
embeddables upgrade. You can check the current version with embeddables -v.Can I create a new branch or experiment from the CLI?
Can I create a new branch or experiment from the CLI?
embeddables branches create and switch between them with embeddables branch. Creating experiments is still done in the Builder; use embeddables experiments connect to link an existing experiment to your Embeddable.Why does save say the server has a newer version?
Why does save say the server has a newer version?
embeddables pull and then re-apply your changes, or force-save when the prompt offers it (use with care to avoid overwriting others’ work).What are global components and where do they live?
What are global components and where do they live?
embeddables/<id>/global-components/ with one file per location, e.g. before_page.location.tsx, after_components.location.tsx. The _location value controls where they render relative to the page.Should I use Git or version control for my Embeddable project? How do I compare changes?
Should I use Git or version control for my Embeddable project? How do I compare changes?
embeddables diff to compare your local files against the last saved cloud version:embeddable.json and the latest embeddable-<branch>@<version>.json (e.g. embeddable-main@47.json) inside the .generated/ folder. In VS Code or Cursor: Shift+click or Command/Ctrl+Click to select both files, then right-click → Compare Selected.
