SerpApi Python Library & Package

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.
Installation
To install the serpapi package, simply run the following command:
$ pip install serpapi
Please 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.
Simple Usage
Let's start by searching for Coffee on Google:
import os
import serpapi
client = 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"].
Error handling
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.
import os
import serpapi
# 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',
})
except serpapi.HTTPError as e:
if e.status_code == 401: # Invalid API key
print(e.error) # "Invalid API key. Your API key should be here: https://serpapi.com/manage-api-key"
elif e.status_code == 400: # Missing required parameter
pass
elif e.status_code == 429: # Exceeds the hourly throughput limit OR account run out of searches
pass
except serpapi.TimeoutError as e:
# Handle timeout
print(f"The request timed out: {e}")
Documentation
Documentation is available on Read the Docs.
Change history is available on GitHub.
Basic Examples in Python
Search Bing
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'bing',
'q': 'coffee'
})
Search Baidu
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'baidu',
'q': 'coffee',
})
Search Yahoo
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'yahoo',
'p': 'coffee',
})
Search YouTube
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'youtube',
'search_query': 'coffee',
})
Search Walmart
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'walmart',
'query': 'coffee',
})
Search eBay
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'ebay',
'_nkw': 'coffee',
})
Search Naver
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'naver',
'query': 'coffee',
})
Search Home Depot
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'home_depot',
'q': 'table',
})
Search Apple App Store
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'apple_app_store',
'term': 'coffee',
})
Search DuckDuckGo
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'duckduckgo',
'q': 'coffee',
})
Search Google
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google',
'q': 'coffee'
})
Search Google Scholar
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_scholar',
'q': 'coffee',
})
Search Google Autocomplete
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_autocomplete',
'q': 'coffee',
})
Search Google Immersive Product
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_immersive_product',
'page_token': 'eyJlaSI6Im5ZVmxaOXVVTDY2X3A4NFBqTnZELUFjIiwicHJvZHVjdGlkIjoiIiwiY2F0YWxvZ2lkIjoiNTE1NDU2NTc1NTc5MzcxMDY3NSIsImhlYWRsaW5lT2ZmZXJEb2NpZCI6IjI1MDkyMjcwMDUzMjk2NzQwODMiLCJpbWFnZURvY2lkIjoiMTYzOTg5MjU0MDcwMDU4MDA1NTQiLCJyZHMiOiJQQ18zNDg4MDE0MTg3ODgxNzc5NjU0fFBST0RfUENfMzQ4ODAxNDE4Nzg4MTc3OTY1NCIsInF1ZXJ5IjoibGcrdHYiLCJncGNpZCI6IjM0ODgwMTQxODc4ODE3Nzk2NTQiLCJtaWQiOiI1NzY0NjI3ODM3Nzc5MTUzMTMiLCJwdnQiOiJoZyIsInV1bGUiOm51bGx9=',
})
Search Google Reverse Image
import os
import serpapi
client = 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',
})
Search Google Events
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_events',
'q': 'Events in Austin',
})
Search Google Local Services
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_local_services',
'q': 'electrician',
'data_cid': '6745062158417646970',
})
Search Google Maps
import os
import serpapi
client = 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',
})
Search Google Jobs
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_jobs',
'q': 'coffee',
})
Search Google Play
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_play',
'q': 'kite',
'store': 'apps',
})
Search Google Images
import os
import serpapi
client = serpapi.Client(api_key=os.getenv("API_KEY"))
results = client.search({
'engine': 'google_images',
'tbm': 'isch',
'q': 'coffee',
})
License
MIT License.
Contributing
Bug reports and pull requests are welcome on GitHub. Once dependencies are installed, you can run the tests with pytest.
Publishing a new release
- Update the version in
serpapi/__version__.py.
- Push a tag — the release pipeline runs automatically:
git tag v1.2.3
git push origin v1.2.3
This triggers the release workflow, which tests, builds, and publishes to PyPI, then smoke-tests the published package.
Required secrets: PYPI_API_TOKEN (PyPI upload token) and API_KEY (used in smoke-test live search).