Extract structured data from any web page, search the Diffbot Knowledge Graph, enrich people and companies, analyze text and crawl whole sites with Diffbot.
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.
io.w6w.diffbotDiffbot 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.
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.
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.
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.
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.
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.
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).
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 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 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 Extract a single-day online or in-person event page: dates, location and description. Beta API. 1 credit per page.
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 the primary image(s) of a page with dimensions, download URLs and recognition tags. 1 credit per page.
extract-job Extract a job posting: employer, location, requirements, skills and tasks. Beta API. 1 credit per page.
extract-list Extract a listings page (news index, product listing, search results) into its items. Beta API. 1 credit per page.
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 a video page: metadata, thumbnails, direct video URL, embed code and view count. 1 credit per page.
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.
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.
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 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>"
}
}
]
}crawl-create account-get crawl-data-get crawl-get 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.
npm install @w6w/sdkyarn add @w6w/sdkpnpm add @w6w/sdkdeno add npm:@w6w/sdkimport { 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); npm install -g @w6w/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.
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.
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.
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.
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).
Diffbot declares its own checks, so its health is a property of the app rather than something the host guesses at.
Unauthenticated request to api, kg, nl and llm .diffbot.com. Diffbot's JSON 401 refusal passes: it proves the application is answering.