DataCore API
Turn any web page into clean, structured, LLM-ready data with a single POST request. Nine endpoints, one client key, zero infrastructure โ powered by an advanced rendering engine with built-in WAF and JS-challenge handling.
Features
Everything you need to feed clean web data to agents, pipelines and dashboards
Built for AI Agents & RAG
Dedicated markdown output, structured metadata and page snapshots sized for LLM context windows. Stop parsing HTML โ start feeding tokens.
WAF & JS-Challenge Handling
An advanced rendering engine executes JavaScript and works through anti-bot front-ends, so hard targets return real content instead of block pages.
Structured by Default
Products, jobs, real-estate listings and company profiles come back as typed JSON fields extracted from structured data โ with smart fallbacks when it is missing.
Change Intelligence
Content hashing per URL tells you what changed since the last call. Perfect for competitive monitoring, price watches and archival alerts.
One Simple Contract
Every endpoint is POST with the same JSON body: clientKey, url, optional maxTimeout. Every response reports success, http_status and elapsed_ms.
Gateway or Direct
Call it directly with your clientKey, or through a marketplace gateway using a proxy-secret header. Same payloads, same responses, either way.
Quick Start
Fetch LLM-ready markdown from any URL in under a minute
curl -X POST https://data.dataleads.pro/v1/markdown \
-H 'Content-Type: application/json' \
-d '{
"clientKey": "YOUR_CLIENT_KEY",
"url": "https://example.com/article",
"maxTimeout": 60000
}'
import requests
resp = requests.post(
"https://data.dataleads.pro/v1/markdown",
json={
"clientKey": "YOUR_CLIENT_KEY",
"url": "https://example.com/article",
"maxTimeout": 60000,
},
timeout=130,
)
data = resp.json()
if data["success"]:
print(data["markdown"][:500])
else:
print("Failed:", resp.status_code, data)
const resp = await fetch("https://data.dataleads.pro/v1/markdown", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
clientKey: process.env.DATACORE_KEY,
url: "https://example.com/article",
maxTimeout: 60000,
}),
});
const data = await resp.json();
if (data.success) console.log(data.markdown.slice(0, 500));
else console.error("Failed:", resp.status, data);
<?php
$ch = curl_init('https://data.dataleads.pro/v1/markdown');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => json_encode([
'clientKey' => getenv('DATACORE_KEY'),
'url' => 'https://example.com/article',
'maxTimeout'=> 60000,
]),
]);
$data = json_decode(curl_exec($ch), true);
if (!empty($data['success'])) {
echo substr($data['markdown'], 0, 500);
}
payload := []byte(`{
"clientKey": "YOUR_CLIENT_KEY",
"url": "https://example.com/article",
"maxTimeout": 60000
}`)
resp, err := http.Post(
"https://data.dataleads.pro/v1/markdown",
"application/json", bytes.NewBuffer(payload))
if err != nil { log.Fatal(err) }
defer resp.Body.Close()
var data map[string]any
json.NewDecoder(resp.Body).Decode(&data)
if data["success"] == true {
fmt.Println(data["markdown"])
}
Getting Access
Two ways to authenticate โ pick whichever matches your setup
Direct API Access
Pass your clientKey in the JSON body of every request. Works from any language, any runtime, any network.
{ "clientKey": "dcore_live_xxx", "url": "https://example.com" }Marketplace Gateway
Access via a marketplace gateway using an X-RapidAPI-Proxy-Secret header instead of the clientKey. Ideal if you subscribe through an API marketplace.
X-RapidAPI-Proxy-Secret: YOUR_PROXY_SECRET
API Endpoints
All data endpoints are POST with a shared JSON body โ only the path changes
Full-page fetch returning complete HTML plus extracted metadata, cookies and the user-agent the page actually saw. Use when you need raw HTML for parsing, archiving or custom extraction.
| Field | Type | Description |
|---|---|---|
| success | bool | True when the fetch succeeded |
| url | string | Final URL after any redirects |
| http_status | int | HTTP status code of the target |
| metadata | object | title, description, og_title, og_image, language, canonical, links[], html_bytes |
| html | string | Full rendered HTML of the page |
| cookies | array | Cookies set during rendering |
| user_agent | string | User-agent used for the fetch |
| elapsed_ms | int | Total processing time in milliseconds |
{
"success": true,
"url": "https://example.com/article",
"http_status": 200,
"metadata": {
"title": "Example Article",
"description": "An example page",
"og_title": "Example Article",
"og_image": "https://example.com/og.png",
"language": "en",
"canonical": "https://example.com/article",
"links": ["https://example.com/", "https://example.com/about"],
"html_bytes": 84213
},
"html": "<!DOCTYPE html>...",
"cookies": [{ "name": "session", "value": "..." }],
"user_agent": "Mozilla/5.0 ...",
"elapsed_ms": 2381
}Converts any URL into clean, LLM-ready markdown โ navigation chrome stripped, content preserved. The workhorse for RAG ingestion, agent browsing and dataset building. Optional include_links (bool, default true) controls whether links are kept in the output.
| Field | Type | Description |
|---|---|---|
| success | bool | True when conversion succeeded |
| title / description / language | string | Page metadata |
| markdown | string | Clean markdown of the main content |
| markdown_chars | int | Character count of the markdown โ handy for token budgeting |
| elapsed_ms | int | Total processing time |
{
"success": true,
"url": "https://example.com/article",
"http_status": 200,
"title": "Example Article",
"description": "An example page",
"language": "en",
"markdown": "# Example Article\n\nLorem ipsum dolor sit amet...",
"markdown_chars": 4812,
"elapsed_ms": 1910
}Structured metadata only โ everything except the HTML body. Cheaper and faster than a full fetch when you just need titles, canonical URLs, OpenGraph data, language and outbound links.
| Field | Type | Description |
|---|---|---|
| title, description, og_title, og_image | string | Core page metadata |
| language | string | Detected page language (BCP-47) |
| canonical | string | Canonical URL if declared |
| links[] | array | All links found on the page |
| html_bytes | int | Size of the underlying HTML |
{
"success": true,
"url": "https://example.com",
"http_status": 200,
"title": "Example Domain",
"description": "An example domain",
"og_title": null,
"og_image": null,
"language": "en",
"canonical": "https://example.com/",
"links": ["https://www.iana.org/domains/example"],
"html_bytes": 1256,
"elapsed_ms": 1102
}E-commerce product extraction driven by structured data, with heuristic fallbacks when a shop ships incomplete markup. Point it at any product URL to get name, price, currency, stock and images โ the core of any pricing-intelligence pipeline.
| Field | Type | Description |
|---|---|---|
| name | string | Product name |
| price / currency | string | Current price and ISO currency code |
| stock | string | Availability as reported by the page |
| images[] | array | Product image URLs |
| source | string | structured-data or best-effort |
{
"success": true,
"url": "https://shop.example.com/product/12345",
"http_status": 200,
"name": "Aero Runner Sneaker",
"price": "129.99",
"currency": "EUR",
"stock": "InStock",
"images": ["https://shop.example.com/img/12345_1.jpg"],
"source": "structured-data",
"elapsed_ms": 2450
}Content change detection. Each call computes a content hash for the URL and compares it against the previous call for that same URL. The first call for a URL establishes the baseline and returns changed=false.
| Field | Type | Description |
|---|---|---|
| changed | bool | Whether content changed since the previous call |
| previous_snapshot | string | Hash of the previous snapshot |
| current_hash | string | Hash of the current content |
| current_text_chars | int | Visible text length of the current page |
| text_preview | string | Short text preview of the current content |
{
"success": true,
"url": "https://example.com/pricing",
"http_status": 200,
"changed": true,
"previous_snapshot": "a1b2c3d4...",
"current_hash": "e5f6a7b8...",
"current_text_chars": 3041,
"text_preview": "Pricing โ Starter $29 ...",
"elapsed_ms": 1720
}Detects the technology stack behind any website using 25+ signatures across CMS platforms, frameworks, analytics, payments and chat widgets. Ideal for sales prospecting, market research and technical due diligence.
| Field | Type | Description |
|---|---|---|
| technologies[] | array | Detected technologies by name and category |
| generator_meta[] | array | Values of meta generator tags found on the page |
{
"success": true,
"url": "https://shop.example.com",
"http_status": 200,
"technologies": [
{ "name": "Shopify", "category": "ecommerce" },
{ "name": "Google Analytics", "category": "analytics" },
{ "name": "Stripe", "category": "payments" },
{ "name": "Intercom", "category": "chat" }
],
"generator_meta": ["Shopify"],
"elapsed_ms": 2054
}Builds a company profile straight from its website: name, description, contact emails, social profiles, detected technologies and external links. One call replaces a manual crawl for lead enrichment and sales research.
| Field | Type | Description |
|---|---|---|
| company_name | string | Best-guess company name from the site |
| description | string | Company description from meta or body copy |
| emails[] | array | Contact emails found on the site |
| social_profiles[] | array | LinkedIn, Twitter/X, Facebook, Instagram, YouTube and similar links |
| technologies[] | array | Detected stack (same engine as /v1/tech) |
| external_links[] | array | Outbound links to other domains |
{
"success": true,
"url": "https://example-company.com",
"http_status": 200,
"company_name": "Example Company",
"description": "We build great things",
"emails": ["hello@example-company.com"],
"social_profiles": ["https://www.linkedin.com/company/example-company"],
"technologies": [{ "name": "React", "category": "framework" }],
"external_links": ["https://partner.example.org"],
"elapsed_ms": 3120
}Detects job openings on any careers page using JobPosting structured data first, then a career-link scan as fallback. Useful for hiring signals, investor diligence and lead scoring by headcount growth.
| Field | Type | Description |
|---|---|---|
| jobs_found | int | Number of job postings detected |
| jobs[] | array | title, organisation, date_posted, location, salary |
| job_link_count | int | Count of career-related links found |
| source | string | structured-data or link-scan |
{
"success": true,
"url": "https://example-company.com/careers",
"http_status": 200,
"jobs_found": 2,
"jobs": [
{
"title": "Senior Backend Engineer",
"organisation": "Example Company",
"date_posted": "2026-08-14",
"location": "Remote โ EU",
"salary": "โฌ80k โ โฌ100k"
},
{
"title": "Product Designer",
"organisation": "Example Company",
"date_posted": "2026-08-02",
"location": "Berlin, DE",
"salary": null
}
],
"job_link_count": 5,
"source": "structured-data",
"elapsed_ms": 2890
}Extracts property listings from RealEstateListing, Apartment and House structured data, with a price/beds/baths pattern fallback for sites that lack markup. Feed portals, valuation models and market analytics with normalized listing data.
| Field | Type | Description |
|---|---|---|
| listings[] | array | name, address, price, currency, beds, baths |
| source | string | structured-data or pattern |
{
"success": true,
"url": "https://realestate.example.com/listings",
"http_status": 200,
"listings": [
{
"name": "Sunny 2-Bed Apartment",
"address": "12 Example Street, Lisbon",
"price": "325000",
"currency": "EUR",
"beds": 2,
"baths": 1
}
],
"source": "structured-data",
"elapsed_ms": 2650
}Operational endpoints, no request body needed.
| Endpoint | Description |
|---|---|
| GET /health | Service heartbeat โ returns status and engine |
| GET /v1/usage | Per-key call counts for your clientKey |
| GET /docs | Interactive Swagger UI (live OpenAPI spec) |
| GET /openapi.json | Machine-readable OpenAPI 3.0 specification |
{
"status": "ok",
"engine": "advanced rendering engine"
}Product Mapping
Nine endpoints, packaged into focused data products for different jobs-to-be-done
| Endpoint | Product | Who it is for |
|---|---|---|
| /v1/fetch /v1/markdown |
Agent Web Access API ยท Research-Web API for LLMs | AI SaaS teams building agents, RAG pipelines and LLM research tools that need clean tokens instead of raw HTML. |
| /v1/product | Universal Commerce Data API ยท Pricing Intelligence | E-commerce brands and price-monitoring tools tracking competitor catalogs and MAP compliance. |
| /v1/diff | Web Change Intelligence ยท Competitive Intelligence | Growth and strategy teams watching pricing pages, docs, press releases and competitor moves. |
| /v1/tech | Website Technology Intelligence | Sales teams and market researchers profiling prospect tech stacks for targeting and enrichment. |
| /v1/company | Company Signals API | RevOps and GTM engineers enriching CRM records with emails, socials and stack data straight from company websites. |
| /v1/jobs | Job Market Intelligence API | Investors and recruiters tracking hiring signals and headcount growth as a company-health indicator. |
| /v1/realestate | Real-Estate Data Graph | Proptech platforms and analysts aggregating listings into valuation and market analytics. |
Error Reference
Predictable error semantics โ know exactly what went wrong and what to do next
401 Invalid clientKey
{ "detail": "Invalid clientKey" }
Authentication failed. Check the clientKey in the JSON body, or the X-RapidAPI-Proxy-Secret header if you are calling through the marketplace gateway. Keys are environment-specific โ do not mix sandbox and production keys.
502 Fetch failed
{ "detail": "Fetch failed: ..." }
The target site was unreachable, blocked the request or did not respond in time. Retry with a higher maxTimeout, verify the URL, or treat the target as temporarily unavailable. These errors are safe to retry with backoff.
Interactive Try-It
Send a live request from your browser โ data goes straight from your machine to the API