SERP API

Lấy kết quả tìm kiếm Google tự nhiên theo quốc gia, ngôn ngữ và thiết bị qua một REST API JSON.

Base URL
https://api.serpbest.com/api/v1
Xác thực
X-API-Key: sk_…
Định dạng
application/json

Xác thực

Mọi request phải gửi API key trong header X-API-Key. Key có dạng sk_<prefix>_<secret>.

Tạo key tại trang API key. Giá trị đầy đủ chỉ hiện một lần lúc tạo, hãy lưu vào biến môi trường như SERPBEST_API_KEY và không commit vào code.

Tài khoản phải đang dùng gói có quyền truy cập API, nếu không API trả về 403.

Luồng gọi API

  1. 1Gửi POST /serp/search với từ khoá. Server chờ một khoảng ngắn; nếu kết quả có sẵn (hoặc lấy từ cache) thì trả luôn với status: "success".
  2. 2Nếu status là queued hoặc running, lưu search_id và gọi GET /serp/searches/{search_id} mỗi 2 giây.
  3. 3Dừng khi status là success (đọc organic_results) hoặc failed (đọc error).

Cấu trúc response

Cả hai endpoint trả về cùng một object.

TênKiểuMô tả
search_idstringID lượt tìm kiếm, dùng để poll.
status"queued" | "running" | "success" | "failed"Trạng thái xử lý.
cachedbooleantrue nếu kết quả lấy từ cache.
deduplicatedbooleantrue nếu request được gộp vào một lượt tìm kiếm giống hệt đang chạy.
processing_msinteger | nullThời gian lấy SERP (ms), null khi chưa xong.
search_parametersobjectTham số đã chuẩn hoá: q, gl, hl, device.
organic_results[].positionintegerThứ hạng tự nhiên, bắt đầu từ 1.
organic_results[].linkstringURL đầy đủ của kết quả.
organic_results[].domainstringTên miền của kết quả.
organic_results[].titlestring | nullTiêu đề hiển thị trên Google.
organic_results[].snippetstring | nullĐoạn mô tả hiển thị trên Google.
errorstring | nullLý do thất bại khi status là failed, ngược lại là null.
{
  "search_id": "8f2c4b1e9a7d4c3fb0e6a5d2c1b09e87",
  "status": "success",
  "cached": false,
  "deduplicated": false,
  "processing_ms": 2480,
  "search_parameters": {
    "q": "dịch vụ seo",
    "gl": "vn",
    "hl": "vi",
    "device": "desktop"
  },
  "organic_results": [
    {
      "position": 1,
      "link": "https://example.com/dich-vu-seo",
      "domain": "example.com",
      "title": "Dịch vụ SEO tổng thể",
      "snippet": "Tăng thứ hạng từ khoá bền vững…"
    }
  ],
  "error": null
}

Cache và gộp request

Kết quả cho cùng bộ q + gl + hl + device được cache 60 phút. Response từ cache có cached: true và trả về ngay. Gửi no_cache: true khi cần dữ liệu mới nhất.

Nếu cùng lúc có nhiều request giống hệt nhau, chúng được gộp vào một lượt tìm kiếm (deduplicated: true) nên không phải chờ thêm.

Mỗi search_id được giữ 30 phút; sau đó GET trả về 404.

Giới hạn và mã lỗi

Mỗi tài khoản được tối đa 120 request/phút (cửa sổ trượt 60 giây, tính cả request poll). Khi vượt, API trả 429 kèm header Retry-After.

Lỗi trả về JSON dạng {"detail": "…"}.

HTTPÝ nghĩa
401Thiếu header X-API-Key hoặc key không hợp lệ / đã thu hồi.
403Gói hiện tại không có quyền API, hoặc tài khoản bị khoá.
404Không tìm thấy search_id: sai ID, thuộc tài khoản khác, hoặc đã quá 30 phút.
422Tham số không hợp lệ, ví dụ q rỗng hoặc gl không đủ 2 ký tự.
429Vượt giới hạn request. Chờ theo Retry-After rồi thử lại.
Tài liệu SERP API — SerpBest