Skip to content
Scrappa Get API key

Startpage Search API

Anonymous web search API

Use Startpage search results in JSON without building your own scraper

This page is for developers searching for a Startpage API, Startpage search API, or privacy-focused search API. Start here if you need anonymous web results, neutral SERP monitoring, or a compliant alternative to browser-based Startpage scraping.

Startpage API documentation for developers who need Startpage search results in JSON. Scrappa's GET /api/startpage/search endpoint returns anonymous Startpage web results with titles, descriptions, URLs, domains, and pagination metadata.

Startpage API for search results

Use this Startpage API endpoint when you want Startpage results in an API response instead of maintaining your own scraper. It fits SERP monitoring, privacy-first search products, research pipelines, rank tracking, compliance review tools, and automation workflows that need anonymous web search data.

What you get from the Startpage API

Each response includes ranked organic results with position, title, description, url, and domain, plus total_results and source. You can use language, page, and safe_search to request localized or filtered Startpage result sets for privacy-focused search products, SEO analysis, and market research.

How to call the Startpage Search API

Send a GET request to /api/startpage/search with a required query parameter and your Scrappa API key in the x-api-key header. Add language=english, page=0, and safe_search=true when you need reproducible first-page results for monitoring, testing, or customer-facing search features.

Startpage response fields for developers

Use position to preserve ranking order, title and description for result previews, url for destination links, and domain for grouping or deduplication. The source field identifies the response as startpage, which helps when you combine this endpoint with Google Search, Brave Search, or other Scrappa search APIs in the same pipeline.

When to use Startpage instead of other search APIs

Choose this endpoint when you need Google-quality results through a privacy proxy and do not want user-level personalization or tracking signals affecting the result set. That makes it useful for neutral SERP monitoring, compliance-sensitive products, and teams comparing multiple search engines from one Scrappa account.

Implementation and indexing notes

The Startpage Search API is a REST endpoint, so it works with backend jobs, browser-based admin tools, AI agents, and scheduled rank-tracking workflows. For authentication details, see the API authentication guide. To test a request in the browser before writing code, open the API playground or compare usage against the pay-as-you-go scraping API guide.

Related search workflow docs

Use Google Search API when you need Google web results, or Brave Search API when you want an alternative independent web index through the same Scrappa account. For a broader overview of pricing, positioning, and usage, see the Startpage API overview.

Run this endpoint

Startpage Search API 1 credit/request

Endpoint

GET https://scrappa.co/api/startpage/search?query=privacy+tips
Request preview GET
https://scrappa.co/api/startpage/search?query=privacy+tips
Auth header x-api-key
Cost 1 credit/request
query = privacy tips
Response preview 200 OK
{
    "data": [
        {
            "position": 1,
            "title": "Privacy Tips - Example",
            "description": "Example search result demonstrating the response format from Startpage.",
            "url": "https://example.com/privacy-tips",
            "domain": "example.com"
        }
    ],
    "people_also_search_for": [],
    "people_also_ask": [],
    "knowledge_graph": null,
    "see_results_about": null,
...

Parameters

Start with the required fields, then add optional filters only when your use case needs them.

Runnable path

1 required parameter needed before sending a request.

3 optional filters available.

query string Required

The search query string. Example: privacy tips

Example value privacy tips
language string Optional

Language filter for search results. Values: english, deutsch, french, spanish, italian, portuguese, dutch, russian, chinese, japanese, arabic, all. Default: english

Example value en
page integer Optional

Page number for pagination. Range: 0-10. Default: 0

Example value 1

Request Examples

<?php

$curl = curl_init();

curl_setopt_array($curl, [
    CURLOPT_URL => "https://scrappa.co/api/startpage/search?query=privacy+tips",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_HTTPHEADER => [
        "x-api-key: YOUR_API_KEY_HERE"
    ],
]);

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
    echo $response;
}
<?php

use Illuminate\Support\Facades\Http;

$response = Http::timeout(30)
    ->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
    ->get('https://scrappa.co/api/startpage/search?query=privacy+tips');

if ($response->successful()) {
    echo $response->body();
} else {
    echo "Error: " . $response->status();
}
const options = {
    method: 'GET',
    headers: {
        'x-api-key': 'YOUR_API_KEY_HERE'
    }
};

fetch('https://scrappa.co/api/startpage/search?query=privacy+tips', options)
    .then(response => {
        if (!response.ok) {
            throw new Error(`HTTP error! status: ${response.status}`);
        }
        return response.text();
    })
    .then(data => console.log(data))
    .catch(error => console.error('Error:', error));
const axios = require('axios');

const options = {
    method: 'GET',
    url: 'https://scrappa.co/api/startpage/search?query=privacy+tips',
    headers: {
        x-api-key: 'YOUR_API_KEY_HERE',
    }
};

try {
    const response = await axios(options);
    console.log(response.data);
} catch (error) {
    console.error('Error:', error.message);
}
require 'net/http'
require 'uri'

