The building blocks of Kadoa and how they fit together
You describe the data you need. Kadoa’s agent writes deterministic pipeline code that extracts it. Each version of the code is reviewed and tested before it runs.Kadoa watches every workflow and checks every run. When something goes wrong, such as a site change, a failed run, or a data quality check that doesn’t pass, the agent finds the cause, fixes the code, tests the fix, and redeploys it. If the agent can’t fix it, Kadoa’s operations team takes over.
The rest of this page defines each building block and links to its full page.
A workflow extracts one kind of data from one website. It runs once, on a schedule, or continuously. Everything below is part of a workflow or works with one. See Create workflows.
A prompt tells the agent what to extract and how to reach it, such as which filters to set or how many pages to go through. Your description of the data becomes the prompt.
Key fields identify a record across runs, such as a posting ID or a product URL. They let Kadoa report an edited record as one update instead of a removal and an addition. The agent picks them.
Variables are named values you use in prompts, such as search terms or ZIP codes. They belong to the team, so every workflow in it can use them. Secret variables hold passwords and API keys, and no one can read their values back.
Kadoa’s agent builds each workflow. It finds the source, proposes the schema, and writes and tests the pipeline code. It repairs the code whenever a run or a check fails. You work with it in the dashboard, from code, or from your AI tool.
A run is one execution of a workflow’s pipeline code. A workflow runs once or on a schedule. Workflow lifecycle lists every state a workflow and a run can be in.
A monitor is a workflow that watches a website continuously instead of on a schedule. It alerts you when the data changes. Use one when minutes matter.
After each run, Kadoa compares the data with the previous run and marks each record as added, removed, or updated. Change detection explains how records are matched.
A template is one configuration that many workflows share, such as the setup prompt, schema, and schedule. You change the template once, then roll the change out to its linked workflows.
A dataset is the same kind of record collected from many websites. Each website gets its own workflow, and one template keeps them all in the same structure.
Destinations receive the data of each completed run: Amazon S3, Google Cloud Storage, Snowflake, Databricks, or SFTP. You can also export data on demand as a download, through the API, or from your AI tool.
Notifications alert you when a workflow finishes, fails, recovers, or finds changes. Each one goes to a channel: an email address, a Slack channel, a webhook, or a WebSocket.
A team holds your workflows, data, variables, templates, and channels. Every member sees the team’s workflows, and roles decide who can change what.
⌘I
{"docsConfig":{"theme":"almond","$schema":"https://mintlify.com/docs.json","name":"Kadoa Documentation","colors":{"primary":"#ea580c","light":"#ea580c","dark":"#18181b"},"logo":{"light":"https://mintcdn.com/kadoa/dCOYM0EuffD9qYID/logo/kadoa-logo.svg?fit=max\u0026auto=format\u0026n=dCOYM0EuffD9qYID\u0026q=85\u0026s=344d5ae11cb3c2519a3c1541507ebed5","dark":"https://mintcdn.com/kadoa/dCOYM0EuffD9qYID/logo/kadoa-logo-dark.svg?fit=max\u0026auto=format\u0026n=dCOYM0EuffD9qYID\u0026q=85\u0026s=1fea0a0ce836a0d67d103f5e5adb6dda"},"favicon":"https://mintcdn.com/kadoa/A3sRkEG_6lnlmZD1/favicon.svg?fit=max\u0026auto=format\u0026n=A3sRkEG_6lnlmZD1\u0026q=85\u0026s=0cea8dbdde871424c4f413c68961c6e2","api":{"openapi":"https://api.kadoa.com/openapi"},"appearance":{"default":"light"},"background":{"color":{"light":"#fafaf9","dark":"#18181b"}},"navbar":{"primary":{"type":"button","label":"Open app","href":"https://kadoa.com/dashboard"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/kadoa","github":"https://github.com/kadoa-org"}},"seo":{"indexing":"all"},"fonts":{"family":"Kadoa Sans","weight":360,"source":"https://kadoa.b-cdn.net/fonts/KadoaSans-Variable.woff2","format":"woff2"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":{"style":"duotone","name":"clock-rotate-left"},"href":"https://www.kadoa.com/changelog"},{"anchor":"Trust Center","icon":{"style":"duotone","name":"shield-check"},"href":"https://trust.kadoa.com"},{"anchor":"Contact Us","icon":{"style":"duotone","name":"envelope"},"href":"https://www.kadoa.com/contact"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"kadoa","hasAudioNarration":false,"actualSubdomain":"kadoa","customDomains":["docs.kadoa.com"],"gitSource":{"type":"github","owner":"kadoa-org","repo":"kadoa-backend","deployBranch":"main","contentDirectory":"docs/public","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6adfc47db7225dad5eab5e0a","collectionId":"aa1f8d58-dd8b-401c-983d-b0b79528e46d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6adfc47db7225dad5eab5e0a"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6adfc47db7225dad5eab5e0a","clientVersion":"0.0.3971","searchFilterCounts":[{"language":"default","tag":"API Reference","count":152},{"language":"default","tag":"Documentation","count":62},{"language":"default","tag":"Workflows","count":20},{"language":"default","tag":"Build workflows","count":17},{"language":"default","tag":"Templates","count":16},{"language":"default","tag":"Notifications","count":13},{"language":"default","tag":"Integrations","count":12},{"language":"default","tag":"Agent","count":9},{"language":"default","tag":"Variables","count":7},{"language":"default","tag":"Administration","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"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":"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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"body,html{font-weight:380}.font-bold,.font-semibold,.link,strong{font-weight:520}.sidebar-group-header,.sidebar-title{color:rgb(var(--primary));font-weight:600}body:has(.landing-cards) #page-title{font-size:2.5rem;line-height:1.15}.landing-cards{gap:1rem}.landing-cards a.card{margin:0;border-radius:.625rem;height:100%}.landing-cards a.card [data-component-part=card-content-container]{padding:0;display:flex;flex-direction:column;height:100%}.landing-cards a.card [data-component-part=card-icon]{margin:1.25rem 1.25rem 3.5rem}.landing-cards a.card [data-component-part=card-content-container]>div:has([data-component-part=card-title]){flex:1;border-top:1px solid rgb(9 9 11/.08)}.landing-cards a.card [data-component-part=card-title]{margin:0;padding:1rem 1.25rem 0}.landing-cards a.card [data-component-part=card-content]{margin:0;padding:.25rem 1.25rem 1.25rem;font-size:.9375rem;line-height:1.45}.dark .landing-cards a.card [data-component-part=card-content-container]>div:has([data-component-part=card-title]){border-top-color:rgb(255 255 255/.1)}body:has(.landing-cards) #content-area{max-width:68rem}.concept-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));column-gap:2.5rem;margin-top:1rem}.concept-list a{display:block;padding:.875rem 0;border-top:1px solid rgb(9 9 11/.08);text-decoration:none}.concept-name{display:block;color:rgb(24 24 27);font-weight:520}.concept-desc{display:block;margin-top:.125rem;color:rgb(113 113 122);font-size:.9375rem;line-height:1.45}.concept-list a:focus-visible .concept-name,.concept-list a:hover .concept-name{color:rgb(var(--primary))}.concept-list a:focus-visible{outline:2px solid rgb(var(--primary));outline-offset:2px;border-radius:.25rem}.dark .concept-list a{border-top-color:rgb(255 255 255/.1)}.dark .concept-name{color:rgb(244 244 245)}.dark .concept-desc{color:rgb(161 161 170)}@media (max-width:640px){.concept-list{grid-template-columns:minmax(0,1fr)}}@media (min-width:640px) and (max-width:1279px){.landing-cards{--cols:2!important}}.dark img[src$=\"/images/logos/cursor.svg\"],.dark img[src$=\"/images/logos/mcp.svg\"],.dark img[src$=\"/images/logos/openai.svg\"]{filter:invert(1)}"}],"page":{"pagePath":"docs/how-kadoa-works","slug":"/docs/how-kadoa-works","pageMetadata":{"title":"How Kadoa works","description":"The building blocks of Kadoa and how they fit together","href":"/docs/how-kadoa-works"},"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: \"The building blocks of Kadoa and how they fit together\"\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`,p:`p`,..._provideComponents(),...props.components},{Frame,Heading,OptimizedImage}=_components;if(!Frame)_missingMdxReference(`Frame`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!OptimizedImage)_missingMdxReference(`OptimizedImage`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`You describe the data you need. Kadoa’s agent writes deterministic pipeline code that extracts it. Each version of the code is reviewed and tested before it runs.`}),`\n`,_jsx(_components.p,{children:`Kadoa watches every workflow and checks every run. When something goes wrong, such as a site change, a failed run, or a data quality check that doesn’t pass, the agent finds the cause, fixes the code, tests the fix, and redeploys it. If the agent can’t fix it, Kadoa’s operations team takes over.`}),`\n`,_jsxs(Frame,{children:[_jsx(OptimizedImage,{className:`mint-block dark:mint-hidden`,src:`https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=ec16e78a2549c96679e5558109208671`,alt:`The Kadoa Engine. Users and sources feed in on the left. Agents discover, navigate, extract, transform, review, and validate to write a versioned, reviewed, tested pipeline revision. The deployed code extracts, transforms, validates, audits, and delivers the data, and a failed check sends it back to the agents for repair. Data goes out to Snowflake, S3, Databricks, the REST API and SDKs, MCP, and webhooks.`,\"data-og-width\":`2316`,width:`2316`,\"data-og-height\":`860`,height:`860`,\"data-path\":`images/how-kadoa-works/engine-light.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=280\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=d2ba2185b8a87883433166a698c4636d 280w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=560\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=6a37286295ef7deac4f2ae6d1ee5afe1 560w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=840\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=122879c66d11d523b3333767ee46b5a9 840w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=1100\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=ecd08c62ca4d3ac55887374e16f8a454 1100w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=1650\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=243a283612fb6e981129dce40af03e84 1650w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-light.png?w=2500\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=5d37fbe47521278922731000aa7f570a 2500w`}),_jsx(OptimizedImage,{className:`mint-hidden dark:mint-block`,src:`https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=a8b133e95954fe2643adc566aff94cc3`,alt:`The Kadoa Engine. Users and sources feed in on the left. Agents discover, navigate, extract, transform, review, and validate to write a versioned, reviewed, tested pipeline revision. The deployed code extracts, transforms, validates, audits, and delivers the data, and a failed check sends it back to the agents for repair. Data goes out to Snowflake, S3, Databricks, the REST API and SDKs, MCP, and webhooks.`,\"data-og-width\":`2316`,width:`2316`,\"data-og-height\":`860`,height:`860`,\"data-path\":`images/how-kadoa-works/engine-dark.png`,\"data-optimize\":`true`,\"data-opv\":`3`,srcset:`https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=280\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=a744249418b00a191e7a78f8ccc70e65 280w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=560\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=e2e8aef0212ed7fde2a04b0cc6303282 560w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=840\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=5bd69c6b01d5fa6140147334dfcf4bc2 840w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=1100\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=3ef3481392e0d00a806d1b416054da9a 1100w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=1650\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=06c65be63f0a49fd5e7ca04fbecf5fb5 1650w, https://mintcdn.com/kadoa/v7EEuXHZHS8J6dQ7/images/how-kadoa-works/engine-dark.png?w=2500\u0026fit=max\u0026auto=format\u0026n=v7EEuXHZHS8J6dQ7\u0026q=85\u0026s=31d06190cae061d54d86649c97300c77 2500w`})]}),`\n`,_jsx(_components.p,{children:`The rest of this page defines each building block and links to its full page.`}),`\n`,_jsx(Heading,{level:`2`,id:`building-a-workflow`,children:`Building a workflow`}),`\n`,_jsx(Heading,{level:`3`,id:`workflows`,children:`Workflows`}),`\n`,_jsxs(_components.p,{children:[`A workflow extracts one kind of data from one website. It runs once, on a schedule, or continuously. Everything below is part of a workflow or works with one. See `,_jsx(_components.a,{href:`/docs/workflows/create/dashboard`,children:`Create workflows`}),`.`]}),`\n`,_jsx(Heading,{level:`3`,id:`sources`,children:`Sources`}),`\n`,_jsxs(_components.p,{children:[`A workflow’s `,_jsx(_components.a,{href:`/docs/ui/workflows/sources`,children:`source`}),` is the set of URLs it extracts from. The agent finds it from your prompt, or you paste the URLs. One workflow covers one website.`]}),`\n`,_jsx(Heading,{level:`3`,id:`prompts`,children:`Prompts`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/workflows/prompts`,children:`prompt`}),` tells the agent what to extract and how to reach it, such as which filters to set or how many pages to go through. Your description of the data becomes the prompt.`]}),`\n`,_jsx(Heading,{level:`3`,id:`schemas`,children:`Schemas`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/workflows/schemas`,children:`schema`}),` lists the fields of each record, with a name, a data type, and a description. The agent proposes the fields, or uses the ones you name.`]}),`\n`,_jsx(Heading,{level:`3`,id:`key-fields`,children:`Key fields`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/workflows/key-fields`,children:`Key fields`}),` identify a record across runs, such as a posting ID or a product URL. They let Kadoa report an edited record as one update instead of a removal and an addition. The agent picks them.`]}),`\n`,_jsx(Heading,{level:`3`,id:`variables`,children:`Variables`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/workflows/variables`,children:`Variables`}),` are named values you use in prompts, such as search terms or ZIP codes. They belong to the team, so every workflow in it can use them. `,_jsx(_components.a,{href:`/docs/workflows/secrets`,children:`Secret variables`}),` hold passwords and API keys, and no one can read their values back.`]}),`\n`,_jsx(Heading,{level:`2`,id:`running-a-workflow`,children:`Running a workflow`}),`\n`,_jsx(Heading,{level:`3`,id:`agent`,children:`Agent`}),`\n`,_jsxs(_components.p,{children:[`Kadoa’s `,_jsx(_components.a,{href:`/docs/agent`,children:`agent`}),` builds each workflow. It finds the source, proposes the schema, and writes and tests the pipeline code. It repairs the code whenever a run or a check fails. You work with it in the dashboard, from code, or from your AI tool.`]}),`\n`,_jsx(Heading,{level:`3`,id:`previews`,children:`Previews`}),`\n`,_jsxs(_components.p,{children:[`Before a workflow goes live, the agent runs it on a small sample, the `,_jsx(_components.a,{href:`/docs/ui/workflows/human-in-the-loop`,children:`preview`}),`. You check the data and approve it. Previews are free.`]}),`\n`,_jsx(Heading,{level:`3`,id:`runs`,children:`Runs`}),`\n`,_jsxs(_components.p,{children:[`A run is one execution of a workflow’s pipeline code. A workflow runs once or on a `,_jsx(_components.a,{href:`/docs/workflows/scheduling`,children:`schedule`}),`. `,_jsx(_components.a,{href:`/docs/workflows/lifecycle`,children:`Workflow lifecycle`}),` lists every state a workflow and a run can be in.`]}),`\n`,_jsx(Heading,{level:`3`,id:`monitors`,children:`Monitors`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/monitors`,children:`monitor`}),` is a workflow that watches a website continuously instead of on a schedule. It alerts you when the data changes. Use one when minutes matter.`]}),`\n`,_jsx(Heading,{level:`3`,id:`changes`,children:`Changes`}),`\n`,_jsxs(_components.p,{children:[`After each run, Kadoa compares the data with the previous run and marks each record as added, removed, or updated. `,_jsx(_components.a,{href:`/docs/change-detection`,children:`Change detection`}),` explains how records are matched.`]}),`\n`,_jsx(Heading,{level:`2`,id:`scaling-up`,children:`Scaling up`}),`\n`,_jsx(Heading,{level:`3`,id:`templates`,children:`Templates`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/templates`,children:`template`}),` is one configuration that many workflows share, such as the setup prompt, schema, and schedule. You change the template once, then roll the change out to its linked workflows.`]}),`\n`,_jsx(Heading,{level:`3`,id:`datasets`,children:`Datasets`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/datasets`,children:`dataset`}),` is the same kind of record collected from many websites. Each website gets its own workflow, and one template keeps them all in the same structure.`]}),`\n`,_jsx(Heading,{level:`2`,id:`delivery-and-alerts`,children:`Delivery and alerts`}),`\n`,_jsx(Heading,{level:`3`,id:`destinations`,children:`Destinations`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/destinations/overview`,children:`Destinations`}),` receive the data of each completed run: Amazon S3, Google Cloud Storage, Snowflake, Databricks, or SFTP. You can also `,_jsx(_components.a,{href:`/docs/export-data`,children:`export data`}),` on demand as a download, through the API, or from your AI tool.`]}),`\n`,_jsx(Heading,{level:`3`,id:`notifications`,children:`Notifications`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.a,{href:`/docs/notifications`,children:`Notifications`}),` alert you when a workflow finishes, fails, recovers, or finds changes. Each one goes to a channel: an email address, a Slack channel, a webhook, or a WebSocket.`]}),`\n`,_jsx(Heading,{level:`2`,id:`teams`,children:`Teams`}),`\n`,_jsxs(_components.p,{children:[`A `,_jsx(_components.a,{href:`/docs/workspaces`,children:`team`}),` holds your workflows, data, variables, templates, and channels. Every member sees the team’s workflows, and `,_jsx(_components.a,{href:`/docs/ui/team-management`,children:`roles`}),` decide who can change what.`]})]})}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":"How Kadoa works","description":"The building blocks of Kadoa and how they fit together","href":"/docs/how-kadoa-works"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Building a workflow","slug":"building-a-workflow","depth":2,"children":[{"title":"Workflows","slug":"workflows","depth":3,"children":[]},{"title":"Sources","slug":"sources","depth":3,"children":[]},{"title":"Prompts","slug":"prompts","depth":3,"children":[]},{"title":"Schemas","slug":"schemas","depth":3,"children":[]},{"title":"Key fields","slug":"key-fields","depth":3,"children":[]},{"title":"Variables","slug":"variables","depth":3,"children":[]}]},{"title":"Running a workflow","slug":"running-a-workflow","depth":2,"children":[{"title":"Agent","slug":"agent","depth":3,"children":[]},{"title":"Previews","slug":"previews","depth":3,"children":[]},{"title":"Runs","slug":"runs","depth":3,"children":[]},{"title":"Monitors","slug":"monitors","depth":3,"children":[]},{"title":"Changes","slug":"changes","depth":3,"children":[]}]},{"title":"Scaling up","slug":"scaling-up","depth":2,"children":[{"title":"Templates","slug":"templates","depth":3,"children":[]},{"title":"Datasets","slug":"datasets","depth":3,"children":[]}]},{"title":"Delivery and alerts","slug":"delivery-and-alerts","depth":2,"children":[{"title":"Destinations","slug":"destinations","depth":3,"children":[]},{"title":"Notifications","slug":"notifications","depth":3,"children":[]}]},{"title":"Teams","slug":"teams","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/_mintlify/custom/kadoa/c67f9ac954426fc4/fonts.js"],"dynamicCss":".mint-block {\n display: block\n}\n.mint-hidden {\n display: none\n}\n.dark\\:mint-block:is(.dark *) {\n display: block\n}\n.dark\\:mint-hidden:is(.dark *) {\n display: none\n}","subdomain":"kadoa","siteName":"Kadoa Documentation","title":"How Kadoa works - Kadoa Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T21:22:14.748Z","originalFileLocation":"docs/how-kadoa-works.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=\"The building blocks of Kadoa and how they fit together\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kadoa Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_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/kadoa/WdUKDmwYX3I6vjmm/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"How Kadoa works - Kadoa Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"The building blocks of Kadoa and how they fit together\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kadoa Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.kadoa.com/docs/how-kadoa-works\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://kadoa.mintlify.app/_mintlify/api/og/v2?division=Concepts\u0026amp;title=How+Kadoa+works\u0026amp;description=The+building+blocks+of+Kadoa+and+how+they+fit+together\u0026amp;theme=afa28d6325190d37297991d8\u0026amp;signature=306c4ed2890d928e6051ac862e4d2da0c0c4bc89c9890e0b7bd87b11ecd8d60e\">\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=\"How Kadoa works - Kadoa Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"The building blocks of Kadoa and how they fit together\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://kadoa.mintlify.app/_mintlify/api/og/v2?division=Concepts\u0026amp;title=How+Kadoa+works\u0026amp;description=The+building+blocks+of+Kadoa+and+how+they+fit+together\u0026amp;theme=afa28d6325190d37297991d8\u0026amp;signature=306c4ed2890d928e6051ac862e4d2da0c0c4bc89c9890e0b7bd87b11ecd8d60e\">\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/kadoa/WdUKDmwYX3I6vjmm/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kadoa Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#ea580c\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.kadoa.com/docs/how-kadoa-works\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/how-kadoa-works.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.kadoa.com/#organization\",\"name\":\"Kadoa Documentation\",\"url\":\"https://docs.kadoa.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/kadoa/dCOYM0EuffD9qYID/logo/kadoa-logo.svg?fit=max\u0026auto=format\u0026n=dCOYM0EuffD9qYID\u0026q=85\u0026s=344d5ae11cb3c2519a3c1541507ebed5\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.kadoa.com#website\",\"name\":\"Kadoa Documentation\",\"url\":\"https://docs.kadoa.com\",\"publisher\":{\"@id\":\"https://docs.kadoa.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.kadoa.com/docs/how-kadoa-works#webpage\",\"url\":\"https://docs.kadoa.com/docs/how-kadoa-works\",\"name\":\"How Kadoa works\",\"description\":\"The building blocks of Kadoa and how they fit together\",\"dateModified\":\"2026-10-26T21:22:14.748Z\",\"isPartOf\":{\"@id\":\"https://docs.kadoa.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.kadoa.com/docs/how-kadoa-works#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.kadoa.com/docs/how-kadoa-works#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Kadoa Documentation\",\"item\":\"https://docs.kadoa.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How Kadoa works\",\"item\":\"https://docs.kadoa.com/docs/how-kadoa-works\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.kadoa.com/docs/how-kadoa-works#article\",\"headline\":\"How Kadoa works\",\"name\":\"How Kadoa works\",\"description\":\"The building blocks of Kadoa and how they fit together\",\"url\":\"https://docs.kadoa.com/docs/how-kadoa-works\",\"mainEntityOfPage\":{\"@id\":\"https://docs.kadoa.com/docs/how-kadoa-works#webpage\"},\"dateModified\":\"2026-10-26T21:22:14.748Z\",\"publisher\":{\"@id\":\"https://docs.kadoa.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.kadoa.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kadoa Documentation\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kadoa Documentation","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":{"style":"duotone","name":"clock-rotate-left"},"href":"https://www.kadoa.com/changelog"},{"anchor":"Trust Center","icon":{"style":"duotone","name":"shield-check"},"href":"https://trust.kadoa.com"},{"anchor":"Contact Us","icon":{"style":"duotone","name":"envelope"},"href":"https://www.kadoa.com/contact"}]},"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","icon":"rocket","pages":[{"title":"Introduction","mode":"wide","href":"/docs/introduction"},{"title":"Quickstart","description":"Create your first workflow and get its data from the dashboard, the SDK and API, or your AI tool.","href":"/docs/quickstart"}]},{"group":"Concepts","icon":"cube","pages":[{"title":"How Kadoa works","href":"/docs/how-kadoa-works"},{"title":"Agent","description":"What Kadoa's agent does, its two chats, and when it needs you","href":"/docs/agent"},{"title":"Workflow lifecycle","href":"/docs/workflows/lifecycle"}]},{"group":"Security \u0026 Compliance","icon":"shield-check","pages":[{"group":"Security","pages":[{"title":"Introduction","href":"/docs/security/introduction"},{"title":"IP ACL","href":"/docs/security/ip-allowlist"},{"title":"SCIM","href":"/docs/security/scim"},{"title":"Single Sign-On (SSO)","href":"/docs/security/sso"}]},{"group":"Compliance","pages":[{"title":"Overview","href":"/docs/security/compliance"},{"title":"Compliance Center","href":"/docs/compliance-center"}]}]},{"group":"Build workflows","icon":"hammer","pages":[{"group":"Create workflows","pages":[{"title":"Create workflows in the dashboard","sidebarTitle":"Dashboard","href":"/docs/workflows/create/dashboard"},{"title":"Create workflows with the SDK \u0026 API","sidebarTitle":"SDK \u0026 API","href":"/docs/workflows/create/sdk"},{"title":"Create workflows from your AI tool","sidebarTitle":"MCP","href":"/docs/workflows/create/mcp"}]},{"title":"Sources","href":"/docs/ui/workflows/sources"},{"title":"Prompts","href":"/docs/workflows/prompts"},{"title":"Schemas","href":"/docs/workflows/schemas"},{"title":"Key fields","href":"/docs/workflows/key-fields"},{"group":"Variables","pages":[{"title":"Variables","sidebarTitle":"Overview","href":"/docs/workflows/variables"},{"title":"Secret variables","href":"/docs/workflows/secrets"}]},{"title":"Scheduling","href":"/docs/workflows/scheduling"},{"title":"Triggers","href":"/docs/ui/workflows/triggers"},{"title":"Preview and approval","href":"/docs/ui/workflows/human-in-the-loop"},{"title":"Work with the agent","href":"/docs/workflows/agent"},{"title":"Manage workflows","href":"/docs/workflows/manage"},{"title":"Error handling","href":"/docs/workflows/error-handling"},{"group":"Debug \u0026 QA","pages":[{"title":"Pipeline","href":"/docs/ui/workflows/pipeline"},{"title":"Data Explorer","href":"/docs/ui/data-explorer"}]}]},{"group":"Templates","icon":"copy","pages":[{"title":"Templates","sidebarTitle":"Overview","href":"/docs/templates"},{"title":"Template best practices","sidebarTitle":"Best practices","href":"/docs/templates/best-practices"},{"title":"Build a dataset","sidebarTitle":"Datasets","href":"/docs/datasets"}]},{"group":"Monitor \u0026 alert","icon":"bell","pages":[{"title":"Monitors","href":"/docs/monitors"},{"title":"Change detection","href":"/docs/change-detection"},{"title":"Notifications","href":"/docs/notifications"},{"title":"Data quality","href":"/docs/data-quality"},{"title":"Observability","href":"/docs/observability"}]},{"group":"MCP","icon":"robot","pages":[{"title":"Connect your AI tool","sidebarTitle":"Overview","href":"/docs/sdk/mcp"},{"group":"AI tools","pages":[{"title":"Claude","href":"/docs/sdk/mcp/claude"},{"title":"ChatGPT and Codex","href":"/docs/sdk/mcp/chatgpt"},{"title":"Cursor","href":"/docs/sdk/mcp/cursor"},{"title":"Gemini and Antigravity","href":"/docs/sdk/mcp/gemini"}]},{"title":"MCP tools","href":"/docs/sdk/mcp-tools"},{"title":"MCP Service Connector","sidebarTitle":"Service connector","href":"/docs/sdk/mcp-service-connector"}]},{"group":"Integrations","icon":"plug","pages":[{"title":"Integrations","sidebarTitle":"Overview","href":"/docs/destinations/overview"},{"title":"Export data","href":"/docs/export-data"},{"group":"Data delivery","expanded":true,"pages":[{"title":"How data destinations work","href":"/docs/destinations/data-destinations"},{"title":"Amazon S3","href":"/docs/destinations/amazon-s3"},{"title":"Google Cloud Storage","href":"/docs/destinations/google-cloud-storage"},{"title":"SFTP","href":"/docs/destinations/sftp"},{"title":"Snowflake","href":"/docs/destinations/snowflake"},{"title":"Databricks","href":"/docs/destinations/databricks"}]},{"group":"Events \u0026 streaming","expanded":true,"pages":[{"title":"Webhooks","href":"/docs/destinations/webhooks"},{"title":"WebSockets","href":"/docs/destinations/websockets"}]},{"group":"Notification channels","expanded":true,"pages":[{"title":"Email","href":"/docs/destinations/email"},{"title":"Slack","href":"/docs/destinations/slack"}]}]},{"group":"Administration","icon":"building","pages":[{"title":"Teams","href":"/docs/workspaces"},{"title":"Members and roles","href":"/docs/ui/team-management"},{"title":"Onboard a new team","href":"/docs/onboarding"},{"title":"API keys","href":"/docs/api-keys"},{"title":"AI personalization","href":"/docs/ui/ai-personalization"},{"title":"Usage \u0026 billing","href":"/docs/usage"},{"title":"Support Center","href":"/docs/support-center"}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/introduction"}]}]},"title":"How Kadoa works - Kadoa Documentation","buildId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","deploymentId":"dpl_DFJrtvUi8HS5F9nkooKuDJsuD5BM","dynamics":["07c022d89b","a74be98ba7"],"chunks":["Frame-COGkNuA6.js","DynamicMarkdown-85clUA0i.js","zoom-image-lightbox-BZxD9MAj.js","lightbox-handle-r17bVUz3.js"]}