Quick answer
How do I make my first SERP API request with SerpCrypto?
Buy a credit pack, copy the API key from your dashboard and send GET https://serpcrypto.com/api/v1/search?q=your+query with the header Authorization: Bearer YOUR_KEY. SerpCrypto answers with the results page as JSON and charges 1 credit only when the search succeeds. 10,000 searches cost $7.50, paid in crypto with no KYC, and credits never expire.
The API at a glance
| Base URL | https://serpcrypto.com/api/v1 |
|---|---|
| Search | GET https://serpcrypto.com/api/v1/search |
| Credits | GET https://serpcrypto.com/api/v1/credits (free) |
| Authentication | An API key in the Authorization header (Bearer) or in the api_key query parameter |
| Engines | Google Search, Google News, Google Images, Google Maps (local results), Google Shopping and Bing |
| Billing | 1 credit = 1 successful search request, which returns one page of results on any supported engine. A request that fails is not charged |
| Credit expiry | Prepaid search credits never expire: unused searches stay on your account until you use them |
| Format | JSON over HTTPS, UTF-8 |
How do I get an API key?
Four steps. No ID, no selfie, no documents, and no email unless you want one.
Open an account
Account-number login; email is optional. Save the account number in a password manager: it is your login.
Top up in crypto
Send at least $25 in BTC, USDT, USDC, ETH, SOL, LTC. The balance is credited after the network confirmations listed on the payment page.
Buy a credit pack
10,000 searches for $7.50 is enough to test every engine. Larger packs bring the rate down to $0.30/1K searches. See pricing.
Copy your key
Your API key appears in your dashboard as soon as you buy a credit pack from your confirmed crypto balance. Keep it in an environment variable named
SERPCRYPTO_API_KEY, never in a code repository.
How do I run my first search with curl?
Export the key once, then send one GET request. The -G flag with --data-urlencode builds the query string and encodes spaces and accents for you. The answer is a single JSON document, and jq keeps it readable in a terminal.
The example asks Google, the default engine, for US results in English. Change q, gl or hl and run it again: each successful run uses one credit.
export SERPCRYPTO_API_KEY="paste-your-key-here"
curl -sG "https://serpcrypto.com/api/v1/search" \
-H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
--data-urlencode "q=best espresso grinder" \
-d gl=us -d hl=en | jq '.organic_results[:3]'How do I run the same search in Python?
Use any HTTP client. With requests, pass the parameters as a dictionary and the key in the header. raise_for_status() turns an error answer, such as 401 for a wrong key, into an exception you can catch.
import os
import requests
API_URL = "https://serpcrypto.com/api/v1/search"
API_KEY = os.environ["SERPCRYPTO_API_KEY"]
response = requests.get(
API_URL,
params={"q": "best espresso grinder", "gl": "us", "hl": "en"},
headers={"Authorization": f"Bearer {API_KEY}"},
timeout=60,
)
response.raise_for_status()
data = response.json()
print("credits used:", data["search_metadata"]["credits_used"])
for result in data.get("organic_results", [])[:3]:
print(result["position"], result["title"], result["link"])And in Node.js?
Node.js 18 and later ship fetch, so no package is needed. Save the file with the .mjs extension to use await at the top level, then run node first-search.mjs.
// first-search.mjs (Node.js 18 or later: fetch and top-level await are built in)
const API_URL = "https://serpcrypto.com/api/v1/search";
const params = new URLSearchParams({ q: "best espresso grinder", gl: "us", hl: "en" });
const response = await fetch(`${API_URL}?${params}`, {
headers: { Authorization: `Bearer ${process.env.SERPCRYPTO_API_KEY}` },
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
const data = await response.json();
console.log("credits used:", data.search_metadata.credits_used);
for (const result of (data.organic_results ?? []).slice(0, 3)) {
console.log(result.position, result.title, result.link);
}How do I check how many credits I have left?
Call GET https://serpcrypto.com/api/v1/credits with the same key. It is free and returns three numbers: credits left, credits used today and how many searches your account may run at the same time. Each account can run a set number of searches at the same time; the limit is shown in your dashboard and raised on request.
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY"{
"credits_remaining": 84210,
"credits_used_today": 1290,
"concurrency_limit": 10
}What comes back from a search?
Every answer has the same frame on all engines. search_metadata says whether the search succeeded and how many credits it used. search_parameters repeats the settings that were applied, defaults included. Then come one array or object per block of the results page, such as organic_results or people_also_ask.
A block is present only when the page shows it, so read it with a default value. The response format page describes every block and field.
{
"search_metadata": { "id": "srch_7f3a9c2e41b8", "status": "success", "engine": "google", "credits_used": 1 },
"search_parameters": { "engine": "google", "q": "best espresso grinder", "gl": "us", "hl": "en", "page": 1 },
"search_information": { "total_results": 18600000, "query_displayed": "best espresso grinder" },
"organic_results": [ { "position": 1, "title": "…", "link": "https://www.example.com/…", "snippet": "…" } ],
"people_also_ask": [ { "question": "…", "snippet": "…", "link": "https://www.example.org/…" } ],
"related_searches": [ { "query": "best espresso grinder under 300" } ],
"pagination": { "current": 1, "next_page": 2 }
}Which parameters will I use first?
The full list, with defaults and allowed values, is in the API reference.
| Parameter | Example | What it does |
|---|---|---|
q | best espresso grinder | The query, as a person would type it. Required. |
engine | google_news | Which engine and vertical to search. Default google. |
gl | de | Country of the results, two letters. Default us. |
hl | de | Language of the interface. Default en. |
location | Austin, Texas, United States | A city-level place for local results. |
device | mobile | desktop (default) or mobile results. |
page | 2 | Results page, 1 to 10. Each page is one credit. |
What does a search cost, and when is it free?
1 credit = 1 successful search request, which returns one page of results on any supported engine. A request that fails is not charged. About 10 organic results per page, as Google has served since it stopped honouring num=100 in September 2025; each extra page is one more credit. A request rejected for a bad parameter, a wrong key, an empty balance or a busy account is free as well, and so is every call to the credits endpoint.
Prices run from $7.50 for 10,000 searches to $0.30/1K searches on the largest pack, as of October 2026. Prepaid search credits never expire: unused searches stay on your account until you use them. The errors page lists each error code and the right way to retry.
Where do I go next?
- API reference: GET /search every parameter, default and error
- Response format each block and field of the JSON
- Locations and languages gl, hl, location, device
- Errors and retries codes, causes, backoff
- Python requests, httpx async, CSV export
- Node.js fetch, a concurrency pool, pagination
- curl and jq one-line recipes
- MCP server web search in Claude Desktop and Cursor
- LangChain and LlamaIndex a search tool for agents
- OpenAI function calling tool schema and the call loop
Quick start questions
Is there an official SerpCrypto SDK?
No. The docs give copy-paste code for Python, Node.js and curl that calls the HTTPS endpoint directly, so there is no package to install or keep up to date. Any language with an HTTP client works the same way: one GET request, one header, one JSON answer.
Can I put the API key in the URL?
Yes. api_key=YOUR_KEY works as a query parameter, which helps for a quick test in a browser. In code, prefer the Authorization: Bearer header: URLs end up in logs, browser history and shared screenshots more often than headers do.
Do I need KYC or a credit card?
No. SerpCrypto asks for no ID, no selfie, no documents and no card. Account-number login; email is optional. You pay in BTC, USDT, USDC, ETH, SOL, LTC from a $25 minimum top-up.
How do I test before buying a large pack?
No free tier: test with the smallest pack, paid from the minimum top-up; the part added only to reach the minimum is refundable on request within 30 days, in USDT or USDC, if unspent. The smallest pack runs on the same endpoint and engines as the largest one, so a test with it tells you what production will look like.