Website Content Extraction API: readable text from any page
Give it up to 20 URLs and get back the readable content of each page as Markdown or text, the title and language, and the contact points found on it. Built for feeding pages into a model, enriching a CRM, or checking what a site actually says.
POST/v1/websites/extract
{
"data": [
{
"url": "https://example.com/",
"final_url": "https://example.com/",
"status": "ok",
"http_status": 200,
"title": "Example Domain",
"language": "en",
"word_count": 28,
"content": "# Example Domain\n\nThis domain is for use in illustrative examples…",
"emails": [],
"contact_form_url": null
}
],
"meta": {
"credits_used": 1,
"source": "websites"
}
}
What you get
Every field in the response.
| Field | Meaning |
|---|---|
status | ok, thin (client-rendered page), parked, http_error, not_html, unreachable, blocked, refused |
content, title, language, word_count | Readable content as Markdown or text (output parameter), capped by max_chars |
emails[], socials{}, whatsapp, contact_form_url | Contact points found on the page, with include_contacts |
links[] | Outgoing links when include_links is true |
final_url, http_status, canonical_url, truncated, fetched_at | What was actually fetched and when |
How it works
What happens between your request and the response.
Validated before fetching
URLs must be http or https with a real host; private and internal addresses are refused and never charged.
Fetched from a datacenter address
No residential proxies for business websites. Redirects are followed by hand with every hop checked, and bodies are capped at 3 MB.
Boilerplate removed
Navigation, footers, scripts and cookie banners are stripped; headings, lists, tables and links are kept in Markdown.
Stops on a block
A 403 or a challenge page returns blocked. It is not retried through another address.
Pricing
One credit system for every endpoint.
One credit per page fetched, up to 20 per call. Refused URLs are free. Pages the crawler cannot read because they need JavaScript come back thin and cost one credit.
Questions
Things people ask about the Website Content Extraction API.
Does it render JavaScript?
No. Server-rendered pages, which includes most business websites, WordPress, Shopify and documentation sites, extract fully. A single-page app that renders everything client-side returns status thin with whatever text the HTML carried.
Can I crawl a whole site?
The API takes a list of URLs you already have. For whole-site crawling with robots.txt and sitemap handling, use the Website Crawler actor on the Apify Store.
Is the content cached?
No. Every call fetches the page live, so what you get is what the site serves at that moment.