NewIntroducing semantic snapshotsPair every capture with structured DOM data →

For editors and curators

Turn a list of links into clean article text for summaries

Read every article on your shortlist as clean Markdown, without the banners and pop-ups, ready to summarise.

The problem

A weekly newsletter starts as forty open tabs. Each article sits behind a consent banner, a sign-up modal and a sticky video, and pasting its text into a model to draft a summary drags all of that along too.

How domscout handles it

POST /scrape renders the article and returns it as Markdown that keeps the headings, lists, links and image alt text. cleanup hides likely consent banners, newsletter prompts, chat widgets and pop-up backdrops before the text is read, and preserveSelectors keeps anything it would otherwise hide by mistake. The title and description come back in metadata, so each summary can carry its source. Send the Markdown to your own model with your house style.

Where it shows up

  • Draft summaries for a weekly newsletter.
  • A reading digest for a team channel.
  • Source text for a research brief, with a link back to each article.

The request

POST /scrape. cleanup starts at Pro and adds 1 credit, so each article costs 2. Without it, the same request works on every plan for 1.

cURL
curl -X POST https://api.domscout.io/scrape \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://news.example.com/2026/10/the-article",
    "cleanup": true
  }'
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://news.example.com/2026/10/the-article", cleanup: true }),
});
const result = await response.json();
console.log(result.markdown);
Python
import requests

response = requests.post(
    "https://api.domscout.io/scrape",
    headers={"x-api-key": "YOUR_API_KEY"},
    json={
        "url": "https://news.example.com/2026/10/the-article",
        "cleanup": True
    },
)
print(response.json()["markdown"])
Go
package main

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

func main() {
	body, _ := json.Marshal(map[string]any{
		"url": "https://news.example.com/2026/10/the-article",
		"cleanup": true,
	})
	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()

	var result map[string]any
	json.NewDecoder(res.Body).Decode(&result)
	fmt.Println(result["markdown"])
}
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://news.example.com/2026/10/the-article',
        'cleanup' => true
    ]),
]);
$response = curl_exec($ch);
if ($response === false) {
    throw new RuntimeException(curl_error($ch));
}
$result = json_decode($response, true);
print_r($result['markdown']);
Ruby
require "json"
require "net/http"

response = Net::HTTP.post(
  URI("https://api.domscout.io/scrape"),
  { url: "https://news.example.com/2026/10/the-article", cleanup: true }.to_json,
  "Content-Type" => "application/json",
  "x-api-key" => "YOUR_API_KEY"
)
puts JSON.parse(response.body)["markdown"]
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://news.example.com/2026/10/the-article",
                "cleanup": true
            }
            """;
        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 System.Text.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://news.example.com/2026/10/the-article",
    cleanup = true
});
var result = await response.Content.ReadFromJsonAsync<JsonElement>();
Console.WriteLine(result.GetProperty("markdown"));

Go further

More in AI and agents: Web access for AI agents · llms.txt from your docs · Screenshots for vision models · Rendering generated HTML · Coding agents checking their work · FAQ drafts from documentation · All use cases

Give your product a browser.

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