extractly-api

AI-powered web scraping and structured data extraction API.

v1.0.0Base: https://extractly.me/apiAuth: bearer
Chat with this API

Use this API

Web

Chat in the browser →

CLI (one command)

agentbridge chat extractly-api

SDK / Agents

fetch("/api/extractly-api/manifest")

MCP (Claude Desktop / Cursor / Windsurf)

{
  "mcpServers": {
    "extractly-api": {
      "command": "npx",
      "args": ["@agentbridgeai/mcp", "--api", "extractly-api"]
    }
  }
}

Add to ~/.claude/claude_desktop_config.json or Cursor/Windsurf MCP settings.

Actions (7)

POST/scrape

scrapeWebsite

Scrape website content

Parameters

urlstringrequiredWebsite URL to scrape
maxPagesintegerMaximum number of pages to scrape
modestringScraping mode
POST/extract

extractStructuredData

Extract structured JSON data using AI

Parameters

scrapedDatastringrequiredScraped website content
templatePromptstringrequiredExtraction prompt defining JSON schema
providerstringAI provider to use (e.g., gemini, openai)
POST/map

mapWebsite

Discover all URLs on a website

Parameters

urlstringrequiredWebsite URL to discover all internal links
GET/templates

listTemplates

List extraction templates

POST/templates

createTemplate

Create a new extraction template

Parameters

idstringid
namestringname
promptstringprompt
PUT/templates

updateTemplate

Update an extraction template

Parameters

idstringrequiredid
idstringid
namestringname
promptstringprompt
DELETE/templates

deleteTemplate

Delete an extraction template

Parameters

idstringrequiredid

Original OpenAPI Spec

{
  "openapi": "3.1.0",
  "info": {
    "title": "Extractly API",
    "description": "AI-powered web scraping and structured data extraction API.",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://extractly.me/api"
    }
  ],
  "components": {
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer"
      }
    },
    "schemas": {
      "ScrapeRequest": {
        "type": "object",
        "required": ["url"],
        "properties": {
          "url": {
            "type": "string",
            "description": "Website URL to scrape"
          },
          "maxPages": {
            "type": "integer",
            "description": "Maximum number of pages to scrape",
            "default": 1
          },
          "mode": {
            "type": "string",
            "enum": ["optimized", "deep"],
            "description": "Scraping mode"
          }
        }
      },
      "ExtractRequest": {
        "type": "object",
        "required": ["scrapedData", "templatePrompt"],
        "properties": {
          "scrapedData": {
            "type": "string",
            "description": "Scraped website content"
          },
          "templatePrompt": {
            "type": "string",
            "description": "Extraction prompt defining JSON schema"
          },
          "provider": {
            "type": "string",
            "description": "AI provider to use (e.g., gemini, openai)"
          }
        }
      },
      "MapRequest": {
        "type": "object",
        "required": ["url"],
        "properties": {
          "url": {
            "type": "string",
            "description": "Website URL to discover all internal links"
          }
        }
      },
      "Template": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "prompt": {
            "type": "string"
          }
        }
      }
    }
  },
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "paths": {
    "/scrape": {
      "post": {
        "operationId": "scrapeWebsite",
        "summary": "Scrape website content",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ScrapeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Scraped content returned"
          }
        }
      }
    },
    "/extract": {
      "post": {
        "operationId": "extractStructuredData",
        "summary": "Extract structured JSON data using AI",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExtractRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Structured JSON extracted"
          }
        }
      }
    },
    "/map": {
      "post": {
        "operationId": "mapWebsite",
        "summary": "Discover all URLs on a website",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MapRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "List of discovered URLs"
          }
        }
      }
    },
    "/templates": {
      "get": {
        "operationId": "listTemplates",
        "summary": "List extraction templates",
        "responses": {
          "200": {
            "description": "List of templates"
          }
        }
      },
      "post": {
        "operationId": "createTemplate",
        "summary": "Create a new extraction template",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Template"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Template created"
          }
        }
      },
      "put": {
        "operationId": "updateTemplate",
        "summary": "Update an extraction template",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Template"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Template updated"
          }
        }
      },
      "delete": {
        "operationId": "deleteTemplate",
        "summary": "Delete an extraction template",
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Template deleted"
          }
        }
      }
    }
  }
}