First-party app
Diffbot

Diffbot

Extract structured data from any web page, search the Diffbot Knowledge Graph, enrich people and companies, analyze text and crawl whole sites with Diffbot.

stable AI & Machine LearningSearchDeveloper Tools

About

Diffbot ships in the w6w first-party pack. It declares 20 actions, 3 health checks, and the host runs its code in a sandbox that never sees the credential.

App id
io.w6w.diffbot
Version
0.1.0
Author
w6w
Licence
MIT
Categories
AI & Machine Learning · Search · Developer Tools

Overview

Diffbot turns the web into structured data. Point the Extract APIs at any URL and get clean JSON back: articles with author, date, sentiment and tags, products with price and specs, images, videos, discussions, events, listings and job posts, or let Analyze classify the page first. HTML you already hold can be sent straight to the same extractors.

The Knowledge Graph holds billions of organizations, people, articles and products. A workflow can search it with DQL, or enrich a partial record (a name, a website, an email) into the best matching person or company. The Natural Language API reads raw text for entities, sentiment, facts, categories and a summary, and Web Search queries Diffbot’s web index.

Crawl jobs spider a whole site and run every matching page through an Extract API; a workflow can create, poll, pause, restart, delete and download them. Account usage is readable at any time.

The connection holds a Diffbot API token. Credits are billed per call (1 per extracted page, 25 per Knowledge Graph entity), so the actions that spend more say so.

Build with Diffbot

Three routes to the same 20 actions. The Workflow tab is generated from Diffbot's own manifest and carries its real ids, so it is copy-pasteable; the Code and CLI examples are the same call for any action on any app, so every app-specific value in them is a blank you fill in.

Get Account Usage

account-get

Read the plan, status, monthly credit allowance and daily API usage of the connected token. The token and child tokens the vendor echoes are never returned.

Create Crawl Job

crawl-create

Start a Crawl job: spider a site from seed URLs and run every matching page through an Extract API. Starts immediately; each processed page costs 1 credit.

Get Crawl Data

crawl-data-get

Download the extracted records of a crawl job (JSON, or CSV of top-level fields), or its URL report. The token the vendor includes in each record is removed.

Delete Crawl Job

crawl-delete

Delete a crawl job and all of its extracted data, permanently.

Get Crawl Job Status

crawl-get

Read one crawl job by name, or list every crawl and bulk job on the token, with status, page counts and objects found. Poll this until `finished` is true.

Pause / Resume / Restart Crawl

crawl-update

Pause or resume a crawl job, force a new round, or restart it. Restart erases everything processed so far and re-processes every seed (and re-bills the pages).

Analyze Page

extract-analyze

Let Diffbot classify any URL (article, product, discussion, image, video, …) and extract it as that type in one call. Use Extract Article/Product/… instead to force a specific schema. 1 credit per page (2 with a proxy).

Extract Article

extract-article

Extract the clean text, author, date, sentiment, tags, categories and images of an article or blog post. 1 credit per page (2 with a proxy); the optional Natural Language add-ons bill extra.

Extract Discussion

extract-discussion

Extract a thread of posts (forum thread, comment section, product reviews) with authors, dates and replies. 1 credit per page; every extra page concatenated is a separate billed call.

Extract Event (beta)

extract-event

Extract a single-day online or in-person event page: dates, location and description. Beta API. 1 credit per page.

Extract from HTML

extract-html

Send HTML (or plain text, Article API only) you already hold to an Extract API instead of having Diffbot fetch the page. The URL is only used to resolve relative links.

Extract Image

extract-image

Extract the primary image(s) of a page with dimensions, download URLs and recognition tags. 1 credit per page.

Extract Job Post (beta)

extract-job

Extract a job posting: employer, location, requirements, skills and tasks. Beta API. 1 credit per page.

Extract List (beta)

extract-list

Extract a listings page (news index, product listing, search results) into its items. Beta API. 1 credit per page.

Extract Product

extract-product

Extract price, availability, specs, brand, images and reviews from a product page. 1 credit per page (2 with a proxy).

Extract Video

extract-video

Extract a video page: metadata, thumbnails, direct video URL, embed code and view count. 1 credit per page.

Enhance Person or Organization

kg-enhance

Enrich a person or organization from partial data (name, website, email, …): Diffbot scores candidates and returns the best Knowledge Graph match. 25 credits per match, 100 with refresh; no match costs nothing.

Search Knowledge Graph (DQL)

kg-search

Search Diffbot's Knowledge Graph (organizations, people, articles, products, …) with a DQL query such as `type:Organization locations.city.name:"San Francisco" nbEmployees>5000`. 25 credits per entity returned; a search with no results is free.

Analyze Text (Natural Language)

