Give your AI agent the
ability to read any website.
Extractly is a web-extraction tool built for agents. Plug it into Claude, GPT, LangChain, or any framework that supports HTTP or MCP. One call returns clean structured data — names, emails, services, pricing — from any URL.
Two endpoints, no SDK
POST /api/jobs for any URL. POST /api/jobs/discover for find-all-in-city. Bearer auth. That's the whole surface.
Structured JSON, not HTML
Your agent doesn't parse HTML — it gets fields like business.owner.email. LLM reasoning stays cheap because input is already structured.
MCP server included
Drop our MCP config into Claude Desktop and the model gains extract_url + find_leads tools instantly. No code, no deploy.
From user prompt to structured answer
Watch a full cycle play out — exactly what happens between your agent's reasoning and Extractly's web layer.
User asks the agent something
"What services does brightsmiledental.com offer?"
Works with every agent framework
Copy a snippet, drop it into your agent's tool implementation, and your model has web access.
import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic();
const tools = [{
name: "extract_website",
description: "Read a business website and return structured data.",
input_schema: {
type: "object",
properties: { url: { type: "string" } },
required: ["url"],
},
}];
const response = await client.messages.create({
model: "claude-sonnet-4-5",
max_tokens: 1024,
tools,
messages: [{ role: "user", content: "What services does brightsmiledental.com offer?" }],
});
// When Claude calls the tool, hit Extractly:
const extracted = await fetch("https://extractly.me/api/jobs", {
method: "POST",
headers: {
Authorization: "Bearer ext_YOUR_KEY",
"Content-Type": "application/json",
},
body: JSON.stringify({ urls: [url], sync: true }),
}).then((r) => r.json());What agents do with Extractly
Research agents
User asks 'find the owner of every dental practice in Phoenix'. Agent calls find_leads, polls until done, returns a structured answer.
Outbound-email agents
Given a list of company names, agent calls extract_url on each domain to pull owner emails, then drafts personalized cold emails referencing services it found.
Competitive-intel agents
Periodically extract competitor pricing pages, diff against last week's data, surface changes to the team in Slack.
CRM-enrichment agents
For every new HubSpot contact, extract the company's site for owner names and specialties, write structured data back to the contact record.
Pricing for agents is the same as for humans
One API call equals one credit. Free tier gives you 50 calls/month (enough for a prototype). Pro is $29/mo for 1,000 calls. Business is $249/mo for 15,000 calls — where most production agents land.
Common questions
Will my agent count against the same credits as dashboard usage?
Yes. Whether a human or an agent calls the API, it's one credit per URL. Many teams give agents their own API key just for accounting — credits pool is unified.
What's the median latency per call?
2–4 seconds for a single URL extract. Set a 30-second timeout to handle cold-start outliers. Discovery calls (multiple URLs) run as background jobs the agent polls until complete.
Does Extractly handle JavaScript-rendered pages?
Yes. We start with HTTP fetching (fast, cheap) and fall back to a headless browser when a page needs JS rendering. The agent doesn't need to know which path was taken — response shape is identical.
Can I run this from a Vercel / Cloudflare Worker / Edge Function?
Yes. Standard HTTPS endpoint, no IP allowlisting. Works from any environment that can make outbound HTTPS requests.
Can my agent retry on its own when a page is blocked?
We handle retries server-side with exponential backoff and a rotating residential IP pool. The agent only sees the final result — success with structured data, or a clean error code it can handle.
Wire up your first agent in 5 minutes
Grab an API key, paste one of the snippets above into your agent's tool implementation, and your model has web access.