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
- 1Gửi
POST /serp/searchvớ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ớistatus: "success". - 2Nếu
statuslàqueuedhoặcrunning, lưusearch_idvà gọiGET /serp/searches/{search_id}mỗi 2 giây. - 3Dừng khi
statuslàsuccess(đọcorganic_results) hoặcfailed(đọcerror).
Tạo lượt tìm kiếm
Body là JSON. Chỉ q là bắt buộc; các tham số còn lại có giá trị mặc định cho thị trường Việt Nam.
| Tên | Kiểu | Mặc định | Mô tả |
|---|---|---|---|
q | string | Bắt buộc | Từ khoá cần tra, tối đa 100 ký tự. |
gl | string | "vn" | Mã quốc gia 2 ký tự (ISO 3166-1), ví dụ vn, us, jp. Cũng nhận tên country. |
hl | string | "vi" | Mã ngôn ngữ giao diện Google, ví dụ vi, en. Cũng nhận tên language. |
device | "desktop" | "mobile" | "desktop" | Thiết bị mô phỏng khi tìm kiếm. |
no_cache | boolean | false | true để bỏ qua cache và buộc tra mới. |
async | boolean | false | true để trả về ngay (202) mà không chờ, sau đó tự poll kết quả. |
Trả về 200 khi đã có kết quả và 202 khi lượt tìm kiếm còn đang xử lý. Luôn kiểm tra trường status thay vì chỉ dựa vào HTTP status.
curl -X POST "https://api.serpbest.com/api/v1/serp/search" \
-H "X-API-Key: $SERPBEST_API_KEY" \
-H "Content-Type: application/json" \
-d '{"q": "dịch vụ seo", "gl": "vn", "hl": "vi", "device": "desktop"}'Lấy kết quả
Trả về cùng cấu trúc với POST /serp/search. Mỗi lần poll tính vào giới hạn request, nên giữ nhịp khoảng 2 giây. Chỉ key thuộc cùng tài khoản mới đọc được lượt tìm kiếm của mình.
curl "https://api.serpbest.com/api/v1/serp/searches/SEARCH_ID" \
-H "X-API-Key: $SERPBEST_API_KEY"Cấu trúc response
Cả hai endpoint trả về cùng một object.
| Tên | Kiểu | Mô tả |
|---|---|---|
search_id | string | ID lượt tìm kiếm, dùng để poll. |
status | "queued" | "running" | "success" | "failed" | Trạng thái xử lý. |
cached | boolean | true nếu kết quả lấy từ cache. |
deduplicated | boolean | true nếu request được gộp vào một lượt tìm kiếm giống hệt đang chạy. |
processing_ms | integer | null | Thời gian lấy SERP (ms), null khi chưa xong. |
search_parameters | object | Tham số đã chuẩn hoá: q, gl, hl, device. |
organic_results[].position | integer | Thứ hạng tự nhiên, bắt đầu từ 1. |
organic_results[].link | string | URL đầy đủ của kết quả. |
organic_results[].domain | string | Tên miền của kết quả. |
organic_results[].title | string | null | Tiêu đề hiển thị trên Google. |
organic_results[].snippet | string | null | Đoạn mô tả hiển thị trên Google. |
error | string | null | Lý 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 |
|---|---|
| 401 | Thiếu header X-API-Key hoặc key không hợp lệ / đã thu hồi. |
| 403 | Gói hiện tại không có quyền API, hoặc tài khoản bị khoá. |
| 404 | Không tìm thấy search_id: sai ID, thuộc tài khoản khác, hoặc đã quá 30 phút. |
| 422 | Tham số không hợp lệ, ví dụ q rỗng hoặc gl không đủ 2 ký tự. |
| 429 | Vượt giới hạn request. Chờ theo Retry-After rồi thử lại. |