nl-process-text

Extract entities, sentiment, facts, categories and a summary from raw text with Diffbot's Natural Language API. 1 credit per 10,000 characters.

Web Search

web-search

Search Diffbot's web index and get ranked pages with a relevant content highlight each. Supports the operators after:, before:, site: and url:.

A workflow step names the app and the action, and the editor fills in the connection when you pick one. This is the Step shape from the workflow spec, carrying Diffbot's real ids.

{
  "manifestVersion": "2",
  "name": "diffbot-example",
  "steps": [
    {
      "id": "crawl-create",
      "uses": {
        "app": "io.w6w.diffbot",
        "action": "crawl-create",
        "connection": "conn_YOUR_CONNECTION_ID"
      },
      "with": {
        "name": "<name>",
        "seeds": "<seeds>",
        "apiUrl": "<apiUrl>"
      }
    }
  ]
}

Here are some of the things you can do

  • Create Crawl Job

    perform
    crawl-create
  • Get Account Usage

    read
    account-get
  • Get Crawl Data

    read
    crawl-data-get
  • Get Crawl Job Status

    read
    crawl-get
  • Pause / Resume / Restart Crawl

    perform
    crawl-update

+15 more actions available

Every app-specific value here is a blank you have to fill in. An app action is reached through the connection that authenticates it, so the address is a connection id, not the app id — and connections belong to your account, so a public page cannot know yours. Create one for Diffbot, then fill in the three blanks: conn_YOUR_CONNECTION_ID, the action key, and the parameters that action declares. The call itself is real — the shape is transcribed from the studio's own snippet builder, which prints the same kind of blanks — but nothing in it is specific to Diffbot. The Workflow tab is where this app's real ids are.

Install
npm install @w6w/sdk
yarn add @w6w/sdk
pnpm add @w6w/sdk
deno add npm:@w6w/sdk
Code
import { W6wClient, isActionRun } from "@w6w/sdk";

// Reads W6W_BASE_URL and W6W_TOKEN from the environment when omitted.
const client = new W6wClient();

const envelope = await client.run({
  urn: "conn_YOUR_CONNECTION_ID",
  action: "crawl-create",
  payload: {
    name: "<value>",
    seeds: "<value>",
    apiUrl: "<value>",
    // maxToCrawl: "<value>",
    // maxToProcess: "<value>",
    // maxHops: "<value>",
    // urlCrawlPattern: "<value>",
    // urlProcessPattern: "<value>",
    // pageProcessPattern: "<value>",
    // obeyRobots: "<value>",
    // useProxies: "<value>",
    // notifyEmail: "<value>",
    // notifyWebhook: "<value>",
    // repeat: "<value>",
  },
});

if (isActionRun(envelope)) console.log(envelope.value);
Install the CLI
npm install -g @w6w/cli
CLI
w6w run conn_YOUR_CONNECTION_ID --action crawl-create --payload '{"name":"<value>","seeds":"<value>","apiUrl":"<value>"}'

Give an AI agent Diffbot — without giving it Diffbot's credentials. One MCP endpoint exposes every app, function and workflow the caller is entitled to, as tools it can discover and run. Access is granted per team while we onboard.

One tool call
{
  "name": "w6w_invoke",
  "arguments": {
    "ref": "app:io.w6w.diffbot#crawl-create",
    "input": {
      "name": "<name>",
      "seeds": "<seeds>",
      "apiUrl": "<apiUrl>"
    }
  }
}

Every tool names its target with a single ref. The app: form above doesn't name a connection at all — the host resolves which of the caller's Diffbot connections to sign with, and refuses rather than guesses when the answer is ambiguous.

What the agent gets

Credentials it can't read

The token is attached host-side, at the moment of the call. It is never a tool argument, never in the model's context, and never in a transcript — so a prompt injection has nothing to exfiltrate.

A tool surface scoped to the caller

Tools are derived per end user from what that person has actually connected and is entitled to — not one shared bot identity carrying the union of everyone's access.

A durable workflow in one call

Multi-step work runs on the workflow engine and returns a run handle the agent can poll — retries, branching and state survive the conversation that started them.

Health-aware discovery

Diffbot's declared health checks are on the surface too, so an agent can tell "the vendor is down" from "your credential expired" before it burns a retry on either.

The MCP surface is part of the hosted platform. Diffbot itself is MIT, and the runtime that executes it is source-available (FSL).

Request MCP access

Health checks

Diffbot declares its own checks, so its health is a property of the app rather than something the host guesses at.

service

Diffbot platform status

dependency

API hosts reachable

Unauthenticated request to api, kg, nl and llm .diffbot.com. Diffbot's JSON 401 refusal passes: it proves the application is answering.

quota

Credit headroom