Google search API for public Google results.
- Web results, including the blocks on the results page
- News, Images, and Videos
- Search suggestions
language and country choose the Google interface language and region. The defaults are en and us. Each page has 10 results, and page runs from 1 to 10. Repeating the same request within 15 minutes returns the same results.
Web
Google web search with every results block.
GET /v1/search
requires authentication
Returns one page of web results, with every block on that page filled in. The blocks are organic results, ads,
People Also Ask, related searches, the knowledge panel, top stories, the local pack, spelling suggestions, and
the results text. A block that is not on the page is an empty list. knowledge is left out when the page has no
knowledge panel. A search with no matches returns an empty list of organic results.
Example request:
import requests
import json
url = 'https://api.steadyapi.com/v1/google/search'
params = {
'q': 'laravel',
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/google/search';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
'query' => [
'q' => 'laravel',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api.steadyapi.com/v1/google/search"
);
const params = {
"q": "laravel",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());curl --request GET \
--get "https://api.steadyapi.com/v1/google/search?q=laravel" \
--header "Authorization: Bearer YOUR_API_KEY"Example response (200, Success):
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"q": "how to boil an egg",
"country": "us",
"language": "en",
"page": 1
},
"body": {
"organic": [
{
"position": 1,
"title": "How to make seafood boil | Joyful Cook",
"url": "https://www.facebook.com/joyfulcookrecipes/videos/how-to-make-seafood-boil/1460129022670091/",
"displayedUrl": "1.4K+ reactions · 4 days ago",
"snippet": "A culinary tutorial provides instructions for making a stovetop seafood boil and a complementary garlic butter sauce.",
"date": null,
"sitelinks": []
},
{
"position": 2,
"title": "2 pot Crawfish Boil with Dak Prescott",
"url": "https://www.meatchurch.com/blogs/recipes/2-pot-crawfish-boil-with-dak-prescott?srsltid=AU7gw4VOGf4imaqGFJJWl0Tklx66CHLpS81JQuBMzminlJB151aQJyND",
"displayedUrl": "https://www.meatchurch.com › blogs › recipes › 2-pot-...",
"snippet": "Crawfish are boiled in clean water, which purges them, and are then dumped in a 140 degree soak pot … 100 quart boiling pots with baskets and ...",
"date": "Jun 12, 2024",
"sitelinks": []
},
{
"position": 3,
"title": "Alert Center • BOIL WATER NOTICE - TOWN WIDE",
"url": "https://newtontownhall.com/AlertCenter.aspx?AID=BOIL-WATER-NOTICE-TOWN-WIDE-37",
"displayedUrl": "https://newtontownhall.com › AlertCenter › AID=BOIL...",
"snippet": "Town of Newton water customers are instructed to bring tap water to a rolling boil for one minute and allow the tap water to cool before using, ...",
"date": "2 days ago",
"sitelinks": []
}
],
"ads": [
{
"block": "bottom",
"position": 1,
"title": "Best Car Insurance 2026 | Fast & Free Quotes Online",
"url": "https://www.nerdwallet.com/",
"displayedUrl": "https://www.nerdwallet.com › compare › quotes",
"description": "Compare this month's insurance offerings. Find the right coverage for your budget. Don't miss out on savings. Compare top insurers and get the best rate..."
}
],
"peopleAlsoAsk": [
{
"question": "Do you put eggs in water before or after it's boiling?",
"snippet": "Easy peeling: Hot water stops the egg white from sticking to the inner shell membrane.",
"title": "Reddit · r/Cooking",
"url": "https://www.reddit.com/r/Cooking/comments/uytyjk/i_dont_know_who_to_believe_when_it_comes_to/"
},
{
"question": "Do you boil the water before you put the eggs in?",
"snippet": "lowering eggs into already-boiling water makes them much easier to peel",
"title": "Serious Eats",
"url": "https://www.seriouseats.com/the-secrets-to-peeling-hard-boiled-eggs"
}
],
"relatedSearches": [
{
"query": "How to boil crawfish"
},
{
"query": "After the boil soup recipes"
},
{
"query": "Simple after boil soup recipe"
},
{
"query": "Crawfish boil near me"
}
],
"knowledge": {
"title": "Eiffel Tower",
"subtitle": "Tower in Paris, France",
"description": "The Eiffel Tower is a lattice tower on the Champ de Mars in Paris, France. It is named after the engineer Gustave Eiffel, whose company designed and built the tower from 1887 to 1889.",
"url": "https://www.toureiffel.paris/fr",
"facts": [
{
"label": "Address",
"value": "Av. Gustave Eiffel, 75007 Paris, France"
},
{
"label": "Height",
"value": "984′, 1,083′ to tip"
},
{
"label": "Construction started",
"value": "January 26, 1887"
},
{
"label": "Architects",
"value": "Maurice Koechlin, Stephen Sauvestre, Émile Nouguier"
}
]
},
"topStories": [
{
"title": "NASA's SpaceX Crew-13 launches mission to International Space Station",
"source": "Fox Business",
"url": "https://www.foxbusiness.com/technology/nasas-spacex-crew-13-mission-launches-from-cape-canaveral-space-force-station-florida",
"date": "4 hours ago",
"snippet": null,
"thumbnail": "data:image/…,/9j/4AAQSkZJRgABAQAAAQABAAD..."
},
{
"title": "SpaceX Crew-13 NASA launch live updates: Crew Dragon astronauts reach orbit, chase space station",
"source": "Space",
"url": "https://www.space.com/news/live/spacex-nasa-crew-13-astronauts-launch-to-iss-october-1-2026",
"date": "3 hours ago",
"snippet": null,
"thumbnail": "data:image/…,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
],
"localPack": [
{
"title": "Terrible Love",
"rating": 4.9,
"reviewCount": 432,
"address": "3908 Avenue B",
"category": "Coffee shop"
},
{
"title": "Cosmic Pickle",
"rating": 4.7,
"reviewCount": 4400,
"address": "121 Pickle Rd",
"category": "Coffee shop"
}
],
"spelling": {
"correctedQuery": null
},
"resultsText": "About 240,000,000 results"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (422, Error Validations):
{
"message": "The ticker field is required.",
"errors": {
"ticker": [
"The ticker field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Tabs
The News, Images, and Videos tabs. Each is its own request.
GET /v1/news
requires authentication
Returns the News tab. Each result includes the headline, publisher, link, publish time, snippet, and thumbnail.
Example request:
import requests
import json
url = 'https://api.steadyapi.com/v1/google/news'
params = {
'q': 'technology',
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/google/news';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
'query' => [
'q' => 'technology',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api.steadyapi.com/v1/google/news"
);
const params = {
"q": "technology",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());curl --request GET \
--get "https://api.steadyapi.com/v1/google/news?q=technology" \
--header "Authorization: Bearer YOUR_API_KEY"Example response (200, Success):
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"q": "technology",
"country": "us",
"language": "en",
"page": 1
},
"body": [
{
"title": "Google Wants Hollywood to Stop Being So Afraid of Technology",
"source": "The New York Times",
"url": "https://www.nytimes.com/2026/09/30/business/media/google-hollywood-krya-sedgwick.html",
"date": "24 hours ago",
"snippet": "100 Zeros, a collaboration between Google and Range Media Partners, aims to give the tech giant a foothold in movies, TV and emerging forms...",
"thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
},
{
"title": "Trump urges public to trust industry self-policing of AI technology",
"source": "The Washington Post",
"url": "https://www.washingtonpost.com/technology/2026/09/29/trump-is-selling-an-ai-golden-age-fears-about-perils-spiral/",
"date": "1 day ago",
"snippet": "Washington's concerns are at a peak after rogue AI agents probed government websites, but the White House has focused on the technology's...",
"thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
},
{
"title": "Pete Hegseth appoints Elon Musk to US taskforce on future of warfare",
"source": "The Guardian",
"url": "https://www.theguardian.com/technology/2026/sep/30/pete-hegseth-elon-musk-taskforce-warfare",
"date": "22 hours ago",
"snippet": null,
"thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
]
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (422, Error Validations):
{
"message": "The ticker field is required.",
"errors": {
"ticker": [
"The ticker field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET /v1/images
requires authentication
Returns the Images tab. Each result includes the title, the page the image is on, the image URL and size as Google lists them, and Google's thumbnail.
Example request:
import requests
import json
url = 'https://api.steadyapi.com/v1/google/images'
params = {
'q': 'laravel',
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/google/images';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
'query' => [
'q' => 'laravel',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api.steadyapi.com/v1/google/images"
);
const params = {
"q": "laravel",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());curl --request GET \
--get "https://api.steadyapi.com/v1/google/images?q=laravel" \
--header "Authorization: Bearer YOUR_API_KEY"Example response (200, Success):
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"q": "laravel",
"country": "us",
"language": "en",
"page": 1
},
"body": [
{
"title": "Laravel - Wikipedia",
"sourcePage": "https://en.wikipedia.org/wiki/Laravel",
"imageUrl": "https://thumb.wikimedia.org/wikipedia/commons/thumb/9/9a/Laravel.svg/1280px-Laravel.svg.png?utm_source=en.wikipedia.org&utm_campaign=index&utm_content=thumbnail",
"thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQ8Kj77fhuLL4hzygvmwCkOXRoeWRAnvp2arinnTC1gcg&s=10",
"width": 1280,
"height": 1332
},
{
"title": "What is Laravel? | Learn 12 Key Features in the Laravel Framework",
"sourcePage": "https://www.educba.com/what-is-laravel/",
"imageUrl": "https://cdn.educba.com/academy/wp-content/uploads/2019/09/What-is-Laravel.png",
"thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSVx5zmH2fZ3wZwAMtBBaKSlONrnrSRpfQ5MX_nKjnuGw&s=10",
"width": 889,
"height": 484
},
{
"title": "What is Laravel? A Guide by Regur Technology Solutions to Understanding Laravel Framework - Regur Technology Solutions",
"sourcePage": "https://www.regur.net/blog/what-is-laravel/",
"imageUrl": "https://www.regur.net/_next/image/?url=https%3A%2F%2Fi0.wp.com%2Fcms.regur.net%2Fwp-content%2Fuploads%2F2025%2F02%2Fwhat-is-laravel.webp%3Ffit%3D1200%252C720%26ssl%3D1&w=2048&q=75",
"thumbnail": "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRkijbCWTpgVmB4QarVmhk_IrOMq3LMZDbrx4_3mCsUWg&s=10",
"width": 1200,
"height": 720
}
]
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (422, Error Validations):
{
"message": "The ticker field is required.",
"errors": {
"ticker": [
"The ticker field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
GET /v1/videos
requires authentication
Returns the Videos tab. Each result includes the title, channel, link, duration, upload date, and thumbnail.
Example request:
import requests
import json
url = 'https://api.steadyapi.com/v1/google/videos'
params = {
'q': 'laravel',
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/google/videos';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
'query' => [
'q' => 'laravel',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api.steadyapi.com/v1/google/videos"
);
const params = {
"q": "laravel",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());curl --request GET \
--get "https://api.steadyapi.com/v1/google/videos?q=laravel" \
--header "Authorization: Bearer YOUR_API_KEY"Example response (200, Success):
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"q": "laravel",
"country": "us",
"language": "en",
"page": 1
},
"body": [
{
"title": "Setting up your Laravel project",
"channel": "Laravel",
"url": "https://laravel.com/learn/getting-started-with-laravel/setting-up-your-laravel-project",
"duration": null,
"date": "Aug 25, 2025",
"thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
},
{
"title": "Laravel From Scratch [Part 1] - Series Introduction",
"channel": "Traversy Media",
"url": "https://www.youtube.com/watch?v=EU7PRmCpx-0",
"duration": "17:16",
"date": "Jun 3, 2017",
"thumbnail": "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
},
{
"title": "Laravel Tutorial for Beginners #1 - Introduction & Setup",
"channel": "Net Ninja",
"url": "https://www.youtube.com/watch?v=DKnn8TlJ4MA",
"duration": "15:18",
"date": "Oct 28, 2024",
"thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
]
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (422, Error Validations):
{
"message": "The ticker field is required.",
"errors": {
"ticker": [
"The ticker field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Suggest
Autocomplete suggestions.
GET /v1/suggest
requires authentication
Returns the suggestions Google shows while someone types a search.
Example request:
import requests
import json
url = 'https://api.steadyapi.com/v1/google/suggest'
params = {
'q': 'laravel',
}
headers = {
'Authorization': 'Bearer YOUR_API_KEY'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/google/suggest';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY',
],
'query' => [
'q' => 'laravel',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api.steadyapi.com/v1/google/suggest"
);
const params = {
"q": "laravel",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer YOUR_API_KEY",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());curl --request GET \
--get "https://api.steadyapi.com/v1/google/suggest?q=laravel" \
--header "Authorization: Bearer YOUR_API_KEY"Example response (200, Success):
{
"meta": {
"version": "v1.0",
"status": 200,
"copywrite": "https://steadyapi.com",
"q": "laravel",
"country": "us",
"language": "en"
},
"body": [
"laravel",
"laravel cloud",
"laravel vapor",
"laravel forge",
"laravel framework",
"laravel herd",
"laravel boost",
"laravel docs"
]
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Example response (422, Error Validations):
{
"message": "The ticker field is required.",
"errors": {
"ticker": [
"The ticker field is required."
]
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.