Skip to content

Repository files navigation

SerpApi Python Library & Package

Packageserpapi-python

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:

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

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.

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

Documentation is available on Read the Docs.

Change history is available on GitHub.

Basic Examples in Python

Search Bing

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'bing',
'q': 'coffee'
})

Search Baidu

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'baidu',
'q': 'coffee',
})

Search Yahoo

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'yahoo',
'p': 'coffee',
})

Search YouTube

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'youtube',
'search_query': 'coffee',
})

Search Walmart

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'walmart',
'query': 'coffee',
})

Search eBay

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'ebay',
'_nkw': 'coffee',
})

Search Naver

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'naver',
'query': 'coffee',
})

Search Home Depot

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'home_depot',
'q': 'table',
})

Search Apple App Store

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'apple_app_store',
'term': 'coffee',
})

Search DuckDuckGo

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'duckduckgo',
'q': 'coffee',
})

Search Google

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google',
'q': 'coffee'
})

Search Google Scholar

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_scholar',
'q': 'coffee',
})

Search Google Autocomplete

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_autocomplete',
'q': 'coffee',
})

Search Google Immersive Product

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_immersive_product',
'page_token': 'eyJlaSI6Im5ZVmxaOXVVTDY2X3A4NFBqTnZELUFjIiwicHJvZHVjdGlkIjoiIiwiY2F0YWxvZ2lkIjoiNTE1NDU2NTc1NTc5MzcxMDY3NSIsImhlYWRsaW5lT2ZmZXJEb2NpZCI6IjI1MDkyMjcwMDUzMjk2NzQwODMiLCJpbWFnZURvY2lkIjoiMTYzOTg5MjU0MDcwMDU4MDA1NTQiLCJyZHMiOiJQQ18zNDg4MDE0MTg3ODgxNzc5NjU0fFBST0RfUENfMzQ4ODAxNDE4Nzg4MTc3OTY1NCIsInF1ZXJ5IjoibGcrdHYiLCJncGNpZCI6IjM0ODgwMTQxODc4ODE3Nzk2NTQiLCJtaWQiOiI1NzY0NjI3ODM3Nzc5MTUzMTMiLCJwdnQiOiJoZyIsInV1bGUiOm51bGx9=',
})

Search Google Reverse Image

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',
})

Search Google Events

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_events',
'q': 'Events in Austin',
})

Search Google Local Services

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_local_services',
'q': 'electrician',
'data_cid': '6745062158417646970',
})

Search Google Maps

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',
})

Search Google Jobs

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_jobs',
'q': 'coffee',
})

Search Google Play

importosimportserpapiclient=serpapi.Client(api_key=os.getenv("API_KEY"))
results=client.search({
'engine': 'google_play',
'q': 'kite',
'store': 'apps',
})

Search Google Images

importosimportserpapiclient=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

  1. Update the version in serpapi/__version__.py.
  2. 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 secret:API_KEY (used in smoke-test live search).

Releases

Used by

Contributors

Languages