curl --request POST \
--url https://api.geekflare.com/metascraping \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com",
"device": "desktop",
"blockAds": true,
"renderJS": true,
"proxyCountry": "us",
"format": "json",
"fileOutput": false
}
'import requests
url = "https://api.geekflare.com/metascraping"
payload = {
"url": "https://example.com",
"device": "desktop",
"blockAds": True,
"renderJS": True,
"proxyCountry": "us",
"format": "json",
"fileOutput": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://example.com',
device: 'desktop',
blockAds: true,
renderJS: true,
proxyCountry: 'us',
format: 'json',
fileOutput: false
})
};
fetch('https://api.geekflare.com/metascraping', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.geekflare.com/metascraping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://example.com',
'device' => 'desktop',
'blockAds' => true,
'renderJS' => true,
'proxyCountry' => 'us',
'format' => 'json',
'fileOutput' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.geekflare.com/metascraping"
payload := strings.NewReader("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.geekflare.com/metascraping")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geekflare.com/metascraping")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}"
response = http.request(request)
puts response.read_body{
"timestamp": 1783063255117,
"apiStatus": "success",
"apiCode": 200,
"meta": {
"url": "https://example.com",
"device": "desktop",
"format": "json",
"fileOutput": false,
"blockAds": true,
"renderJS": true,
"test": {
"id": "mxqx9v9y0742lap6altwdteqd28t23nq"
},
"proxyCountry": "<string>"
},
"data": "https://cdn.geekflare.com/tests/webscraping/ZuyhINuAZPQQabbN"
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 400,
"message": "INVALID_URL",
"details": "The URL must be a valid HTTP or HTTPS URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 422,
"message": "NO_METADATA",
"details": "Metadata could not be extracted from the target URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 500,
"message": "CRAWL_FAILED",
"details": "Our crawling service encountered an error while attempting to fetch data from the specified URL."
}Meta Scraping
Extract a page’s meta tags, Open Graph, and Twitter Card data like title, description, canonical URL, images, and more without scraping the full page body.
curl --request POST \
--url https://api.geekflare.com/metascraping \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"url": "https://example.com",
"device": "desktop",
"blockAds": true,
"renderJS": true,
"proxyCountry": "us",
"format": "json",
"fileOutput": false
}
'import requests
url = "https://api.geekflare.com/metascraping"
payload = {
"url": "https://example.com",
"device": "desktop",
"blockAds": True,
"renderJS": True,
"proxyCountry": "us",
"format": "json",
"fileOutput": False
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: 'https://example.com',
device: 'desktop',
blockAds: true,
renderJS: true,
proxyCountry: 'us',
format: 'json',
fileOutput: false
})
};
fetch('https://api.geekflare.com/metascraping', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.geekflare.com/metascraping",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://example.com',
'device' => 'desktop',
'blockAds' => true,
'renderJS' => true,
'proxyCountry' => 'us',
'format' => 'json',
'fileOutput' => false
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.geekflare.com/metascraping"
payload := strings.NewReader("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.geekflare.com/metascraping")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.geekflare.com/metascraping")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"https://example.com\",\n \"device\": \"desktop\",\n \"blockAds\": true,\n \"renderJS\": true,\n \"proxyCountry\": \"us\",\n \"format\": \"json\",\n \"fileOutput\": false\n}"
response = http.request(request)
puts response.read_body{
"timestamp": 1783063255117,
"apiStatus": "success",
"apiCode": 200,
"meta": {
"url": "https://example.com",
"device": "desktop",
"format": "json",
"fileOutput": false,
"blockAds": true,
"renderJS": true,
"test": {
"id": "mxqx9v9y0742lap6altwdteqd28t23nq"
},
"proxyCountry": "<string>"
},
"data": "https://cdn.geekflare.com/tests/webscraping/ZuyhINuAZPQQabbN"
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 400,
"message": "INVALID_URL",
"details": "The URL must be a valid HTTP or HTTPS URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 422,
"message": "NO_METADATA",
"details": "Metadata could not be extracted from the target URL."
}{
"timestamp": 1700000000000,
"apiStatus": "failure",
"apiCode": 500,
"message": "CRAWL_FAILED",
"details": "Our crawling service encountered an error while attempting to fetch data from the specified URL."
}Authorizations
API Key required for all endpoints
Body
Target URL
"https://example.com"
Device type to emulate. Defaults to desktop.
desktop, mobile "desktop"
Whether to block ads
true
Whether to render JavaScript
true
Proxy country code to route the request
"us"
Format of the scraped result. Defaults to html.
markdown, json "json"
Whether to get response in file format
false
Response
Successfully scraped webpage meta
Timestamp of the request in milliseconds
1783063255117
API status message
success, failure "success"
API status code
200
Metadata about the request
Show child attributes
Show child attributes
Scraped data (URL or inline content depending on output)
"https://cdn.geekflare.com/tests/webscraping/ZuyhINuAZPQQabbN"