(function(){const posthogKey = "phc\_oMfVwfGjzwkE5n7cCaDf25rTm7WaYn8rH4FnvsVq57Zb"; const posthogHost = "https://i.buildy.so"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; const charmingBuildId = "d142f067d067e64cefefc0365f26e471ef22927d"; const charmingServiceName = "www"; const analyticsIdCookie = "charming\_marketing\_identity\_seen"; const legacyAnalyticsIdCookie = "buildy\_marketing\_identity\_seen"; const analyticsIdCookieMaxAgeSeconds = 31536000; !function(t,e){var o,n,p,r;e.\_\_SV||(window.posthog && window.posthog.\_\_loaded)||(window.posthog=e,e.\_i=\[\],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t\[o\[0\]\],e=o\[1\]),t\[e\]=function(){t.push(\[e\].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api\_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")\[0\]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e\[a\]=\[\]:a="posthog",u.people=u.people||\[\],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init os ds Ie us vs ss ls capture calculateEventProperties register register\_once register\_for\_session unregister unregister\_for\_session ws getFeatureFlag getFeatureFlagPayload getFeatureFlagResult isFeatureEnabled reloadFeatureFlags updateFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSurveysLoaded onSessionId getSurveys getActiveMatchingSurveys renderSurvey displaySurvey cancelPendingSurvey canRenderSurvey canRenderSurveyAsync identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get\_distinct\_id getGroups get\_session\_id get\_session\_replay\_url alias set\_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException startExceptionAutocapture stopExceptionAutocapture loadToolbar get\_property getSessionProperty bs ps createPersonProfile setInternalOrTestUser ys es $s opt\_in\_capturing opt\_out\_capturing has\_opted\_in\_capturing has\_opted\_out\_capturing get\_explicit\_consent\_status is\_capturing clear\_opt\_in\_out\_capturing cs debug M gs getPageViewId captureTraceFeedback captureTraceMetric Qr".split(" "),n=0;n<o.length;n++)g(u,o\[n\]);e.\_i.push(\[i,s,a\])},e.\_\_SV=1)}(document,window.posthog||\[\]); var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { const hashParams = new URLSearchParams(window.location.hash.substring(1)); const productDistinctId = hashParams.get('distinct\_id'); const productSessionId = hashParams.get('session\_id'); const productBootstrap = productDistinctId && productSessionId ? { distinctID: productDistinctId, sessionID: productSessionId } : null; let markerDistinctId = null; if (!productBootstrap) { const markerIdPattern = /^\[0-9a-f\]{8}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{4}-\[0-9a-f\]{12}$/i; var markerUsedLegacy = false; for (const markerName of \[analyticsIdCookie, legacyAnalyticsIdCookie\]) { const markerPrefix = markerName + '='; const markerCookie = document.cookie .split(';') .map(function (part) { return part.trim(); }) .find(function (part) { return part.startsWith(markerPrefix); }); if (!markerCookie) continue; try { const value = decodeURIComponent(markerCookie.slice(markerPrefix.length)); if (markerIdPattern.test(value)) { markerDistinctId = value; markerUsedLegacy = markerName === legacyAnalyticsIdCookie; break; } } catch {} } } const bootstrap = productBootstrap ?? (markerDistinctId ? { distinctID: markerDistinctId } : null); posthog.init(posthogKey, { api\_host: posthogHost, defaults: '2026-01-30', ...(bootstrap ? { bootstrap } : {}), before\_send: function (event) { if (!event) return event; const metadata = {}; if (charmingBuildId) metadata.charming\_build\_id = charmingBuildId; if (charmingServiceName) metadata.charming\_service\_name = charmingServiceName; event.properties = Object.assign({}, event.properties, metadata); return event; }, loaded: function (ph) { const distinctId = ph.get\_distinct\_id(); if (typeof distinctId !== 'string') return; if (markerUsedLegacy) { ph.capture('legacy\_state\_key\_observed', { key: legacyAnalyticsIdCookie }); } try { localStorage.setItem(analyticsIdCookie, distinctId); localStorage.removeItem(legacyAnalyticsIdCookie); } catch {} document.cookie = analyticsIdCookie + '=' + encodeURIComponent(distinctId) + '; Path=/; Max-Age=' + analyticsIdCookieMaxAgeSeconds + '; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); document.cookie = legacyAnalyticsIdCookie + '=; Path=/; Max-Age=0; SameSite=Lax' + (window.location.protocol === 'https:' ? '; Secure' : ''); }, }); } })();(function(){const ga4Id = "G-XG5Q0M59CD"; const forceAnalytics = false; const analyticsHosts = \["buildy.so","www.buildy.so","usecharming.com","www.usecharming.com"\]; var h = window.location.hostname; if (forceAnalytics || analyticsHosts.indexOf(h) !== -1) { window.dataLayer = window.dataLayer || \[\]; function gtag() { window.dataLayer.push(arguments); } window.gtag = gtag; gtag('consent', 'default', { ad\_storage: 'denied', ad\_user\_data: 'denied', ad\_personalization: 'denied', analytics\_storage: 'granted', }); gtag('js', new Date()); gtag('config', ga4Id); var s = document.createElement('script'); s.async = true; s.src = 'https://www.googletagmanager.com/gtag/js?id=' + ga4Id; document.head.appendChild(s); } })(); (function () { function setThemeColorMetas(theme) { var light = document.querySelector('meta\[data-theme-color="light"\]'); var dark = document.querySelector('meta\[data-theme-color="dark"\]'); if (light) light.setAttribute('media', theme === 'light' ? 'all' : 'not all'); if (dark) dark.setAttribute('media', theme === 'dark' ? 'all' : 'not all'); } try { var stored = localStorage.getItem('charming-theme'); if (stored === 'dark' || stored === 'light') { document.documentElement.setAttribute('data-theme', stored); setThemeColorMetas(stored); } } catch (\_err) { // Storage can be unavailable (private mode, disabled) — fall back to // the media query, same as a first-time visitor. } })(); Subprocessors | Charming(() => { // Keep this fallback aligned with copyValueToClipboard in ./clipboard.ts. // This script runs before modules load, so it cannot import the shared helper. async function copy(value) { try { if (navigator.clipboard) { await navigator.clipboard.writeText(value); return true; } } catch { // Fall through to the textarea path for browsers that block the async API. } let fallback; try { fallback = document.createElement('textarea'); fallback.value = value; fallback.setAttribute('readonly', ''); fallback.style.position = 'fixed'; fallback.style.top = '-9999px'; document.body.appendChild(fallback); fallback.select(); return document.execCommand('copy'); } catch { return false; } finally { fallback?.remove(); } } const resetTimers = new WeakMap(); function setVisible(element, visible) { element?.classList.replace( visible ? 'opacity-0' : 'opacity-100', visible ? 'opacity-100' : 'opacity-0', ); } function resetFeedback(button, island) { const action = button.querySelector('\[data-copy-action-label\]'); const confirmed = button.querySelector('\[data-copy-confirmed-label\]'); const confirmation = island.querySelector('\[data-copy-confirmation\]'); const liveRegion = island.querySelector('\[data-copy-live-region\]'); setVisible(action, true); setVisible(confirmed, false); setVisible(confirmation, false); confirmation?.classList.replace('translate-y-0', 'translate-y-1'); if (confirmation) { confirmation.textContent = button.dataset.copySuccessMessage ?? ''; if (confirmation.dataset.copyConfirmation === 'false') { confirmation.parentElement?.classList.replace('mt-2.5', 'mt-0'); confirmation.parentElement?.classList.replace('grid-rows-\[1fr\]', 'grid-rows-\[0fr\]'); } } if (liveRegion) liveRegion.textContent = ''; resetTimers.delete(button); } function showFeedback(button, island, copied) { const action = button.querySelector('\[data-copy-action-label\]'); const confirmed = button.querySelector('\[data-copy-confirmed-label\]'); const confirmation = island.querySelector('\[data-copy-confirmation\]'); const liveRegion = island.querySelector('\[data-copy-live-region\]'); const message = copied ? (button.dataset.copySuccessMessage ?? '') : (button.dataset.copyBlockedMessage ?? ''); setVisible(action, !copied); setVisible(confirmed, copied); if (confirmation) { confirmation.textContent = message; const buttonOnlySuccess = copied && confirmation.dataset.copyConfirmation === 'false'; setVisible(confirmation, !buttonOnlySuccess); confirmation.classList.replace( buttonOnlySuccess ? 'translate-y-0' : 'translate-y-1', buttonOnlySuccess ? 'translate-y-1' : 'translate-y-0', ); if (!copied && confirmation.dataset.copyConfirmation === 'false') { confirmation.parentElement?.classList.replace('mt-0', 'mt-2.5'); confirmation.parentElement?.classList.replace('grid-rows-\[0fr\]', 'grid-rows-\[1fr\]'); } } if (liveRegion) liveRegion.textContent = message; const priorTimer = resetTimers.get(button); if (priorTimer) clearTimeout(priorTimer); resetTimers.set( button, setTimeout(() => resetFeedback(button, island), 10000), ); } document.addEventListener( 'click', async (event) => { const target = event.target instanceof Element ? event.target : null; const button = target?.closest('button\[data-copy-value\]'); const island = button?.closest('astro-island\[ssr\]'); if (!button || !island) return; showFeedback(button, island, await copy(button.dataset.copyValue ?? '')); }, true, ); })(); article :where(h1,h2,h3){font-family:var(--font-serif)}

[![Charming](/charming-lockup.svg)![Charming](/charming-lockup-dark.svg)](/)

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work)[Blog](/blog)[Docs](/docs)

[Sign up](https://charm.ing/auth/signup)

[Ideas](/#apps)[Pricing](/#pricing)[For Work](/work)[Blog](/blog)[Docs](/docs)

(function(){try{var e=typeof window<\`u\`?window:typeof global<\`u\`?global:typeof globalThis<\`u\`?globalThis:typeof self<\`u\`?self:{};e.\_posthogReleaseId=e.\_posthogReleaseId||\`01a0751b-3b40-0000-8ea1-fdcf9b6daacb\`;var t=new e.Error().stack;t&&(e.\_posthogChunkIds=e.\_posthogChunkIds||{},e.\_posthogChunkIds\[t\]=\`05279c9f-ab8a-53ce-a85a-52d4379c83ad\`)}catch{}})();var e=document.querySelector(\`\[data-nav-menu\]\`);e&&(e.querySelectorAll(\`a\`).forEach(t=>{t.addEventListener(\`click\`,()=>{e.open=!1})}),document.addEventListener(\`pointerdown\`,t=>{e.open&&!e.contains(t.target)&&(e.open=!1)}),document.addEventListener(\`keydown\`,t=>{t.key===\`Escape\`&&e.open&&(e.open=!1,e.querySelector(\`summary\`)?.focus())})); //# chunkId=05279c9f-ab8a-53ce-a85a-52d4379c83ad

# Charming Subprocessors

**Last Updated:** May 5, 2026

This page lists the third-party service providers ("subprocessors") Charming currently uses to operate the Platform. We update this list when we add, remove, or replace a subprocessor. The legal entity that operates Charming is Fractal Dynamics, Inc. d/b/a Charming.

## Current subprocessors

Subprocessor

Purpose

Data category

Region

[Stripe](https://stripe.com/privacy)

Payment processing

Billing and payment information

United States

[PostHog](https://posthog.com/privacy)

Product analytics and event tracking

Usage and event data

United States

[Google Analytics](https://policies.google.com/privacy)

Marketing-site traffic analytics for SEO reporting

Marketing-site usage and event data

United States

[Resend](https://resend.com/legal/privacy-policy)

Transactional and product email delivery

Email address and message content

United States

[Railway](https://railway.com/legal/privacy)

Application hosting (Charming MCP server)

Account, app, and usage data

United States

[Better Auth](https://www.better-auth.com/) + [Google OAuth](https://policies.google.com/privacy)

Authentication and identity

Account credentials and OAuth tokens

United States

[Vercel](https://vercel.com/legal/privacy-policy)

Marketing site hosting (usecharming.com)

Visitor request metadata

United States

## Updates to this list

When we add, remove, or replace a subprocessor that materially changes the categories of personal data we share, we will update this page and change the _Last Updated_ date above. For questions or to subscribe to subprocessor change notifications, contact [legal@usecharming.com](mailto:legal@usecharming.com).

[](/)

Software that’s finally yours.

[Up and running](https://status.usecharming.com "System status. Opens status.usecharming.com")

## Explore

*   [Ideas](/#apps)
*   [How it works](/how-it-works)
*   [Pricing](/#pricing)
*   [For Work](/work)
*   [Blog](/blog)

## For work

*   [Finance](/work/finance)
*   [Internal tools](/work/internal-tools)
*   [Recruiting](/work/recruiting)
*   [Consultants](/work/consultants)
*   [Marketing](/work/marketing)
*   [IT and security](/work/it)

## Works with

*   [ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a56c533cd7c8191b9a16cb7973a65e6)
*   [Claude](https://charm.ing/docs/clients/claude)
*   [Microsoft 365 Copilot](https://charm.ing/docs/clients/microsoft-365-copilot)
*   [Cursor](https://charm.ing/docs/clients/cursor)
*   [All setup guides](/works-with)

## Learn

*   [Docs](/docs)
*   [Guides](/guides)
*   [Contact](/contact-us)
*   [llms.txt](/llms.txt)
*   [Email us](mailto:support@usecharming.com)

Explore+

*   [Ideas](/#apps)
*   [How it works](/how-it-works)
*   [Pricing](/#pricing)
*   [For Work](/work)
*   [Blog](/blog)

For work+

*   [Finance](/work/finance)
*   [Internal tools](/work/internal-tools)
*   [Recruiting](/work/recruiting)
*   [Consultants](/work/consultants)
*   [Marketing](/work/marketing)
*   [IT and security](/work/it)

App ideas+

*   [Job application tracker](/apps/job-application-tracker)
*   [Project status](/apps/project-status-tracker)
*   [Meeting actions](/apps/meeting-action-tracker)
*   [Vendor review](/apps/vendor-review)
*   [Product launch](/apps/product-launch-tracker)
*   [Review and approval](/apps/review-approval)
*   [Quote calculator](/apps/pricing-calculator)

Works with+

*   [ChatGPT](https://chatgpt.com/plugins/plugin_asdk_app_6a56c533cd7c8191b9a16cb7973a65e6)
*   [Claude](https://charm.ing/docs/clients/claude)
*   [Microsoft 365 Copilot](https://charm.ing/docs/clients/microsoft-365-copilot)
*   [Cursor](https://charm.ing/docs/clients/cursor)
*   [All setup guides](/works-with)

Learn+

*   [Docs](/docs)
*   [Guides](/guides)
*   [Contact](/contact-us)
*   [llms.txt](/llms.txt)
*   [Email us](mailto:support@usecharming.com)

## App ideas

[Job application tracker](/apps/job-application-tracker)[Project status](/apps/project-status-tracker)[Meeting actions](/apps/meeting-action-tracker)[Vendor review](/apps/vendor-review)[Product launch](/apps/product-launch-tracker)[Review and approval](/apps/review-approval)[Quote calculator](/apps/pricing-calculator)

© 2026 Charming

[Privacy](/privacy)[Terms](/terms)[Fair use](/fair-use)[Subprocessors](/subprocessors)

charm.ing

(function(){try{var e=typeof window<\`u\`?window:typeof global<\`u\`?global:typeof globalThis<\`u\`?globalThis:typeof self<\`u\`?self:{};e.\_posthogReleaseId=e.\_posthogReleaseId||\`01a0751b-3b40-0000-8ea1-fdcf9b6daacb\`;var t=new e.Error().stack;t&&(e.\_posthogChunkIds=e.\_posthogChunkIds||{},e.\_posthogChunkIds\[t\]=\`247d408f-d424-54e5-81b1-619030ddcc48\`)}catch{}})();var e=\`charming-theme\`,t=document.documentElement,n=window.matchMedia(\`(prefers-color-scheme: dark)\`),r=()=>{let e=t.getAttribute(\`data-theme\`);return e===\`light\`||e===\`dark\`?e:n.matches?\`dark\`:\`light\`},i=document.querySelector(\`\[data-theme-toggle\]\`),a=()=>{if(!i)return;let e=r()===\`dark\`?\`light\`:\`dark\`;i.setAttribute(\`aria-label\`,\`Switch to ${e} theme\`)};a();var o=e=>{let t=document.querySelector(\`meta\[data-theme-color="light"\]\`),n=document.querySelector(\`meta\[data-theme-color="dark"\]\`);t?.setAttribute(\`media\`,e===\`light\`?\`all\`:\`not all\`),n?.setAttribute(\`media\`,e===\`dark\`?\`all\`:\`not all\`)};i?.addEventListener(\`click\`,()=>{let n=r()===\`dark\`?\`light\`:\`dark\`;t.setAttribute(\`data-theme\`,n),o(n);try{localStorage.setItem(e,n)}catch{}a()}),n.addEventListener(\`change\`,()=>{t.hasAttribute(\`data-theme\`)||a()}); //# chunkId=247d408f-d424-54e5-81b1-619030ddcc48