Integrate search data into your AI workflow, RAG / fine-tuning, or Python application using this official wrapper for SerpApi.
SerpApi supports Google, Google Maps, Google Shopping, Baidu, Yandex, Yahoo, eBay, App Stores, and more.
Query a vast range of data at scale, including web search results, flight schedules, stock market data, news headlines, and more.
To install the serpapi package, simply run the following command:
$ pip install serpapiPlease note that this package is separate from the legacy serpapi module, which is available on PyPi as google-search-results. This package is maintained by SerpApi, and is the recommended way to access the SerpApi service from Python.
Let's start by searching for Coffee on Google:
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("SERPAPI_KEY"))
results=client.search({
"engine": "google",
"q": "coffee"
})
print(results)The results variable now contains a SerpResults object, which acts just like a standard dictionary, with some convenient functions added on top.
This example runs a search for "coffee" on Google. It then returns the results as a regular Python Hash. See the playground to generate your own code.
The SerpApi key can be obtained from serpapi.com/signup.
Environment variables are a secure, safe, and easy way to manage secrets.
Set export SERPAPI_KEY=<secret_serpapi_key> in your shell.
Python accesses these variables from os.environ["SERPAPI_KEY"].
Unsuccessful requests raise serpapi.HTTPError or serpapi.TimeoutError exceptions. The returned status code will reflect the sort of error that occurred, please refer to Status and Error Codes Documentation for more details.
importosimportserpapi# A default timeout can be set here.client=serpapi.Client(api_key=os.getenv("API_KEY"), timeout=10)
try:
results=client.search({
'engine': 'google',
'q': 'coffee',
})
exceptserpapi.HTTPErrorase:
ife.status_code==401: # Invalid API keyprint(e.error) # "Invalid API key. Your API key should be here: https://serpapi.com/manage-api-key"elife.status_code==400: # Missing required parameterpasselife.status_code==429: # Exceeds the hourly throughput limit OR account run out of searchespassexceptserpapi.TimeoutErrorase:
# Handle timeoutprint(f"The request timed out: {e}")Documentation is available on Read the Docs.
Change history is available on GitHub.
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'bing',
'q': 'coffee'
})- API Documentation: serpapi.com/bing-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'baidu',
'q': 'coffee',
})- API Documentation: serpapi.com/baidu-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'yahoo',
'p': 'coffee',
})- API Documentation: serpapi.com/yahoo-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'youtube',
'search_query': 'coffee',
})- API Documentation: serpapi.com/youtube-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'walmart',
'query': 'coffee',
})- API Documentation: serpapi.com/walmart-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'ebay',
'_nkw': 'coffee',
})- API Documentation: serpapi.com/ebay-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'naver',
'query': 'coffee',
})- API Documentation: serpapi.com/naver-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'home_depot',
'q': 'table',
})- API Documentation: serpapi.com/home-depot-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'apple_app_store',
'term': 'coffee',
})- API Documentation: serpapi.com/apple-app-store
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'duckduckgo',
'q': 'coffee',
})- API Documentation: serpapi.com/duckduckgo-search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google',
'q': 'coffee'
})- API Documentation: serpapi.com/search-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_scholar',
'q': 'coffee',
})- API Documentation: serpapi.com/google-scholar-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_autocomplete',
'q': 'coffee',
})- API Documentation: serpapi.com/google-autocomplete-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_immersive_product',
'page_token': 'eyJlaSI6Im5ZVmxaOXVVTDY2X3A4NFBqTnZELUFjIiwicHJvZHVjdGlkIjoiIiwiY2F0YWxvZ2lkIjoiNTE1NDU2NTc1NTc5MzcxMDY3NSIsImhlYWRsaW5lT2ZmZXJEb2NpZCI6IjI1MDkyMjcwMDUzMjk2NzQwODMiLCJpbWFnZURvY2lkIjoiMTYzOTg5MjU0MDcwMDU4MDA1NTQiLCJyZHMiOiJQQ18zNDg4MDE0MTg3ODgxNzc5NjU0fFBST0RfUENfMzQ4ODAxNDE4Nzg4MTc3OTY1NCIsInF1ZXJ5IjoibGcrdHYiLCJncGNpZCI6IjM0ODgwMTQxODc4ODE3Nzk2NTQiLCJtaWQiOiI1NzY0NjI3ODM3Nzc5MTUzMTMiLCJwdnQiOiJoZyIsInV1bGUiOm51bGx9=',
})- API Documentation: serpapi.com/google-immersive-product-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_reverse_image',
'image_url': 'https://i.imgur.com/5bGzZi7.jpg',
'max_results': '1',
})- API Documentation: serpapi.com/google-reverse-image
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_events',
'q': 'Events in Austin',
})- API Documentation: serpapi.com/google-events-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_local_services',
'q': 'electrician',
'data_cid': '6745062158417646970',
})- API Documentation: serpapi.com/google-local-services-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_maps',
'q': 'pizza',
'll': '@40.7455096,-74.0083012,15.1z',
'type': 'search',
})- API Documentation: serpapi.com/google-maps-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_jobs',
'q': 'coffee',
})- API Documentation: serpapi.com/google-jobs-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_play',
'q': 'kite',
'store': 'apps',
})- API Documentation: serpapi.com/google-play-api
importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_images',
'tbm': 'isch',
'q': 'coffee',
})- API Documentation: serpapi.com/google-images-api
MIT License.
Bug reports and pull requests are welcome on GitHub. Once dependencies are installed, you can run the tests with pytest.
- Update the version in
serpapi/__version__.py. - Push a tag — the release pipeline runs automatically:
This triggers the release workflow, which tests, builds, and publishes to PyPI, then smoke-tests the published package.
git tag v1.2.3 git push origin v1.2.3
Required secret:
API_KEY(used in smoke-test live search).