uri = URI.parse("https://scrappa.co/api/startpage/search?query=privacy+tips")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'

request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'

begin
    response = http.request(request)
    puts response.body
rescue => e
    puts "Error: #{e.message}"
end
import http.client
import json

conn = http.client.HTTPSConnection("scrappa.co")

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    conn.request("GET", "/api/startpage/search?query=privacy+tips", headers=headers)
    res = conn.getresponse()
    data = res.read()
    print(data.decode("utf-8"))
except Exception as e:
    print(f"Error: {e}")
finally:
    conn.close()
import requests

headers = {
    'x-api-key': 'YOUR_API_KEY_HERE',
}

try:
    response = requests.get('https://scrappa.co/api/startpage/search?query=privacy+tips', headers=headers)
    response.raise_for_status()
    print(response.text)
except requests.exceptions.RequestException as e:
    print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;

public class ApiExample {
    public static void main(String[] args) {
        OkHttpClient client = new OkHttpClient();

        Request request = new Request.Builder()
            .url("https://scrappa.co/api/startpage/search?query=privacy+tips")
        .addHeader("x-api-key", "YOUR_API_KEY_HERE")
            .build();

        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                System.out.println(response.body().string());
            } else {
                System.out.println("Error: " + response.code());
            }
        } catch (IOException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}
package main

import (
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {
    client := &http.Client{}
    req, err := http.NewRequest("GET", "https://scrappa.co/api/startpage/search?query=privacy+tips", nil)
    if err != nil {
        fmt.Println("Error creating request:", err)
        return
    }
    req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")

    resp, err := client.Do(req)
    if err != nil {
        fmt.Println("Error making request:", err)
        return
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Error reading response:", err)
        return
    }

    fmt.Println(string(body))
}
#!/bin/bash

curl -X GET \
    -H "x-api-key: YOUR_API_KEY_HERE" \
    "https://scrappa.co/api/startpage/search?query=privacy+tips"
using System;
using System.Net.Http;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        using var client = new HttpClient();
        client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");

        try
        {
            var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/startpage/search?query=privacy+tips"));
            var content = await response.Content.ReadAsStringAsync();
            Console.WriteLine(content);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }
}
import axios from 'axios';

async function run(): Promise<void> {
    try {
        const response = await axios({
            method: 'GET',
            url: 'https://scrappa.co/api/startpage/search?query=privacy+tips',
            headers: {
        'x-api-key': 'YOUR_API_KEY_HERE',
            },
        });

        console.log(response.data);
    } catch (error) {
        console.error('Error:', error);
    }
}

void run();
use reqwest::Client;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = Client::new();

    let response = client
        .get("https://scrappa.co/api/startpage/search?query=privacy+tips")
        .header("x-api-key", "YOUR_API_KEY_HERE")
        .send()
        .await?;

    println!("{}", response.text().await?);

    Ok(())
}

Response Schema

JSON Response
200 OK
{
    "data": [
        {
            "position": 1,
            "title": "Privacy Tips - Example",
            "description": "Example search result demonstrating the response format from Startpage.",
            "url": "https://example.com/privacy-tips",
            "domain": "example.com"
        }
    ],
    "people_also_search_for": [],
    "people_also_ask": [],
    "knowledge_graph": null,
    "see_results_about": null,
    "twitter_card": null,
    "total_results": 1,
    "source": "startpage"
}

Generate Code with AI

Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.

Startpage Search API FAQ

Answers for developers comparing Startpage search APIs, privacy-focused SERP access, and Startpage result extraction workflows.

Is there a Startpage Search API for developers?

Startpage does not provide a widely used public developer API for general web search access. Scrappa exposes Startpage search results through a documented API endpoint so you can request structured JSON with an API key.

What does the Startpage Search API return?

The response returns ranked web search results with position, title, description, url, and domain, plus top-level fields such as total_results, source, and optional search enrichments when available.

Can I filter Startpage results by language or page?

Yes. The endpoint supports language and page parameters so you can request localized result sets and paginate through Startpage search results. You can also use safe_search to control adult-content filtering.

Why use Scrappa for Startpage search data?

Scrappa handles the request, extraction, and normalization layer for you. That lets you work with Startpage search results as JSON instead of building and maintaining your own scraper, parser, or anti-bot handling.

How do I authenticate Startpage Search API requests?

Send your Scrappa API key in the x-api-key request header. The same key works across Startpage Search, Google Search, Brave Search, and the rest of Scrappa's API endpoints.

Can I combine Startpage results with other search APIs?

Yes. The response includes a source value of startpage, so you can store, compare, or merge Startpage results with Google Search API and Brave Search API responses in one search pipeline.

What is the best first request for testing the endpoint?

Start with /api/startpage/search?query=privacy+tools&language=english&page=0&safe_search=true. That request exercises the required query field plus the main localization, pagination, and filtering parameters.

Related reading

Try It Live

Test this endpoint in our interactive playground with real data.