Dynamically control which clients can access an app.
With custom visibility for apps, you can dynamically control which clients have access to an app. This lets you provide differentiated levels of service to clients. For example, you might only allow clients with the custom field plan = premium to schedule time with you (access to the Calendly app) and message you (access to the Messages app).Custom visibility works the same way for every app in your portal — Classic apps like Messages and Files, apps you build with the app builder, and embeds. It controls client access only. Whether an app appears in your own team’s sidebar is a separate setting on the app itself.You can configure which clients can see an app by selecting clients and companies directly, or you can use custom field rules.Since custom fields are supported on Zapier, Make, and our API, you can change custom app visibility via automations. For example, you could set up a workflow in Zapier where the custom field plan is updated from standard to premium only after a particular contract is signed.
There are two routes to the same setting.From the App Library, any time:
Click App Library in the sidebar, click the menu button (…) next to the app you want to set visibility rules for, then click Edit to access the app’s settings page.
Scroll to the bottom of the app’s settings page and click Edit under App Visibility.
Before publishing an app you built:
Click Publish in the top right of the app builder.
Click Edit in the popover to open the icon, title, and visibility controls.
Either way you get the same three choices: Visible to all people, Hidden from all people, or Custom visibility. See Launching apps for the publish flow.
If you select Custom visibility, you can configure granular controls for which clients can access the app.The Show if dropdown displays Contacts, Companies, and a list of your contact and company custom fields.
Only contact and company Tags custom fields are configurable for custom visibility rules. Other custom field types will not be displayed here.
Rule type
Configuration
Clients
Select which individual clients will have access to the app.
Companies
Select which companies will have access to the app. All clients who belong to the included companies will be able to access the app.
Custom fields
For any Tag-type contact or company custom field, you can grant access to the app based on three conditions. See the table below for details.
Custom field condition
Details
Includes (Includes any of)
Grants access to the app if the client has a specific tag or tags. If multiple tags are selected, this property changes to Includes any of, and any client with any selected tag will have access to the app.
Is not (Doesn’t include any of)
Grants access to the app if the client does not have a specific tag or tags. If multiple tags are selected, this property changes to Doesn’t include any of, and any client with any selected tag will not have access to the app.
Includes all of
Grants access to the app only if the client has all of the selected tags.
You can add additional OR rules for custom visibility, which allows for additional configuration.For example, you can set up a rule where a Tags field includes “Tier 1” or a Company includes “Company A”. This grants access to all clients with the “Tier 1” tag, as well as all clients belonging to “Company A”, regardless of the tags for clients in that company.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Assembly","colors":{"primary":"#1A1A1A","light":"#FFFFFF","dark":"#1A1A1A"},"logo":{"light":"https://mintcdn.com/assembly-ff8b9417/KKAb23PoqSLUWjAx/logo/light.svg?fit=max\u0026auto=format\u0026n=KKAb23PoqSLUWjAx\u0026q=85\u0026s=63a60c80648df2ed14efe9e0b9b05eca","dark":"https://mintcdn.com/assembly-ff8b9417/KKAb23PoqSLUWjAx/logo/dark.svg?fit=max\u0026auto=format\u0026n=KKAb23PoqSLUWjAx\u0026q=85\u0026s=abf6940b173a7c0880a96d4b6095472b"},"favicon":"https://mintcdn.com/assembly-ff8b9417/mf21cz8yWkRVUxBm/favicon.svg?fit=max\u0026auto=format\u0026n=mf21cz8yWkRVUxBm\u0026q=85\u0026s=4083e1ddcc384f1f9677aa7b91b9ae57","navbar":{"links":[{"href":"https://assembly.com/pricing","label":"Pricing"},{"href":"mailto:support@assembly.com","label":"Support"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.assembly.com"}},"footer":{"socials":{"x":"https://x.com/assemblycom","github":"https://github.com/assemblycom","linkedin":"https://linkedin.com/company/assemblycom"}},"seo":{"metatags":{"og:image":"https://studio.assembly.com/docs/images/og-card.png","twitter:image":"https://studio.assembly.com/docs/images/og-card.png","twitter:card":"summary_large_image"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"assembly-ff8b9417","hasAudioNarration":false,"actualSubdomain":"assembly-ff8b9417","customDomains":["assembly.com"],"gitSource":{"type":"github","owner":"assemblycom","repo":"core","deployBranch":"main","contentDirectory":"mintlify","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adba634882aeeefb7f7045c","collectionId":"404ce1c3-5089-4e3c-806b-e16c6da15206","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adba634882aeeefb7f7045c"},"entitlements":{"AI_CHAT":{"status":"ENABLED"}},"buildId":"6adba634882aeeefb7f7045c","clientVersion":"0.0.3965","searchFilterCounts":[{"language":"default","tag":"Guides","count":116},{"language":"default","tag":"API reference","count":106},{"language":"default","tag":"Embeds \u0026 links","count":35},{"language":"default","tag":"Built-in apps","count":21},{"language":"default","tag":"Files","count":19},{"language":"default","tag":"Core Resources","count":18},{"language":"default","tag":"Billing","count":18},{"language":"default","tag":"Core concepts","count":17},{"language":"default","tag":"Others","count":16},{"language":"default","tag":"Tasks","count":15}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"hasChatPermissions":true,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"#navbar .rounded-xl,.rounded-\\[0\\.85rem\\],.sidebar-group a,.sidebar-group button,[class*=\"text-[0.55rem]\"],div[class*=\"origin-(--transform-origin)\"],div[class*=\"origin-(--transform-origin)\"] [class*=rounded-xl]{border-radius:.5rem}.card svg.size-6{width:1.25rem;height:1.25rem}#page-context-menu .rounded-l-xl{border-radius:.5rem 0 0 .5rem}#page-context-menu .rounded-r-xl{border-radius:0 .5rem .5rem 0}"}],"page":{"pagePath":"core-concepts/custom-visibility","slug":"/core-concepts/custom-visibility","pageMetadata":{"title":"Custom visibility for apps","description":"Dynamically control which clients can access an app.","href":"/core-concepts/custom-visibility"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Dynamically control which clients can access an app.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{Heading,Note,Table}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`With custom visibility for apps, you can dynamically control which clients have access to an app. This lets you provide differentiated levels of service to clients. For example, you might only allow clients with the custom field `,_jsx(_components.strong,{children:`plan = premium`}),` to schedule time with you (access to the `,_jsx(_components.a,{href:`/embeds-and-links/calendly`,children:`Calendly app`}),`) and message you (access to the `,_jsx(_components.a,{href:`/built-in-apps/messages`,children:`Messages app`}),`).`]}),`\n`,_jsxs(_components.p,{children:[`Custom visibility works the same way for every app in your portal — Classic apps like Messages and Files, apps you build with the app builder, and embeds. It controls `,_jsx(_components.strong,{children:`client`}),` access only. Whether an app appears in your own team’s sidebar is a separate setting on the app itself.`]}),`\n`,_jsxs(_components.p,{children:[`You can configure which clients can see an app by selecting clients and companies directly, or you can use `,_jsx(_components.a,{href:`/core-concepts/custom-fields`,children:`custom field rules`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`Since custom fields are supported on Zapier, Make, and our API, you can change custom app visibility via `,_jsx(_components.a,{href:`/advanced-features/automations-introduction`,children:`automations`}),`. For example, you could set up a workflow in Zapier where the custom field `,_jsx(_components.strong,{children:`plan`}),` is updated from `,_jsx(_components.strong,{children:`standard`}),` to `,_jsx(_components.strong,{children:`premium`}),` only after a particular contract is signed.`]}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-access-custom-visibility-rule-settings`,children:`How to access custom visibility rule settings`}),`\n`,_jsx(_components.p,{children:`There are two routes to the same setting.`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`From the App Library, any time:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`App Library`}),` in the sidebar, click the menu button `,_jsx(_components.strong,{children:`(…)`}),` next to the app you want to set visibility rules for, then click `,_jsx(_components.strong,{children:`Edit`}),` to access the app’s settings page.`]}),`\n`,_jsxs(_components.li,{children:[`Scroll to the bottom of the app’s settings page and click `,_jsx(_components.strong,{children:`Edit`}),` under `,_jsx(_components.strong,{children:`App Visibility`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`Before publishing an app you built:`})}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Publish`}),` in the top right of the app builder.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Edit`}),` in the popover to open the icon, title, and visibility controls.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`Either way you get the same three choices: `,_jsx(_components.strong,{children:`Visible to all people`}),`, `,_jsx(_components.strong,{children:`Hidden from all people`}),`, or `,_jsx(_components.strong,{children:`Custom visibility`}),`. See `,_jsx(_components.a,{href:`/building-new-apps/launching-apps`,children:`Launching apps`}),` for the publish flow.`]}),`\n`,_jsx(Heading,{level:`2`,id:`custom-visibility-rule-options`,children:`Custom visibility rule options`}),`\n`,_jsxs(_components.p,{children:[`If you select `,_jsx(_components.strong,{children:`Custom visibility`}),`, you can configure granular controls for which clients can access the app.`]}),`\n`,_jsxs(_components.p,{children:[`The `,_jsx(_components.strong,{children:`Show if`}),` dropdown displays Contacts, Companies, and a list of your contact and company custom fields.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Only contact and company `,_jsx(_components.strong,{children:`Tags`}),` custom fields are configurable for custom visibility rules. Other custom field types will not be displayed here.`]})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Rule type`}),_jsx(_components.th,{children:`Configuration`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Clients`}),_jsx(_components.td,{children:`Select which individual clients will have access to the app.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Companies`}),_jsx(_components.td,{children:`Select which companies will have access to the app. All clients who belong to the included companies will be able to access the app.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Custom fields`}),_jsxs(_components.td,{children:[`For any `,_jsx(_components.strong,{children:`Tag`}),`-type contact or company custom field, you can grant access to the app based on three conditions. See the table below for details.`]})]})]})]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Custom field condition`}),_jsx(_components.th,{children:`Details`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Includes (Includes any of)`}),_jsxs(_components.td,{children:[`Grants access to the app if the client has a specific tag or tags. If multiple tags are selected, this property changes to `,_jsx(_components.strong,{children:`Includes any of`}),`, and any client with any selected tag will have access to the app.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Is not (Doesn’t include any of)`}),_jsxs(_components.td,{children:[`Grants access to the app if the client does not have a specific tag or tags. If multiple tags are selected, this property changes to `,_jsx(_components.strong,{children:`Doesn’t include any of`}),`, and any client with any selected tag will not have access to the app.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Includes all of`}),_jsx(_components.td,{children:`Grants access to the app only if the client has all of the selected tags.`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`add-an-or-rule`,children:`Add an OR rule`}),`\n`,_jsx(_components.p,{children:`You can add additional OR rules for custom visibility, which allows for additional configuration.`}),`\n`,_jsxs(_components.p,{children:[`For example, you can set up a rule where a `,_jsx(_components.strong,{children:`Tags`}),` field includes “Tier 1” or a `,_jsx(_components.strong,{children:`Company`}),` includes “Company A”. This grants access to all clients with the “Tier 1” tag, as well as all clients belonging to “Company A”, regardless of the tags for clients in that company.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Custom visibility for apps","description":"Dynamically control which clients can access an app.","href":"/core-concepts/custom-visibility"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How to access custom visibility rule settings","slug":"how-to-access-custom-visibility-rule-settings","depth":2,"children":[]},{"title":"Custom visibility rule options","slug":"custom-visibility-rule-options","depth":2,"children":[{"title":"Add an OR rule","slug":"add-an-or-rule","depth":3,"children":[]}]}],"codeExamples":{}},"jsLinks":[],"subdomain":"assembly-ff8b9417","siteName":"Assembly","title":"Custom visibility for apps - Assembly","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-08-24T20:45:30.263Z","originalFileLocation":"core-concepts/custom-visibility.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Dynamically control which clients can access an app.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Assembly\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Custom visibility for apps - Assembly\">\u003cmeta data-mint-head property=\"og:description\" content=\"Dynamically control which clients can access an app.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Assembly\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://assembly.com/docs/core-concepts/custom-visibility\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://studio.assembly.com/docs/images/og-card.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Custom visibility for apps - Assembly\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Dynamically control which clients can access an app.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://studio.assembly.com/docs/images/og-card.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/assembly-ff8b9417/5pY6iQotLUCCTDOg/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Assembly\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1A1A1A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://assembly.com/docs/core-concepts/custom-visibility\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/core-concepts/custom-visibility.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://assembly.com/#organization\",\"name\":\"Assembly\",\"url\":\"https://assembly.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/assembly-ff8b9417/KKAb23PoqSLUWjAx/logo/light.svg?fit=max\u0026auto=format\u0026n=KKAb23PoqSLUWjAx\u0026q=85\u0026s=63a60c80648df2ed14efe9e0b9b05eca\"}},{\"@type\":\"WebSite\",\"@id\":\"https://assembly.com/docs#website\",\"name\":\"Assembly\",\"url\":\"https://assembly.com/docs\",\"publisher\":{\"@id\":\"https://assembly.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://assembly.com/docs/core-concepts/custom-visibility#webpage\",\"url\":\"https://assembly.com/docs/core-concepts/custom-visibility\",\"name\":\"Custom visibility for apps\",\"description\":\"Dynamically control which clients can access an app.\",\"dateModified\":\"2026-08-24T20:45:30.263Z\",\"isPartOf\":{\"@id\":\"https://assembly.com/docs#website\"},\"breadcrumb\":{\"@id\":\"https://assembly.com/docs/core-concepts/custom-visibility#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://assembly.com/docs/core-concepts/custom-visibility#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Core concepts\",\"item\":\"https://assembly.com/docs/core-concepts/the-assembly-dashboard\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Apps\",\"item\":\"https://assembly.com/docs/core-concepts/apps\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Custom visibility for apps\",\"item\":\"https://assembly.com/docs/core-concepts/custom-visibility\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://assembly.com/docs/core-concepts/custom-visibility#article\",\"headline\":\"Custom visibility for apps\",\"name\":\"Custom visibility for apps\",\"description\":\"Dynamically control which clients can access an app.\",\"url\":\"https://assembly.com/docs/core-concepts/custom-visibility\",\"mainEntityOfPage\":{\"@id\":\"https://assembly.com/docs/core-concepts/custom-visibility#webpage\"},\"image\":\"https://studio.assembly.com/docs/images/og-card.png\",\"dateModified\":\"2026-08-24T20:45:30.263Z\",\"publisher\":{\"@id\":\"https://assembly.com/#organization\"},\"isPartOf\":{\"@id\":\"https://assembly.com/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Assembly\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Assembly","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Getting started","pages":[{"title":"Welcome","href":"/getting-started/welcome"},{"title":"Build your first app","href":"/getting-started/build-your-first-app"},{"title":"Adding your first client","href":"/getting-started/adding-your-first-contact"},{"title":"Try the client experience","href":"/getting-started/try-the-contact-experience"},{"group":"Customization \u0026 custom domains","pages":[{"title":"Customizations","href":"/getting-started/customizations"},{"title":"Custom domains","href":"/getting-started/custom-domains"}]}]},{"group":"Core concepts","pages":[{"title":"The Assembly Dashboard","sidebarTitle":"The Assembly Dashboard","href":"/core-concepts/the-assembly-dashboard"},{"title":"Your Portal","href":"/core-concepts/your-portal"},{"group":"Contacts \u0026 companies","pages":[{"title":"Contacts and companies","href":"/core-concepts/contacts-and-companies"},{"title":"Create contacts one at a time","href":"/core-concepts/create-contacts-one-at-a-time"},{"title":"Advanced import","href":"/core-concepts/advanced-import"},{"title":"Contact direct sign up","href":"/core-concepts/contact-direct-sign-up"},{"title":"Custom fields","href":"/core-concepts/custom-fields"},{"title":"Internal notes","href":"/core-concepts/internal-notes"},{"title":"Magic links","href":"/core-concepts/magic-links"}]},{"group":"Internal users","pages":[{"title":"Internal users","href":"/core-concepts/internal-users"},{"title":"Client access","href":"/core-concepts/client-access"}]},{"group":"Apps","pages":[{"title":"Apps","description":null,"href":"/core-concepts/apps"},{"title":"Custom visibility for apps","href":"/core-concepts/custom-visibility"},{"title":"Organizing your apps","description":"Reorder apps, group them into folders, and control sidebar visibility.","href":"/core-concepts/organizing-apps"}]},{"group":"Notifications","pages":[{"title":"Notifications","href":"/core-concepts/notifications"},{"title":"Internal user notifications","href":"/core-concepts/internal-user-notifications"},{"title":"Client notifications","href":"/core-concepts/client-notifications"}]}]},{"group":"Building new apps","pages":[{"title":"Introduction","href":"/building-new-apps/introduction"},{"title":"App templates","href":"/building-new-apps/app-templates"},{"title":"Writing initial prompts","href":"/building-new-apps/writing-initial-prompts"},{"title":"Iterating on apps","href":"/building-new-apps/iterating-on-apps"},{"title":"Launching apps","href":"/building-new-apps/launching-apps"},{"title":"Controlling app visibility","href":"/building-new-apps/controlling-app-visibility"},{"title":"Configuring notifications","href":"/building-new-apps/configuring-notifications"},{"title":"Automating apps you build","href":"/building-new-apps/automating-apps"}]},{"group":"Built-in apps","pages":[{"title":"Introduction","href":"/built-in-apps/introduction"},{"title":"Home app","href":"/built-in-apps/home"},{"title":"Messages app","href":"/built-in-apps/messages"},{"group":"Payments","pages":[{"title":"Payments app","href":"/built-in-apps/payments"},{"title":"Services","href":"/built-in-apps/services"},{"title":"Invoicing","href":"/built-in-apps/invoicing"},{"title":"Subscriptions","href":"/built-in-apps/subscriptions"},{"title":"Payment links","href":"/built-in-apps/payment-links"},{"title":"Store","href":"/built-in-apps/store"},{"title":"Client billing experience","href":"/built-in-apps/client-billing-experience"},{"title":"Refunds","href":"/built-in-apps/refunds"},{"title":"Fees \u0026 payment reconciliation","href":"/built-in-apps/fees-and-reconciliation"}]},{"title":"Tasks app","href":"/built-in-apps/tasks"},{"title":"Files app","href":"/built-in-apps/files"},{"title":"Contracts app","href":"/built-in-apps/contracts"},{"group":"Other apps","pages":[{"title":"Forms app","href":"/built-in-apps/forms"},{"title":"Profile Manager app","href":"/built-in-apps/profile-manager"},{"title":"Autoresponder app","href":"/built-in-apps/autoresponder"},{"title":"Exporter app","href":"/built-in-apps/exporter"},{"title":"QuickBooks Integration","href":"/built-in-apps/quickbooks"},{"title":"Xero Integration","href":"/built-in-apps/xero"}]}]},{"group":"Embeds \u0026 links","pages":[{"title":"Introduction","href":"/embeds-and-links/introduction"},{"title":"URL parameters","href":"/embeds-and-links/url-parameters"},{"group":"Productivity \u0026 project management","pages":[{"title":"Overview","href":"/embeds-and-links/productivity-and-project-management"},{"title":"Airtable embed","href":"/embeds-and-links/airtable"},{"title":"Notion embed","href":"/embeds-and-links/notion"},{"title":"ClickUp embed","href":"/embeds-and-links/clickup"},{"title":"Monday embed","href":"/embeds-and-links/monday"},{"title":"Trello embed","href":"/embeds-and-links/trello"},{"title":"Google Sheets embed","href":"/embeds-and-links/google-sheets"},{"title":"Google Docs embed","href":"/embeds-and-links/google-docs"},{"title":"Google Slides embed","href":"/embeds-and-links/google-slides"},{"title":"Google Drive embed","href":"/embeds-and-links/google-drive"},{"title":"Google Calendar embed","href":"/embeds-and-links/google-calendar"},{"title":"OneDrive embed","href":"/embeds-and-links/onedrive"},{"title":"Squarespace embed","href":"/embeds-and-links/squarespace"}]},{"group":"Scheduling","pages":[{"title":"Overview","href":"/embeds-and-links/scheduling"},{"title":"Calendly embed","href":"/embeds-and-links/calendly"},{"title":"Acuity Scheduling embed","href":"/embeds-and-links/acuity-scheduling"},{"title":"Zoom scheduling embed","href":"/embeds-and-links/zoom-scheduling"}]},{"group":"Forms \u0026 surveys","pages":[{"title":"Overview","href":"/embeds-and-links/forms-and-surveys"},{"title":"Typeform embed","href":"/embeds-and-links/typeform"},{"title":"Jotform embed","href":"/embeds-and-links/jotform"},{"title":"HubSpot Forms embed","href":"/embeds-and-links/hubspot-forms"},{"title":"HubSpot Meetings embed","href":"/embeds-and-links/hubspot-meetings"},{"title":"Google Forms embed","href":"/embeds-and-links/google-forms"}]},{"group":"Analytics","pages":[{"title":"Overview","href":"/embeds-and-links/analytics"},{"title":"Power BI Embed","href":"/embeds-and-links/power-bi"},{"title":"Looker Studio embed","href":"/embeds-and-links/looker-studio"},{"title":"Databox embed","href":"/embeds-and-links/databox"}]},{"group":"Design \u0026 media","pages":[{"title":"Overview","href":"/embeds-and-links/design-and-media"},{"title":"Figma embed","href":"/embeds-and-links/figma"},{"title":"Miro embed","href":"/embeds-and-links/miro"},{"title":"Canva embed","href":"/embeds-and-links/canva"},{"title":"Loom embed","href":"/embeds-and-links/loom"},{"title":"YouTube embed","href":"/embeds-and-links/youtube"}]}]},{"group":"Rolling out to clients","pages":[{"title":"Introduction","href":"/rolling-out-to-clients/introduction"},{"title":"Plan the client journey","href":"/rolling-out-to-clients/plan-the-client-journey"},{"group":"Build the experience and migrate existing clients","pages":[{"title":"Complete the client-facing foundation","href":"/rolling-out-to-clients/client-facing-foundation"},{"title":"Define your data structure","href":"/rolling-out-to-clients/define-your-data-structure"},{"title":"Import and backfill information safely","href":"/rolling-out-to-clients/import-and-backfill"},{"title":"Build workflows for migration and ongoing use","href":"/rolling-out-to-clients/migration-and-net-new-automations"},{"title":"Configure access and visibility","href":"/rolling-out-to-clients/internal-access-and-visibility"}]},{"group":"Test and launch","pages":[{"title":"Test the complete experience","href":"/rolling-out-to-clients/test-before-launch"},{"title":"Introduce Assembly in manageable groups","href":"/rolling-out-to-clients/launch-in-groups"},{"title":"Final launch-readiness checklist","href":"/rolling-out-to-clients/launch-readiness-checklist"}]},{"title":"Reinforce adoption and improve the experience","href":"/rolling-out-to-clients/reinforce-adoption-and-improve"}]},{"group":"Connect AI tools","pages":[{"title":"MCP","href":"/connect-ai-tools/mcp"},{"title":"Assembly Assistant","href":"/connect-ai-tools/assembly-assistant"}]},{"group":"Advanced features","pages":[{"group":"Automations","pages":[{"title":"Intro to automations","href":"/advanced-features/automations-introduction"},{"title":"Assembly Automations","href":"/advanced-features/automations"},{"title":"Zapier and Make","href":"/advanced-features/zapier-and-make"},{"title":"Recommended workflows","href":"/advanced-features/recommended-workflows"},{"title":"Automations troubleshooting","href":"/advanced-features/automations-troubleshooting"}]},{"title":"Workspace switching","href":"/advanced-features/workspace-switching"},{"title":"Command bar and shortcuts","href":"/advanced-features/shortcuts"},{"group":"Security \u0026 compliance","pages":[{"title":"Security","href":"/advanced-features/security"},{"title":"HIPAA compliance","href":"/advanced-features/hipaa-compliance"},{"title":"2FA enforcement","href":"/advanced-features/2fa-enforcement"},{"title":"Audit log","href":"/advanced-features/audit-log"}]}]},{"group":"Programs \u0026 support","pages":[{"group":"Getting help","pages":[{"title":"Troubleshooting apps you built","href":"/programs-and-support/troubleshooting-apps-you-built"},{"title":"Contact us","href":"/programs-and-support/contact-us"}]},{"title":"Demo portals","href":"/programs-and-support/demo-portals"},{"group":"Partnerships","pages":[{"title":"Experts program","href":"/programs-and-support/experts-program"},{"title":"Affiliates program","href":"/programs-and-support/affiliates-program"}]}]}]},{"tab":"API reference","pages":[{"title":"API reference","href":"/api-reference/introduction"}]}]},"title":"Custom visibility for apps - Assembly","buildId":"dpl_BvXubCjoPYfvfFiCP5WgKvGYUZ9k","deploymentId":"dpl_BvXubCjoPYfvfFiCP5WgKvGYUZ9k","dynamics":[],"chunks":[]}