Rust SDK
The serpcheap crate is the official Rust client — rustls TLS (no system OpenSSL), a synchronous
blocking client by default.
Install
Section titled “Install”cargo add serpcheapQuickstart
Section titled “Quickstart”use serpcheap::{Client, SearchParams};
fn main() -> Result<(), serpcheap::Error> { let client = Client::builder("YOUR_API_KEY").build()?; let resp = client.search(&SearchParams::new("best running shoes").gl("us"))?;
println!("query: {}", resp.search); for r in &resp.organic { println!("{}. {} — {}", r.position, r.title, r.link); } if let Some(stats) = &resp.stats { println!("balance: {} (cost {})", stats.balance, stats.cost); } Ok(())}Parameters & configuration
Section titled “Parameters & configuration”let params = SearchParams::new("rust language") .gl("gb") // country (default "us") .hl("en") // UI language .tbs("qdr:d") // time filter .page(2); // 1-indexed
use std::time::Duration;use serpcheap::{Client, ClientOptions};
let client = Client::new("YOUR_API_KEY", ClientOptions { base_url: "https://api.serp.cheap".into(), timeout: Duration::from_secs(15), max_retries: 2,})?;Error handling
Section titled “Error handling”use serpcheap::ErrorCode;
match client.search(&SearchParams::new("q")) { Ok(resp) => println!("{} results", resp.organic.len()), Err(err) => match err.code { ErrorCode::InsufficientCredits => eprintln!("top up"), ErrorCode::RateLimited => eprintln!("retry after {:?} ms", err.retry_after_ms), _ if err.is_retryable() => eprintln!("transient: {err}"), _ => eprintln!("error: {err}"), },}