Web Search

We recommend some implementations of commonly used web search tools.

API Free Tier Pricing Model Docs
Google Custom Search JSON API 100 queries/day free $5 per 1000 queries. Link
Bing Web Search API 1,000 queries/month $15–$25 per 1,000 queries. Link
DuckDuckGo Instant Answer Completely free (Instant Answers only, no URLs) No paid plans; usage unlimited, but data is limited Link
Brave Search API 2,000 queries/month free $3 per 1k queries for Base, $5 per 1k for Pro Link
SerpApi 100 searches/month free Start at $75/month for 5,000 searches Link
RapidAPI Many options Many options Link

Example Python Code

1. Google Custom Search JSON API

import requests

API_KEY = "YOUR_API_KEY"
CX_ID = "YOUR_CX_ID"
query = "example"

url = "https://www.googleapis.com/customsearch/v1"
params = {
    "key": API_KEY,
    "cx": CX_ID,
    "q": query
}

response = requests.get(url, params=params)
results = response.json()
print(results)

2. Bing Web Search API

import requests

SUBSCRIPTION_KEY = "YOUR_BING_API_KEY"
query = "example"

url = "https://api.bing.microsoft.com/v7.0/search"
headers = {"Ocp-Apim-Subscription-Key": SUBSCRIPTION_KEY}
params = {"q": query}

response = requests.get(url, headers=headers, params=params)
results = response.json()
print(results)

3. DuckDuckGo Instant Answer

import requests

query = "example"
url = "https://api.duckduckgo.com/"
params = {
    "q": query,
    "format": "json"
}

response = requests.get(url, params=params)
results = response.json()
print(results)

4. Brave Search API

import requests

SUBSCRIPTION_TOKEN = "YOUR_BRAVE_API_TOKEN"
query = "example"

url = "https://api.search.brave.com/res/v1/web/search"
headers = {
    "X-Subscription-Token": SUBSCRIPTION_TOKEN
}
params = {
    "q": query
}

response = requests.get(url, headers=headers, params=params)
results = response.json()
print(results)

5. SerpApi

import requests

API_KEY = "YOUR_SERPAPI_KEY"
query = "example"

url = "https://serpapi.com/search"
params = {
    "engine": "google",
    "q": query,
    "api_key": API_KEY
}

response = requests.get(url, params=params)
results = response.json()
print(results)