OpenAPI-driven Python SDK for JustSerpAPI with a stable high-level Client as the public entrypoint.
Official Python SDK for JustSerpAPI.
Use this SDK to access JustSerpAPI from Python and fetch structured Google search results without building raw HTTP requests by hand.
Get your API key, product docs, and pricing at justserpapi.com.
pip install justserpapifrom justserpapi import Client
with Client(api_key="YOUR_API_KEY") as client:
response = client.google.search(
query="coffee shops in New York",
location="New York, NY",
language="en",
)
print(response)
print(response["data"])The high-level surface is designed to be the default entrypoint:
from justserpapi import Client
client = Client(api_key="YOUR_API_KEY", timeout=20.0)
search = client.google.search(query="best espresso beans", language="en")
maps = client.google.maps.search(query="espresso bars", location="Shanghai")
news = client.google.news.search(query="OpenAI", language="en")
images = client.google.images.search(query="espresso machine")
shopping = client.google.shopping.search(query="espresso tamper")
overview = client.google.ai.overview(url="https://example.com/ai-overview")
print(search["data"])
client.close()Promoted high-level responses are plain Python dictionaries that mirror the API's JSON response envelope. The SDK does not auto-unpack data.
The public client exposes the common knobs directly:
from justserpapi import Client
from urllib3.util.retry import Retry
client = Client(
api_key="YOUR_API_KEY",
base_url="https://api.justserpapi.com",
timeout=(5.0, 30.0),
retries=Retry(total=5, backoff_factor=0.5),
)
client.close()api_key: value sent in theX-API-Keyheaderbase_url: API host, defaults tohttps://api.justserpapi.comtimeout: default request timeout injected into promoted high-level methodsretries:urllib3retry configuration; defaults to a conservative retry strategy for the high-level client
This repository only owns the Python SDK. The canonical OpenAPI document plus the Python-specific control-plane files in config/, scripts/, and overlays/python/ drive generation and validation.
- If
openapi/justserpapi.openapi.jsonis committed, local generation is fully reproducible. - If it is not committed, CI can fetch and cache it by running
python scripts/sdkctl.py fetch-specwithJUSTSERPAPI_API_KEYconfigured.
If the API changes, update these files:
openapi/justserpapi.openapi.json: the current canonical spec used to validate and generate the SDKopenapi/baseline/justserpapi.openapi.json: the previous released spec snapshot used only for breaking-change checks
Typical maintenance flow after an API change:
cp /path/to/latest-openapi.json openapi/justserpapi.openapi.json
python scripts/sdkctl.py validate-examples
python scripts/sdkctl.py validate-spec
python scripts/sdkctl.py breaking-check
python scripts/sdkctl.py generate --cleanIf this new spec is the one you are about to release, update the baseline after validation:
cp openapi/justserpapi.openapi.json openapi/baseline/justserpapi.openapi.jsonOfficial releases are tag-driven:
python scripts/sdkctl.py validate-examples
python scripts/sdkctl.py verify-release --tag vX.Y.Z
python -m build
git push origin vX.Y.Z- The package version comes from
justserpapi/_version.py - If
openapi/justserpapi.openapi.jsonis committed, itsinfo.versionmust match the tag and package version - GitHub Actions publishes tagged releases to PyPI through Trusted Publishing
Distributed under the MIT License. See LICENSE for more information.
