Tourist🤳
An open-source, low-cost, serverless application for SERP extraction and web scraping.
Work on LLM projects without worrying about credits, subscriptions, or rate-limits. Tourist is a free alternative to many mainstream SERP API services. Run Tourist on your machine or deploy it into your own AWS account.
[!IMPORTANT]
Tourist is in early development. Features and API's may change unexpectedly.
Overview
Tourist has both Service and Client components. The Service (HTTP API) handles requests from the Client (your app, agent, or scraper scripts). You're in control of both components! None of your data is ever processed or stored by third parties.
Service
Local deployment (for testing...)
[!TIP]
Docker is recommended for running Tourist locally to handle dependencies for headless browsing.
docker run -e X_API_KEY="whatever" -p 8000:8000 ghcr.io/pogzyb/tourist:latest app
If the service came up correctly, you should see:
INFO: Started server process [1]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
Check the docs at http://localhost:8000/docs
🆕 MCP mode available with Azure deployment
docker run -e X_API_KEY="whatever" -p 8000:8000 ghcr.io/pogzyb/tourist:latest mcp
AWS deployment
Prerequisites:
- AWS Account and Credentials
- S3 Bucket for managing an OpenTofu statefile
- Docker
Read about the deployment container in the deploy/ folder.
Example deployment command:
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
--env-file .env \
ghcr.io/pogzyb/tourist-deploy:latest aws deploy \
--state-bucket llmabda-statefile \
--region us-east-1 \
--mode app \
--x-api-key SeCretTK3y
Use your endpoint: https://xxxxxxxx.lambda-url.us-east-1.on.aws (available the deployment outputs)
🆕 Azure deployment
Prerequisites:
- Azure Account and Credentials (ARM_CLIENT_ID, ARM_CLIENT_SECRET, ARM_TENANT_ID, and ARM_SUBSCRIPTION_ID)
- A resource group, storage account, and storage container for managing an OpenTofu statefile
- Docker
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
--env-file .env \
ghcr.io/pogzyb/tourist-deploy:latest azure deploy \
--tofu-resource-group "tofu-resource-group" \
--tofu-storage-account-name "tofustatemanagment" \
--tofu-container-name "statefiles" \
--x-api-key "MyS3creTkeey" \
--mode mcp
Use your endpoint: https://tourist.xxxxxxxx.eastus.azurecontainerapps.io (available the deployment outputs)
[!WARNING]
Tourist uses serverless infrastructure to keep costs extremely low; however these costs will not be $0.00 depending on how heavily you use your API.
[!IMPORTANT]
Tourist uses the X-API-KEY authorization header to protect your API, you should set this value when deploying.
Client
Build your own LLM tools, web scraping apps, or automated testing workflows with the Tourist client.
Python
You can use the python client to interact with your Tourist service. Check out the examples folder for the complete code.
pip install tourist
LLM Tools
import asyncio
from llama_index.llms.ollama import Ollama
from llama_index.core.agent.workflow import FunctionAgent
from tourist.client import TouristScraper
# Assumes you're running locally,
# change this to your lambda endpoint if you've deployed to your aws account.
tourist_scraper = TouristScraper(
func_urls="http://localhost:8000",
x_api_key="whatever",
)
async def search_web(query: str):
"""Search places, items, people, or current events online."""
serp_result = await tourist_scraper.aget_serp(
query, search_engine="duckduckgo", max_results=3
)
return serp_result
async def main():
llm = Ollama(model="ministral-3:3b", request_timeout=120.0)
agent = FunctionAgent(
tools=[search_web],
llm=llm,
system_prompt="You are a helpful assistant that can search the web for information.",
verbose=True,
)
response = await agent.run(
user_msg="Which country has the most medals in the 2026 winter olympics?"
)
print(str(response))
if __name__ == "__main__":
asyncio.run(main())
Metadata
Release files for tourist 0.5.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| tourist-0.5.4.tar.gz | 371.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tourist-0.5.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 390.7 kB
Release files / tourist-0.5.4.tar.gz
| Download URL | tourist-0.5.4.tar.gz |
|---|---|
| Size | 371.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a28db7a8396ff17f6b2ed69b2965e88957a9f681dd102edca7063a72fec8106
|
|
BLAKE2b-256 checksum How to use checksums |
c2f08f57499e8925cb047a975b28a7bf026a7586ad76fb9f4c451060c4009e91
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / tourist-0.5.4-py3-none-any.whl
| Download URL | tourist-0.5.4-py3-none-any.whl |
|---|---|
| Size | 19.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
932ca8dcc51a5da269c2f512b90c874a935fcb21ffad80146fcb852fa5fcd902
|
|
BLAKE2b-256 checksum How to use checksums |
aafc524b9e8156d1ef7b86392f05f0e27ddd8f7344e5fc6ea0dba33e5465c7aa
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Security for tourist 0.5.4
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.