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
Endpoint
https://scrappa.co/api/startpage/search?query=privacy+tips
https://scrappa.co/api/startpage/search?query=privacy+tips
x-api-key
query
= privacy tips
{
"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.
string
Required
The search query string. Example: privacy tips
privacy tips
string
Optional
Language filter for search results. Values: english, deutsch, french, spanish, italian, portuguese, dutch, russian, chinese, japanese, arabic, all. Default: english
en
integer
Optional
Page number for pagination. Range: 0-10. Default: 0
1
boolean
Optional
Safe search filter to exclude adult content. Values: true, false. Default: false
true
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
{
"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
Startpage API overview
Review Scrappa's Startpage positioning, pricing, and privacy-first search use cases from one hub.
Google Search API
Compare Startpage with direct Google results when you need broader search-source coverage.
Brave Search API
Use an independent search index alongside Startpage for search diversification workflows.
MCP integration
Run Startpage search from AI agents and MCP clients with Scrappa's docs and endpoint patterns.
API authentication
Add the required x-api-key header before testing Startpage search requests.
API playground
Run sample Startpage queries and inspect the JSON response before integrating.