Nhập một địa điểm và Web Unlocker trả về trang đánh giá Google của nó: xếp hạng, số lượt xếp hạng ở từng mức sao, các chủ đề mọi người nhắc đến và những đánh giá hàng đầu kèm nội dung, tính như một trang. Trang tải không được thì không tốn phí.
1.000 yêu cầu miễn phí · Chỉ tính phí khi thành công · 195+ quốc gia · Sẵn sàng cho Claude
Trang Google Maps mất 5 đến 20 giây để tải, và trang trả về trống sẽ được yêu cầu lại. Hệ thống vẫn đang xử lý, bạn không cần nhấp lại.
Sẵn sàng cho các địa điểm của riêng bạn? Nhận API key hoặc đặt lịch demo.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận:
Trang Google Maps của một địa điểm chứa xếp hạng, số lượng ở từng mức sao, các chủ đề mọi người nhắc đến và những đánh giá hàng đầu, và Web Unlocker tính phí nó như một trang. Google Places API tính phí mỗi lệnh gọi và chỉ trả về 5 đánh giá. Các scraper đánh giá tính phí từng đánh giá.
Một trang khó có giá
bằng một trang dễ.
Trang tải không được thì không tốn phí. Bạn trả cho một trang đã render, không gì khác.
Chi phí đánh giá Google cho 1.000 địa điểm
1.000 trang địa điểm kèm đánh giá hàng đầu, theo giá công bố
Web Unlocker ở gói Growth, $0.98 cho 1.000 trang. Các bên còn lại tính phí 3.000 đánh giá trên các trang đó, hoặc 1.000 lệnh gọi với 5 đánh giá mỗi lệnh.
API chính thức dừng ở 5 đánh giá mỗi địa điểm và tính phí mỗi lệnh gọi. Các scraper đánh giá tính phí từng đánh giá. Đây là những gì mỗi hướng đòi hỏi cho cùng 1.000 địa điểm.
| Bạn cần gì | Google Places API | Apify | Outscraper | |
|---|---|---|---|---|
| Bắt đầu mà không cần Google API key | Có | Không | Có | Có |
| Bạn trả tiền cho | Một trang | Mỗi lệnh gọi | Mỗi đánh giá | Mỗi đánh giá |
| 1.000 địa điểm kèm đánh giá hàng đầu | $0.98 | $25 | $1.80 | $9 |
| Xếp hạng chia theo số sao, từ 5 đến 1 | Có | Không, chỉ điểm trung bình | Không | Có |
| Chủ đề đánh giá kèm số lượng | Có | Không | Không | Không |
| Toàn bộ trang ở dạng HTML hoặc Markdown | Có | Không | Không | Không |
Cần thu thập nhiều hơn đánh giá Google? Web Unlocker trả về bất kỳ trang nào theo cùng cách, với cùng mức giá.
Web Unlocker không có cảnh báo riêng. Script của bạn mở trang của từng địa điểm mỗi ngày một lần: khi xếp hạng hoặc số lượng đánh giá thay đổi, nghĩa là có đánh giá mới để đọc. 1.000 địa điểm có giá $0.98 mỗi ngày.
Công cụ theo dõi đánh giá bắt đầu từ $65 mỗi tháng cho mỗi địa điểm.
Một lần kiểm tra của riêng bạn có giá $0.001.
Một yêu cầu cho mỗi địa điểm: gửi địa chỉ Google Maps của địa điểm, nhận lại trang đã render, đọc xếp hạng, số lượng ở từng mức sao, các chủ đề và đánh giá. Bản demo ở trên chạy cùng parser này.
Điền biểu mẫu ở trên. Key sẽ được gửi qua email trong vòng một ngày làm việc.
google.com/maps/search/ cộng với địa điểm và thành phố của nó, và quốc gia để mở trang từ đó.
Trang có xếp hạng, số lượng ở từng mức sao, các chủ đề kèm số lượng và những đánh giá hàng đầu, mỗi đánh giá có tác giả, số sao, ngày và nội dung.
pip install requestsGOLOGIN_SCRAPING_API_KEY=your_key python google_reviews.pyhttps://parsing.webunlocker.gologin.com/v1/scrapeimport json
import os
import re
import time
from urllib.parse import quote_plus
import requests
place = "Franklin Barbecue Austin"
address = f"https://www.google.com/maps/search/{quote_plus(place)}?hl=en&ucbcb=1"
html = ""
for attempt in range(3):
response = requests.get(
"https://parsing.webunlocker.gologin.com/v1/scrape",
headers={"apikey": os.environ["GOLOGIN_SCRAPING_API_KEY"]},
params={
"url": address if attempt == 0 else f"{address}&_r={int(time.time())}",
"render_js": "true",
"wait": "9000",
"geo": "us",
"format": "json",
},
timeout=120,
)
html = response.json().get("data", {}).get("html", "")
if 'data-review-id="' in html:
break
def first(pattern):
match = re.search(pattern, html)
return match.group(1) if match else None
blocks = {}
for match in re.finditer(r'data-review-id="([^"]+)"', html):
blocks.setdefault(match.group(1), match.start())
starts = sorted(blocks.values()) + [len(html)]
reviews = []
for start, end in zip(starts, starts[1:]):
block = html[start:end]
author = re.search(r'class="d4r55[^"]*"[^>]*>([^<]+)<', block)
text = re.search(r'class="wiI7pd"[^>]*>([^<]*)<', block)
if author and text:
stars = re.search(r'aria-label="(\d) stars?"', block)
date = re.search(r'class="rsqaWe"[^>]*>([^<]+)<', block)
reviews.append({
"author": author.group(1),
"stars": int(stars.group(1)) if stars else None,
"date": date.group(1) if date else None,
"text": text.group(1),
})
print(json.dumps({
"name": first(r"<h1[^>]*>([^<]+)"),
"rating": first(r'class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)<'),
"ratings": first(r'aria-label="([\d,]+) reviews?">\('),
"stars": {level: first(rf'aria-label="{level} stars?, ([\d,]+) reviews?"') for level in "54321"},
"topics": dict(re.findall(r'aria-label="([^",]+), mentioned in ([\d,]+) reviews?"', html)),
"reviews": reviews,
}, indent=2, ensure_ascii=False))GOLOGIN_SCRAPING_API_KEY=your_key node reviews-batch.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeconst places = [
'Franklin Barbecue Austin',
'Katz Delicatessen New York',
'Relax and Smile Dental Care Miami',
];
const number = (text) => (text ? Number(text.replace(/,/g, '')) : null);
async function pageOf(place, attempt) {
const address = `https://www.google.com/maps/search/${encodeURIComponent(place).replace(/%20/g, '+')}?hl=en&ucbcb=1`;
const params = new URLSearchParams({
url: attempt === 1 ? address : `${address}&_r=${Date.now()}`,
render_js: 'true',
wait: '9000',
geo: 'us',
format: 'json',
});
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
return (await response.json()).data?.html ?? '';
}
async function reviewsOf(place) {
let html = '';
for (let attempt = 1; attempt <= 3 && !html.includes('data-review-id='); attempt += 1) {
html = await pageOf(place, attempt);
}
const star = (level) => number(html.match(new RegExp(`aria-label="${level} stars?, ([\\d,]+) reviews?"`))?.[1]);
return {
place: html.match(/<h1[^>]*>([^<]+)/)?.[1] ?? place,
rating: number(html.match(/class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)</)?.[1]),
ratings: number(html.match(/aria-label="([\d,]+) reviews?">\(/)?.[1]),
fiveStar: star(5),
oneStar: star(1),
topReview: html.match(/class="wiI7pd"[^>]*>([^<]{0,80})/)?.[1],
};
}
const rows = [];
for (const place of places) rows.push(await reviewsOf(place));
console.table(rows);GOLOGIN_SCRAPING_API_KEY=your_key node reviews-watch.mjshttps://parsing.webunlocker.gologin.com/v1/scrapeimport { readFile, writeFile } from 'node:fs/promises';
const places = ['Franklin Barbecue Austin', 'Katz Delicatessen New York', 'Relax and Smile Dental Care Miami'];
const FILE = 'reviews.json';
const number = (text) => (text ? Number(text.replace(/,/g, '')) : null);
async function pageOf(place, attempt) {
const address = `https://www.google.com/maps/search/${encodeURIComponent(place).replace(/%20/g, '+')}?hl=en&ucbcb=1`;
const params = new URLSearchParams({
url: attempt === 1 ? address : `${address}&_r=${Date.now()}`,
render_js: 'true',
wait: '9000',
geo: 'us',
format: 'json',
});
const response = await fetch(`https://parsing.webunlocker.gologin.com/v1/scrape?${params}`, {
headers: { apikey: process.env.GOLOGIN_SCRAPING_API_KEY },
});
return (await response.json()).data?.html ?? '';
}
async function countOf(place) {
let html = '';
for (let attempt = 1; attempt <= 3 && !html.includes('data-review-id='); attempt += 1) {
html = await pageOf(place, attempt);
}
return {
rating: number(html.match(/class="F7nice[^"]*"[^>]*>\s*<span><span aria-hidden="true">([\d.]+)</)?.[1]),
ratings: number(html.match(/aria-label="([\d,]+) reviews?">\(/)?.[1]),
};
}
const before = JSON.parse(await readFile(FILE, 'utf8').catch(() => '{}'));
const today = { ...before };
for (const place of places) {
const now = await countOf(place);
const was = before[place]?.ratings ?? null;
if (now.ratings === null) console.log(`${place}: no page today, ask again`);
else if (was === null) console.log(`${place}: first check, ${now.ratings} ratings, ${now.rating} stars`);
else if (now.ratings > was) console.log(`${place}: ${now.ratings - was} new, now ${now.ratings} ratings, ${now.rating} stars`);
else console.log(`${place}: nothing new`);
if (now.ratings !== null) today[place] = now;
}
await writeFile(FILE, JSON.stringify(today, null, 2));Cần danh sách địa điểm trước? Scraper Google Maps liệt kê mọi địa điểm của một danh mục trong một thành phố, và mỗi địa điểm là thêm một trang ở đây.
Một tài khoản, một mạng proxy, một hệ sinh thái. Chọn sản phẩm phù hợp với công việc.
Thu thập cả các địa điểm? Xem scraper Google Maps, các scraper Reddit và YouTube, hoặc mọi công cụ thu thập dữ liệu web.
Gửi địa chỉ Google Maps của địa điểm tới Web Unlocker: google.com/maps/search/ cộng với tên và thành phố. Nó mở trang trong một trình duyệt thật từ quốc gia bạn chọn và trả về trang kèm xếp hạng, số lượng ở từng mức sao, các chủ đề mọi người nhắc đến và những đánh giá hàng đầu, mỗi đánh giá có tác giả, số sao, ngày và nội dung. Đoạn code ở trên làm đúng như vậy.
Gửi địa chỉ địa điểm tới Web Unlocker bằng thư viện requests và đọc các trường từ trang. Tab Python ở trên là một script hoàn chỉnh, đã được kiểm thử trên API thật.
Có. Trang Google Maps của một địa điểm là công khai và tải được mà không cần đăng nhập. Web Unlocker trả về nó giống như trình duyệt của một người dùng nhìn thấy, không cần dự án Google Cloud, không cần API key và không cần phê duyệt.
Có hai API chính thức. Google Places API trả về xếp hạng của một địa điểm và tối đa 5 đánh giá, $25 cho 1.000 lệnh gọi. Google Business Profile API trả về mọi đánh giá, miễn phí, nhưng chỉ cho các địa điểm bạn sở hữu hoặc quản lý. Với đánh giá của các địa điểm khác ngoài 5 đánh giá đó, kèm phân bố theo số sao, Web Unlocker trả về chính trang Maps.
Đó là giới hạn được ghi trong tài liệu của nó: Place Details trả về tối đa 5 đánh giá cho mỗi địa điểm, sắp xếp theo mức liên quan, ở SKU có giá $25 cho 1.000 lệnh gọi. Nó cho điểm trung bình mà không có phân bố theo số sao. Trang Maps có số lượng ở từng mức sao và các chủ đề đánh giá, và Web Unlocker trả về toàn bộ trang.
3 đánh giá hàng đầu kèm toàn văn, cùng xếp hạng, số lượng ở từng mức sao và các chủ đề kèm số lượng. Từ tháng 9 năm 2026, Google Maps chỉ hiện danh sách đầy đủ đánh giá của một địa điểm sau khi đăng nhập, nên đó là những gì mọi công cụ đọc trang công khai nhận được. Với các địa điểm của chính bạn, Google Business Profile API liệt kê mọi đánh giá miễn phí.
Không từ trang công khai: Google giữ danh sách đầy đủ và các tùy chọn sắp xếp sau bước đăng nhập Google. Phần còn công khai là phần tóm tắt và các đánh giá hàng đầu, và chúng trả về như một trang với một mức giá.
Việc sắp xếp cũng nằm sau bước đăng nhập. Trang có các đánh giá hàng đầu. Để bắt các đánh giá mới, hãy so sánh số lượng đánh giá và xếp hạng với lần chạy trước: tab Kiểm tra hằng ngày ở trên làm việc đó cho một danh sách địa điểm.
Có: số lượt xếp hạng ở từng mức sao, từ 5 đến 1, cho mọi địa điểm. Franklin Barbecue ở Austin vào ngày chúng tôi kiểm thử: 6.053 lượt năm sao, 695 lượt bốn sao, 285 lượt ba sao, 104 lượt hai sao và 199 lượt một sao.
Có, trong hai bước. Scraper Google Maps liệt kê các địa điểm của một danh mục theo từng ô, rồi mỗi địa điểm là thêm một trang ở đây. 146 nha sĩ ở Miami đến từ 25 trang tìm kiếm; 146 trang đánh giá của họ làm thành 171 trang, khoảng 17 cent tất cả.
Nếu bạn sở hữu hoặc quản lý trang doanh nghiệp, hãy dùng Google Business Profile API: nó liệt kê mọi đánh giá của các địa điểm của bạn miễn phí, 50 đánh giá mỗi trang, sau khi Google phê duyệt dự án của bạn. Web Unlocker dành cho các địa điểm bạn không quản lý.
Web Unlocker trả về trang chứ không phải một bảng, nên không có gì bị cắt trước khi bạn thấy. Chuyển nó thành CSV chỉ cần vài dòng code, hoặc một prompt: đưa trang cho Claude cùng Gologin scraping skill và yêu cầu một file CSV.
Dưới $1 cho 1.000 trang, và cùng một mức giá cho mọi trang: 1.000 địa điểm kèm đánh giá có giá $0.98. Trang tải không được thì không tốn phí. Các gói bắt đầu từ $49 mỗi tháng cho 50.000 yêu cầu.
Có, để bắt đầu: Web Unlocker đi kèm 1.000 yêu cầu miễn phí, đủ cho 1.000 địa điểm kèm đánh giá.
Không. Web Unlocker chọn IP cho bạn, ở hơn 195 quốc gia, và mở trang từ quốc gia bạn chọn.
Tùy vào nhu cầu của bạn. Apify và Outscraper bán các dòng dữ liệu làm sẵn và tính phí từng đánh giá. Web Unlocker trả về toàn bộ trang Maps với một mức giá cho mỗi trang, kèm phân bố theo số sao và các chủ đề mà các dòng dữ liệu bỏ sót, và bạn tự phân tích theo cách của mình.
Trang Maps của một địa điểm là công khai và tải được mà không cần đăng nhập. Web Unlocker tải nó giống như trình duyệt của một người dùng và trả về trang đó. Bạn thu thập gì và dùng ra sao là quyết định của bạn, vì vậy hãy đối chiếu với các quy định áp dụng cho dự án của bạn.
Hãy cho chúng tôi biết đôi nét về đội ngũ của bạn để nhận: