NewIntroducing semantic snapshotsPair every capture with structured DOM data →

For teams whose links get shared

Know what your link will look like before someone shares it

Read the Open Graph and description tags a page publishes, served or rendered, and catch a broken card before it is shared.

The problem

A marketing page goes out without its og:image, a template change gives every product the same title, a client-side framework adds the tags only after its JavaScript runs. Nobody notices until the link is pasted into a chat and shows a blank card.

How domscout handles it

POST /scrape returns the page's title next to the Markdown, and its description, og:title, og:description and og:image in metadata. An empty og: field means the page declares no such tag. Send renderJs: false to read the HTML exactly as your server sends it, which is what many link-preview crawlers read, and compare it with a rendered request to find tags that only exist after JavaScript runs.

Where it shows up

  • A post-deploy check that every public page has a title, a description and an image.
  • A pre-merge check against preview deployments.
  • An audit of the cards across a whole site with a crawl, on Business and above.

The request

POST /scrape. Available on every plan, including the free Hobby plan. Each request costs 1 credit, with or without renderJs.

cURL
curl -X POST https://api.domscout.io/scrape \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://www.example.com/", "renderJs": false}'
Node.js
const response = await fetch("https://api.domscout.io/scrape", {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": "YOUR_API_KEY" },
  body: JSON.stringify({ url: "https://www.example.com/", renderJs: false }),
});
console.log(await response.json());
Python
import requests

response = requests.post(
    "https://api.domscout.io/scrape",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={"url": "https://www.example.com/", "renderJs": False},
)
print(response.json())
Go
package main

import (
	"bytes"
	"encoding/json"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body, _ := json.Marshal(map[string]any{"url": "https://www.example.com/", "renderJs": false})
	req, _ := http.NewRequest("POST", "https://api.domscout.io/scrape", bytes.NewReader(body))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("x-api-key", "YOUR_API_KEY")

	res, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer res.Body.Close()

	raw, _ := io.ReadAll(res.Body)
	fmt.Println(string(raw))
}
PHP
<?php
$ch = curl_init('https://api.domscout.io/scrape');
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'x-api-key: YOUR_API_KEY'],
    CURLOPT_POSTFIELDS => json_encode(['url' => 'https://www.example.com/', 'renderJs' => false]),
]);
$response = curl_exec($ch);
if ($response === false) {
    throw new RuntimeException(curl_error($ch));
}
echo $response;
Ruby
require "json"
require "net/http"

response = Net::HTTP.post(
  URI("https://api.domscout.io/scrape"),
  { url: "https://www.example.com/", renderJs: false }.to_json,
  "Content-Type" => "application/json",
  "x-api-key" => "YOUR_API_KEY"
)
puts response.body
Java
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Capture {
    public static void main(String[] args) throws Exception {
        String body = """
            {"url": "https://www.example.com/", "renderJs": false}
            """;
        HttpRequest request = HttpRequest.newBuilder(URI.create("https://api.domscout.io/scrape"))
            .header("Content-Type", "application/json")
            .header("x-api-key", "YOUR_API_KEY")
            .POST(HttpRequest.BodyPublishers.ofString(body))
            .build();
        HttpResponse<String> response = HttpClient.newHttpClient().send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
C#
using System.Net.Http.Json;

using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY");

var response = await client.PostAsJsonAsync("https://api.domscout.io/scrape", new { url = "https://www.example.com/", renderJs = false });
Console.WriteLine(await response.Content.ReadAsStringAsync());

Go further

Other use cases: Web access for AI agents · Website change monitoring · Web archiving and evidence · Crawling a whole site · SEO regression checks · Thumbnails and link previews · PDFs from your own HTML · Structured data from web pages · Responsive layout checks

Give your product a browser.

Get clean web content and visual proof into your workflow in minutes.