Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.
This guide covers how to structure Leaf when you serve multiple client organizations — agribusinesses, co-ops, ag retailers, or other agtech companies. As a managed service provider, you need data isolation between clients, independent billing, separate provider credentials per client, and the flexibility to configure processing differently for each one.
Create a separate API owner for each major client, in each environment. This is the key structural difference from FMIS or crop insurance integrations, where a single API owner usually covers everything.Each API owner holds the Leaf users for that client’s growers. This structure provides:Data isolation — if a grower revokes access for one client, it doesn’t affect their data sharing with other clients. Provider credentials are scoped to the API owner level.Per-client configuration — Client A can receive cleaned, filtered GeoJSON while Client B gets raw data. Each API owner has its own default configurations that apply to all Leaf users underneath it.Independent billing — usage is tracked per API owner, so you can see exactly how many acres each client consumes. This makes cost pass-through straightforward.If a client is small enough that it doesn’t warrant a separate API owner, you can group multiple small clients under one API owner and use Leaf user-level configurations to differentiate their processing. The trade-off is less billing granularity.
Agronomic analysis clients need point-level GeoJSON, yield maps, and satellite imagery.
Record-keeping clients need field boundaries, operation summaries, and crop/product data.
Field trial analysis clients need high-resolution point data with precise spatial allocation.
Sustainability clients need tillage operations and potentially application data.
Discuss specific data requirements with each client and configure their API owner accordingly. Your Leaf Customer Success representative can help map client needs to Leaf’s data products.
Since each client gets its own API owner, you can set processing configurations independently. Some considerations:Clients coming from SMS workflows may want cleanupRules tuned to match their existing data cleaning thresholds. See the Crop Insurance guide for details on these configurations.Clients who want raw data can have cleanupStandardGeojson set to false at the API owner level.Clients with specific unit preferences — set unitMeasurement per API owner to match what each client expects.Clients who need images — enable operationsImageCreation and configure operationsImageAttributeCreation per API owner.Within a single API owner, you can still override configurations at the Leaf user level for individual growers who need different processing.
Sync settings are also per API owner. Configure each client based on their requirements:operationsProcessingRange — some clients need several years of history, others only need the current season.customDataSync — useful for clients who are cost-sensitive and only want to process specific fields.organizationDataSync — important for clients whose growers have complex John Deere organization structures.
Each API owner has its own acre allotment and billing. The same grower connected under two different API owners counts separately for billing purposes. Factor this into your pricing if multiple clients serve overlapping grower populations.
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"Leaf Documentation","colors":{"primary":"#00886b","light":"#07C983","dark":"#00886b"},"logo":{"light":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/light.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=8ce24e422c9bf087336b65351eb51f4c","dark":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/dark.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=7c5b24b746c2c02501ac6fea486c3a51","href":"https://withleaf.io/"},"favicon":"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/favicon.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=a435f8f25c1ed914dc32b03c92d844cd","appearance":{"default":"light"},"background":{"color":{"light":"#ffffff","dark":"#18191a"}},"navbar":{"links":[{"icon":"github","href":"https://status.withleaf.io","label":"API Status"},{"href":"https://dashboard.withleaf.io","label":"Log In"}],"primary":{"type":"button","label":"Request Demo","href":"https://withleaf.io/account/get-a-demo"}},"footer":{"socials":{"instagram":"https://www.instagram.com/withleaf_","linkedin":"https://www.linkedin.com/company/leaf-agriculture","x":"https://twitter.com/LeafAgriculture","youtube":"https://www.youtube.com/@leafagriculture7933"}},"seo":{"metatags":{"robots":"noindex"},"indexing":"navigable"},"fonts":{"heading":{"family":"Satoshi","source":"https://cdn.fontshare.com/wf/P2LQKHE6KA6ZP4AAGN72KDWMHH6ZH3TA/ZC32TK2P7FPS5GFTL46EU6KQJA24ZYDB/7AHDUZ4A7LFLVFUIFSARGIWCRQJHISQP.woff2","format":"woff2"},"body":{"family":"Inter"}},"integrations":{"mixpanel":{"projectToken":"2aa8982706dc53402184ef7b6e555d32"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"About Us","icon":"circle-user","href":"https://withleaf.io/company"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"leaf-3ed5893a","hasAudioNarration":false,"actualSubdomain":"leaf-3ed5893a","customDomains":["docs.withleaf.io"],"gitSource":{"type":"github","owner":"leaf-agriculture","repo":"docs-v2","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeca9998029e5fb8e3f08df","collectionId":"15f56d4b-47f7-4765-8f1e-2cfd26e8e289","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeca9998029e5fb8e3f08df"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeca9998029e5fb8e3f08df","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"Documentation","count":59},{"language":"default","tag":"API Reference","count":25},{"language":"default","tag":"Guides","count":23},{"language":"default","tag":"Tutorials","count":18},{"language":"default","tag":"Connecting Providers","count":17},{"language":"default","tag":"Beta","count":10},{"language":"default","tag":"OEM and Provider Integrations","count":10},{"language":"default","tag":"Data Hierarchy","count":9},{"language":"default","tag":"Machine Data","count":6},{"language":"default","tag":"Resources","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"help@withleaf.io","showHelpButton":true}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","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":"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":"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":"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":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","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":"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":"workos-sso-scim","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},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles/globals.css","content":".get,.post,.put,.patch,.delete{display:inline-block;padding:2px 8px;border-radius:4px;font-size:12px;font-weight:600;text-transform:uppercase;font-family:monospace}.get{background-color:#00866d;color:white}.post{background-color:#edc043;color:white}.patch{background-color:#edc043;color:white}.delete{background-color:#f25925;color:white}.put{background-color:#edc043;color:white}"}],"page":{"pagePath":"guides/by-use-case/managed-service-provider","slug":"/guides/by-use-case/managed-service-provider","pageMetadata":{"title":"Managed Service Provider","sidebarTitle":"Managed Service Provider","description":"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.","href":"/guides/by-use-case/managed-service-provider"},"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: \"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\"\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`,code:`code`,li:`li`,p:`p`,strong:`strong`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This guide covers how to structure Leaf when you serve multiple client organizations — agribusinesses, co-ops, ag retailers, or other agtech companies. As a managed service provider, you need data isolation between clients, independent billing, separate provider credentials per client, and the flexibility to configure processing differently for each one.`}),`\n`,_jsx(Heading,{level:`2`,id:`account-structure`,children:`Account structure`}),`\n`,_jsx(_components.p,{children:`Create a separate API owner for each major client, in each environment. This is the key structural difference from FMIS or crop insurance integrations, where a single API owner usually covers everything.`}),`\n`,_jsx(_components.p,{children:`Each API owner holds the Leaf users for that client’s growers. This structure provides:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Data isolation`}),` — if a grower revokes access for one client, it doesn’t affect their data sharing with other clients. Provider credentials are scoped to the API owner level.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Per-client configuration`}),` — Client A can receive cleaned, filtered GeoJSON while Client B gets raw data. Each API owner has its own default configurations that apply to all Leaf users underneath it.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Independent billing`}),` — usage is tracked per API owner, so you can see exactly how many acres each client consumes. This makes cost pass-through straightforward.`]}),`\n`,_jsx(_components.p,{children:`If a client is small enough that it doesn’t warrant a separate API owner, you can group multiple small clients under one API owner and use Leaf user-level configurations to differentiate their processing. The trade-off is less billing granularity.`}),`\n`,_jsx(Heading,{level:`2`,id:`data-needs`,children:`Data needs`}),`\n`,_jsx(_components.p,{children:`Data needs vary by client. Some common patterns:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Agronomic analysis`}),` clients need point-level GeoJSON, yield maps, and satellite imagery.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Record-keeping`}),` clients need field boundaries, operation summaries, and crop/product data.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Field trial analysis`}),` clients need high-resolution point data with precise spatial allocation.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Sustainability`}),` clients need tillage operations and potentially application data.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`Discuss specific data requirements with each client and configure their API owner accordingly. Your Leaf Customer Success representative can help map client needs to Leaf’s data products.`}),`\n`,_jsx(Heading,{level:`2`,id:`processing-rules`,children:`Processing rules`}),`\n`,_jsx(_components.p,{children:`Since each client gets its own API owner, you can set processing configurations independently. Some considerations:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Clients coming from SMS workflows`}),` may want `,_jsx(_components.code,{children:`cleanupRules`}),` tuned to match their existing data cleaning thresholds. See the `,_jsx(_components.a,{href:`/guides/by-use-case/crop-insurance`,children:`Crop Insurance`}),` guide for details on these configurations.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Clients who want raw data`}),` can have `,_jsx(_components.code,{children:`cleanupStandardGeojson`}),` set to `,_jsx(_components.code,{children:`false`}),` at the API owner level.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Clients with specific unit preferences`}),` — set `,_jsx(_components.code,{children:`unitMeasurement`}),` per API owner to match what each client expects.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Clients who need images`}),` — enable `,_jsx(_components.code,{children:`operationsImageCreation`}),` and configure `,_jsx(_components.code,{children:`operationsImageAttributeCreation`}),` per API owner.`]}),`\n`,_jsx(_components.p,{children:`Within a single API owner, you can still override configurations at the Leaf user level for individual growers who need different processing.`}),`\n`,_jsx(Heading,{level:`2`,id:`sync-granularity`,children:`Sync granularity`}),`\n`,_jsx(_components.p,{children:`Sync settings are also per API owner. Configure each client based on their requirements:`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`operationsProcessingRange`})}),` — some clients need several years of history, others only need the current season.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`customDataSync`})}),` — useful for clients who are cost-sensitive and only want to process specific fields.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`organizationDataSync`})}),` — important for clients whose growers have complex John Deere organization structures.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Each API owner has its own acre allotment and billing. The same grower connected under two different API owners counts separately for billing purposes. Factor this into your pricing if multiple clients serve overlapping grower populations.`})}),`\n`,_jsx(Heading,{level:`2`,id:`what-to-read-next`,children:`What to read next`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/planning/integration-planning`,children:`Integration Planning`}),` — the full planning checklist`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/guides/planning/data-sync-customization`,children:`Data Sync Customization`}),` — detailed control over what Leaf processes`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/configuration/overview`,children:`Configuration reference`}),` — all available configuration options`]}),`\n`]})]})}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":"Managed Service Provider","sidebarTitle":"Managed Service Provider","description":"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.","href":"/guides/by-use-case/managed-service-provider"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Account structure","slug":"account-structure","depth":2,"children":[]},{"title":"Data needs","slug":"data-needs","depth":2,"children":[]},{"title":"Processing rules","slug":"processing-rules","depth":2,"children":[]},{"title":"Sync granularity","slug":"sync-granularity","depth":2,"children":[]},{"title":"What to read next","slug":"what-to-read-next","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"leaf-3ed5893a","siteName":"Leaf Documentation","title":"Managed Service Provider - Leaf Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-03-24T13:26:21.373Z","gitLastModified":"2026-03-24T13:25:42.000Z","originalFileLocation":"guides/by-use-case/managed-service-provider.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=\"light\"}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=\"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Leaf Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"noindex\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_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=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Managed Service Provider - Leaf Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Leaf Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://leaf-3ed5893a.mintlify.site/_mintlify/api/og/v2?division=By+Use+Case\u0026amp;title=Managed+Service+Provider\u0026amp;description=Configure+Leaf+for+managed+service+providers+%28MSPs%29+building+agricultural+data+solutions+for+multiple+client+organizations+with+isolated+data+and+billing.\u0026amp;theme=df28ea0c62b563cc8e5aedca\u0026amp;signature=dc533c3ce5a9328216f6d679da6b6215d6bd8b1f3619854cd820464eb54fd431\">\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=\"Managed Service Provider - Leaf Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://leaf-3ed5893a.mintlify.site/_mintlify/api/og/v2?division=By+Use+Case\u0026amp;title=Managed+Service+Provider\u0026amp;description=Configure+Leaf+for+managed+service+providers+%28MSPs%29+building+agricultural+data+solutions+for+multiple+client+organizations+with+isolated+data+and+billing.\u0026amp;theme=df28ea0c62b563cc8e5aedca\u0026amp;signature=dc533c3ce5a9328216f6d679da6b6215d6bd8b1f3619854cd820464eb54fd431\">\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=\"/mintlify-assets/_mintlify/favicons/leaf-3ed5893a/IA--hOPjRaQAEcyW/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Leaf Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#00886b\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/guides/by-use-case/managed-service-provider.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.withleaf.io/#organization\",\"name\":\"Leaf Documentation\",\"url\":\"https://docs.withleaf.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/leaf-3ed5893a/to88HRn_L8ezHDrX/logo/light.png?fit=max\u0026auto=format\u0026n=to88HRn_L8ezHDrX\u0026q=85\u0026s=8ce24e422c9bf087336b65351eb51f4c\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.withleaf.io#website\",\"name\":\"Leaf Documentation\",\"url\":\"https://docs.withleaf.io\",\"publisher\":{\"@id\":\"https://docs.withleaf.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider#webpage\",\"url\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider\",\"name\":\"Managed Service Provider\",\"description\":\"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\",\"dateModified\":\"2026-03-24T13:25:42.000Z\",\"isPartOf\":{\"@id\":\"https://docs.withleaf.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Leaf Documentation\",\"item\":\"https://docs.withleaf.io\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Managed Service Provider\",\"item\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider#article\",\"headline\":\"Managed Service Provider\",\"name\":\"Managed Service Provider\",\"description\":\"Configure Leaf for managed service providers (MSPs) building agricultural data solutions for multiple client organizations with isolated data and billing.\",\"url\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider\",\"mainEntityOfPage\":{\"@id\":\"https://docs.withleaf.io/guides/by-use-case/managed-service-provider#webpage\"},\"dateModified\":\"2026-03-24T13:25:42.000Z\",\"publisher\":{\"@id\":\"https://docs.withleaf.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.withleaf.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Leaf Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Leaf Documentation","nav":{"global":{"anchors":[{"anchor":"About Us","icon":"circle-user","href":"https://withleaf.io/company"}]},"tabs":[{"tab":"Home","icon":"house","pages":[{"title":"Home","href":""}]},{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/getting-started/welcome"}]},{"tab":"Guides","icon":"lightbulb","groups":[{"group":"By Use Case","pages":[{"title":"Managed Service Provider","sidebarTitle":"Managed Service Provider","href":"/guides/by-use-case/managed-service-provider"},{"title":"Farm Management (FMIS)","sidebarTitle":"FMIS","description":"Configure Leaf for farm management information systems (FMIS): field boundary syncing, operations, satellite imagery, and weather from connected providers.","href":"/guides/by-use-case/fmis"},{"title":"Crop Insurance","sidebarTitle":"Crop Insurance","href":"/guides/by-use-case/crop-insurance"}]},{"group":"AI and Agents","pages":[{"title":"Connect Leaf's MCP Server in Cursor","sidebarTitle":"Use Cursor with Leaf","href":"/guides/tutorials/cursor-mcp"},{"title":"Connect Leaf's MCP Server in Claude Code","sidebarTitle":"Use Claude Code with Leaf","href":"/guides/tutorials/claude-code-mcp"}]},{"group":"Tutorials","pages":[{"group":"OEM and Provider Integrations","pages":[{"title":"Connect to Climate FieldView API","sidebarTitle":"Connect Climate FieldView","href":"/guides/tutorials/connect-climate-fieldview"},{"title":"Connect to Stara Telemetry API","sidebarTitle":"Connect Stara","href":"/guides/tutorials/connect-stara"},{"title":"Connect to John Deere Operations Center API","sidebarTitle":"Connect John Deere","href":"/guides/tutorials/connect-john-deere"},{"title":"Connect to CNHi API (AFS Connect)","sidebarTitle":"Connect CNHI (AFS Connect - Legacy)","href":"/guides/tutorials/connect-cnhi"},{"title":"Connect to CNHI FieldOps API","sidebarTitle":"Connect CNHI FieldOps","href":"/guides/tutorials/connect-cnhi-fieldops"},{"title":"Migrate from CNHI AFS Connect to CNHI FieldOps","sidebarTitle":"Migrate CNHI to FieldOps","href":"/guides/tutorials/migrate-cnhi-to-fieldops"},{"title":"Connect to AgLeader AgFiniti API","sidebarTitle":"Connect AgLeader","href":"/guides/tutorials/connect-agleader"},{"title":"Connect to Trimble API","sidebarTitle":"Connect Trimble","href":"/guides/tutorials/connect-trimble"},{"title":"Connect to FarmEngage API","sidebarTitle":"Connect FarmEngage","href":"/guides/tutorials/connect-farmengage"},{"title":"Migrate from Trimble to FarmEngage","sidebarTitle":"Migrate Trimble to FarmEngage","href":"/guides/tutorials/migrate-trimble-to-farmengage"}]},{"title":"Planning Your Integration","sidebarTitle":"Plan Your Integration","href":"/guides/planning/integration-planning"},{"title":"Field Operations Quickstart","sidebarTitle":"Get started with Field Operations","href":"/guides/tutorials/field-operations-quickstart"},{"title":"Preparing Files for Upload","sidebarTitle":"Prepare files for upload","href":"/guides/planning/file-preparation"},{"title":"Upload and Process Machine Files","sidebarTitle":"Upload files from monitors","href":"/guides/tutorials/manual-file-upload"},{"title":"Get Satellite Imagery for Your Fields","sidebarTitle":"Retrieve Satellite Imagery","href":"/guides/tutorials/satellite-imagery"},{"title":"Integrate Leaf Data with ArcGIS","sidebarTitle":"Integrate with ArcGIS","href":"/guides/tutorials/arcgis-integration"},{"title":"Customizing Data Sync","sidebarTitle":"Customizing Data Sync","href":"/guides/planning/data-sync-customization"},{"title":"Why Yield Values Differ Between Platforms","sidebarTitle":"Understanding Data Differences","href":"/guides/planning/yield-differences"}]}]},{"tab":"API Reference","icon":"code-simple","pages":[{"title":"API Reference","href":"/api-reference/authentication"}]},{"tab":"Resources","icon":"books","pages":[{"title":"Resources","href":"/resources/glossary"}]}]},"basePath":"","title":"Managed Service Provider - Leaf Documentation","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":[],"chunks":[]}