MENU navbar-image

🔎 Google

Google search API for public Google results.

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.

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."
        ]
    }
}
 

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."
        ]
    }
}
 

Request      

GET v1/google/news

Headers

Authorization Bearer YOUR_API_KEY

Query Parameters

Parameter Type Description
q required string

Search query, up to 400 characters. Example: technology

page optional integer

Results page, 1 to 10 (default 1).

country optional string

Two-letter country code (default us).

language optional string

Two-letter language code (default en).

time optional string

Only results from the past hour, day, week, month, or year.

safe optional string

SafeSearch: active (default) or off.

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."
        ]
    }
}
 

Request      

GET v1/google/images

Headers

Authorization Bearer YOUR_API_KEY

Query Parameters

Parameter Type Description
q required string

Search query, up to 400 characters. Example: laravel

page optional integer

Results page, 1 to 10 (default 1).

country optional string

Two-letter country code (default us).

language optional string

Two-letter language code (default en).

time optional string

Only results from the past hour, day, week, month, or year.

safe optional string

SafeSearch: active (default) or off.

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."
        ]
    }
}
 

Request      

GET v1/google/videos

Headers

Authorization Bearer YOUR_API_KEY

Query Parameters

Parameter Type Description
q required string

Search query, up to 400 characters. Example: laravel

page optional integer

Results page, 1 to 10 (default 1).

country optional string

Two-letter country code (default us).

language optional string

Two-letter language code (default en).

time optional string

Only results from the past hour, day, week, month, or year.

safe optional string

SafeSearch: active (default) or off.

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."
        ]
    }
}
 

Request      

GET v1/google/suggest

Headers

Authorization Bearer YOUR_API_KEY

Query Parameters

Parameter Type Description
q required string

Partial search query. Example: laravel

country optional string

Two-letter country code (default us).

language optional string

Two-letter language code (default en).