Overview
Early access. Tell us what you're building and we'll set you up. Contact us
Lempile exposes a SerpApi-compatible Google Search API at https://api.lempile.com.
Fresh browser-backed searches are queue-first. A new request creates an archived search record, returns 202 Accepted, and gives you a search_metadata.json_endpoint to poll. The runner processes the job when capacity is available. Cached successful searches may return 200 OK immediately.
client -> Lempile API -> queue -> runner lease -> browser -> Google -> parser -> archive60-Second Quickstart#
Create a search:
curl -sS "https://api.lempile.com/search.json?engine=google&q=site%3Alinkedin.com%2Fposts%2F%20%22AI%20outreach%22&gl=us&hl=en&tbs=qdr%3Am" \
-H "X-API-KEY: your-api-key"Poll the returned search_metadata.json_endpoint:
curl -sS "https://api.lempile.com/searches/{search_id}.json" \
-H "X-API-KEY: your-api-key"Stop polling when search_metadata.status is Success or Error.
Lifecycle#
| Step | API result | What it means |
|---|---|---|
| Create | 202, status: "Processing" |
The search was accepted and queued. |
| Poll | 202, status: "Processing" |
The search is still queued or running. |
| Success | 200, status: "Success" |
Parsed Google results are available. |
| Error | 200, status: "Error" |
The search finished with a real failure reason. |
Queue-specific fields may appear inside search_metadata:
{
"search_metadata": {
"id": "search_id",
"status": "Processing",
"status_detail": "Queued",
"queued_at": "2026-06-01T08:00:00Z",
"json_endpoint": "https://api.lempile.com/searches/search_id.json"
}
}status_detail can show internal states such as Queued, Running, completed, or a terminal error detail. The public SerpApi-compatible status remains Processing, Success, or Error.
Production Host#
Use the public host:
https://api.lempile.comDo not use staging URLs for production integrations.
Authentication#
Pass an API key with search.write for create routes and search.read for archive routes.
Use either:
X-API-KEYheaderapi_keyquery parameter
Capacity Model#
Production is conservative by design: one active Google browser job per runner by default. Bursts are queued instead of launching unlimited browser sessions.
If a workspace exceeds its queue cap, Lempile returns 429 workspace_search_queue_full.
Was this page helpful?