Skip to main content

Prerequisites

Choose Your Approach

SDK

TypeScript/Node.js and Python SDKs for type-safe development

REST API

Language-agnostic HTTP API for any platform

CLI

Manage workflows from the terminal and CI/CD pipelines

MCP Server

Use Kadoa from ChatGPT, Claude, Cursor, and other AI assistants

Installation

SDK

npm install @kadoa/node-sdk
You can view the Kadoa SDK source code on GitHub.

CLI

npm install -g @kadoa/cli
Sign in with OAuth (or set KADOA_ACCESS_TOKEN for non-interactive use):
kadoa login
Enable tab completions for workflow IDs, subcommands, and flags:
# Add to ~/.zshrc
eval "$(kadoa completion zsh)"
Zsh shows workflow names inline: kadoa get <TAB> displays abc123 -- My Workflow.
See the full CLI reference for all commands.

MCP Server

The remote MCP server at https://mcp.kadoa.com/mcp requires no local install or API key; connect from your MCP client and sign in with your Kadoa account via OAuth. See MCP Server setup for per-client instructions. For local use via stdio:
npx -y @kadoa/mcp

Quick Start

import { KadoaClient } from '@kadoa/node-sdk';

const client = new KadoaClient({
  apiKey: 'YOUR_API_KEY'
});

const result = await client.extraction.run({
  urls: ["https://sandbox.kadoa.com/ecommerce"],
  name: "My First Extraction",
  limit: 10,
});

console.log(result.data);
from kadoa_sdk import KadoaClient, KadoaClientConfig

client = KadoaClient(KadoaClientConfig(api_key="YOUR_API_KEY"))

result = client.extraction.run(
    ExtractionOptions(
        urls=["https://sandbox.kadoa.com/ecommerce"],
        name="My First Extraction",
        limit=10,
    )
)

print(result.data)
kadoa create "Extract product names and prices" \
  --url https://sandbox.kadoa.com/ecommerce \
  --name "My First Extraction"
> "Extract product names and prices from https://sandbox.kadoa.com/ecommerce"
# 1. Create workflow with schema definition
curl -X POST https://api.kadoa.com/v4/workflows \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "urls": ["https://sandbox.kadoa.com/ecommerce"],
    "name": "My First Extraction",
    "entity": "Product",
    "fields": [
      {
        "name": "title",
        "dataType": "STRING",
        "description": "Product name"
      },
      {
        "name": "price",
        "dataType": "MONEY",
        "description": "Product price"
      }
    ]
  }'

# Response:
# {
#   "success": true,
#   "workflowId": "507f1f77bcf86cd799439011"
# }

# 2. Check workflow status
curl -X GET https://api.kadoa.com/v4/workflows/507f1f77bcf86cd799439011 \
  -H "x-api-key: YOUR_API_KEY"

# 3. Get the data (once extraction is complete)
curl -X GET https://api.kadoa.com/v4/workflows/507f1f77bcf86cd799439011/data \
  -H "x-api-key: YOUR_API_KEY"
That’s it! With the SDK, data is automatically extracted. With the API, you define the schema and then retrieve your structured data.

Define What to Extract

For more control, specify exactly what fields you want:
const workflow = await client
  .extract({
    urls: ["https://sandbox.kadoa.com/ecommerce"],
    name: "Product Monitor",
    extraction: (builder) =>
      builder
        .entity("Product")
        .field("name", "Product name", "STRING", {
          example: "MacBook Pro",
        })
        .field("price", "Price in USD", "MONEY")
        .field("inStock", "Is available", "BOOLEAN"),
  })
  .create();

const result = await workflow.run({ limit: 10 });
const response = await result.fetchData({});
console.log(response.data);
extract_options = ExtractOptions(
    urls=["https://sandbox.kadoa.com/ecommerce"],
    name="Product Monitor",
    extraction=lambda builder: builder.entity("Product")
    .field("name", "Product name", "STRING", FieldOptions(example="MacBook Pro"))
    .field("price", "Price in USD", "MONEY")
    .field("inStock", "Is available", "BOOLEAN"),
)

workflow = client.extract(extract_options).create()
print(f"Workflow created: {workflow.workflow_id}")

result = workflow.run(RunWorkflowOptions(limit=10))
response = result.fetch_data({})
print(response.data)
kadoa create "Extract product name, price, and availability" \
  --url https://sandbox.kadoa.com/ecommerce \
  --name "Product Monitor" \
  --entity "Product"
> "Extract product name, price in USD, and availability from https://sandbox.kadoa.com/ecommerce"
// POST https://api.kadoa.com/v4/workflows
{
  "urls": ["https://sandbox.kadoa.com/ecommerce"],
  "name": "Product Monitor",
  "entity": "Product",
  "fields": [
    {
      "name": "name",
      "dataType": "STRING",
      "description": "Product name"
    },
    {
      "name": "price",
      "dataType": "MONEY",
      "description": "Price in USD"
    },
    {
      "name": "inStock",
      "dataType": "BOOLEAN",
      "description": "Is available"
    }
  ]
}

Next Steps