CrustAPI vs SerpApi benchmark Run: July 11, 2026, from a single machine (macOS, residential US connection). Method: identical queries sent to both APIs back to back with SerpApi's no_cache=true (SerpApi serves cached results for repeated queries; caching would fake the timings), wall-clock time measured around each HTTPS request. Keys redacted. Script at the bottom. == WEB SEARCH (4 unique queries, run once each) == Queries: "coffee roasters brooklyn", "how to start an llc", "running shoes for flat feet", "b2b lead generation tools" serpapi GET serpapi.com/search.json?engine=google&no_cache=true timings (ms): 4698, 815, 2937, 1422 -> median 2180 organic results per query: 9, 6, 6, 8 crustapi GET crustapi.com/v1/search?type=web timings (ms): 1245, 1065, 1028, 1036 -> median 1051 organic results per query: 8, 7, 7, 8 Note the variance: SerpApi swung from 0.8s to 4.7s across four queries. CrustAPI stayed within 1.0 to 1.2s. == IMAGES ("latte art", 1 query each, no_cache) == serpapi 8282 ms, 100 images returned crustapi 1657 ms, 99 images returned (from the July 11 serper benchmark run) == QUOTA / BILLING RECEIPT == SerpApi account API (serpapi.com/account.json), same key, before and after the run: before: this_month_usage: 0, total_searches_left: 250 after: this_month_usage: 6, total_searches_left: 244 Every search counted against the monthly quota, including the probe that Google fuzzy-matched. The account object also carries plan_renewal_date: the quota resets monthly. SerpApi is a subscription: Free 250/mo, Starter $25 for 1,000/mo, Developer $75 for 5,000/mo, Production $150 for 15,000/mo, Big Data $275 for 30,000/mo (their public pricing page, July 11, 2026). Their FAQ describes unused searches converting to credits only as a plan-downgrade mechanism. CrustAPI is prepaid credits: purchased credits never expire, there is no renewal date, and a zero-result or failed search is not billed. == HONEST NOTES == - One machine, one day, four queries. SerpApi's spread (0.8s to 4.7s) means single runs vary a lot; run the script yourself before deciding anything. - SerpApi returned an ai_overview field on some queries, which CrustAPI does not have. They also cover 80+ engines beyond Google and offer their Legal US Shield. - Our zero-result billing probe was inconclusive for SerpApi: Google fuzzy-matched the nonsense phrase and returned 9 results, so that search was legitimately successful. We make no claim about SerpApi's zero-result billing. == SCRIPT (python3, stdlib only; put your own keys in) == import json, time, urllib.request, statistics from urllib.parse import quote SERPAPI_KEY='...'; CRUST_KEY='...' QUERIES=['coffee roasters brooklyn','how to start an llc', 'running shoes for flat feet','b2b lead generation tools'] def serpapi(q): t0=time.time() d=json.loads(urllib.request.urlopen( f'https://serpapi.com/search.json?engine=google&no_cache=true&q={quote(q)}&api_key={SERPAPI_KEY}', timeout=60).read()) return (time.time()-t0)*1000, d def crust(q): req=urllib.request.Request( f'https://crustapi.com/v1/search?type=web&q={quote(q)}', headers={'x-api-key': CRUST_KEY}) t0=time.time() d=json.loads(urllib.request.urlopen(req, timeout=60).read()) return (time.time()-t0)*1000, d s,c=[],[] for q in QUERIES: ms,_=serpapi(q); s.append(ms) ms,_=crust(q); c.append(ms) print('serpapi median', statistics.median(s)) print('crust median', statistics.median(c))