Update Settings
curl --request POST \
--url https://api.lobstr.io/v1/squids/{squid_hash} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.lobstr.io/v1/squids/{squid_hash}"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.lobstr.io/v1/squids/{squid_hash}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lobstr.io/v1/squids/{squid_hash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lobstr.io/v1/squids/{squid_hash}"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.lobstr.io/v1/squids/{squid_hash}")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lobstr.io/v1/squids/{squid_hash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_bodyGoogle Maps Reviews Scraper
Update Settings
Configure the Google Maps Reviews Scraper parameters
POST
/
v1
/
squids
/
{squid_hash}
Update Settings
curl --request POST \
--url https://api.lobstr.io/v1/squids/{squid_hash} \
--header 'Authorization: <authorization>' \
--header 'Content-Type: <content-type>'import requests
url = "https://api.lobstr.io/v1/squids/{squid_hash}"
headers = {
"Authorization": "<authorization>",
"Content-Type": "<content-type>"
}
response = requests.post(url, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<authorization>', 'Content-Type': '<content-type>'}
};
fetch('https://api.lobstr.io/v1/squids/{squid_hash}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.lobstr.io/v1/squids/{squid_hash}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: <authorization>",
"Content-Type: <content-type>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.lobstr.io/v1/squids/{squid_hash}"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "<authorization>")
req.Header.Add("Content-Type", "<content-type>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.lobstr.io/v1/squids/{squid_hash}")
.header("Authorization", "<authorization>")
.header("Content-Type", "<content-type>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.lobstr.io/v1/squids/{squid_hash}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<authorization>'
request["Content-Type"] = '<content-type>'
response = http.request(request)
puts response.read_bodyConfigure the scraper parameters to control how reviews are collected. These settings determine sorting, filtering, and what data is extracted.
Headers
string
required
Your API authentication token. Value:
Token YOUR_API_KEYstring
required
Request body format. Value:
application/jsonScraper Parameters
Set these parameters in theparams object:
| Parameter | Type | Default | Description |
|---|---|---|---|
| sort_by | string | newest | Sort reviews: newest, most_relevant, highest_rating, or lowest_rating |
| fetch_since | string | null | Stop scraping when items older than this threshold are reached (based on modified_at_datetime). Use a relative duration (24h, 7d, 2w) or an absolute date (YYYY-MM-DD HH:MM:SS) |
| fetch_since_timezone | string | null | Timezone for interpreting an absolute fetch_since date (e.g. Europe/Paris). Only applies when fetch_since is an absolute date — ignored for relative values like 24h or 7d. See supported timezones. |
| max_results | integer | null | Maximum number of reviews to collect per place |
| max_unique_results_per_run | integer | null | Maximum unique results across all tasks in the entire run |
| skip_reviews_without_text | boolean | false | Skip reviews that have no text content |
| skip_reviews_without_image | boolean | false | Skip reviews that have no attached pictures |
| rating_filter | string | All | Filter reviews by star rating. All keeps every review; Minimum rating keeps only reviews at or above min_rating_score; Exact rating keeps only reviews matching min_rating_score exactly |
| min_rating_score | integer | null | Minimum star rating to include (1–5). Used when rating_filter is Minimum rating or Exact rating |
| max_rating_score | integer | null | Maximum star rating to include (1–5). Used with min_rating_score to define a range |
| language | string | English (United States) | Language for extracted reviews |
| review_origin | string | All sources | Filter reviews by source. All sources collects Google reviews and aggregator reviews. Pass a specific aggregator name to filter to that source only |
| functions.get_short_review_link | boolean | false | Collect shortened review links (1 credit per review) |
Squid Settings
You can also configure general squid settings:| Setting | Type | Description |
|---|---|---|
| name | string | Name for your squid configuration |
| concurrency | integer | Number of parallel scraping workers (1-10) |
| export_unique_results | boolean | Only export unique results (deduplicated) |
| run_notify | string | When to send notifications: on_success, on_failure, always, never |
| timezone | string | Timezone for timestamps (e.g., Europe/Paris) |
Use
sort_by: newest to monitor recent reviews for reputation management.Set
fetch_since to limit results to recent reviews only, reducing processing time and costs.Enabling
functions.get_short_review_link costs 1 credit per review. Only enable if you need shortened URLs.Backward compatibility: The old function name
short_link is still accepted but deprecated. Migrate to get_short_review_link.Changes take effect on the next run. Running jobs use the settings from when they started.
Code Examples
curl -X POST "https://api.lobstr.io/v1/squids/b6ab0f03b02e472a8e2ab0b16b4fdd0f" \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Restaurant Reviews Paris",
"concurrency": 1,
"export_unique_results": true,
"run_notify": "on_success",
"timezone": "Europe/Paris",
"params": {
"sort_by": "newest",
"fetch_since": null,
"max_results": 20,
"skip_reviews_without_text": false,
"skip_reviews_without_image": false,
"rating_filter": "All",
"language": "English (United States)",
"functions": {
"get_short_review_link": false
}
}
}'
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.lobstr.io/v1"
headers = {"Authorization": f"Token {API_KEY}"}
squid_id = "b6ab0f03b02e472a8e2ab0b16b4fdd0f"
# Configure scraper settings
response = requests.post(f"{BASE_URL}/squids/{squid_id}",
headers=headers,
json={
"name": "Restaurant Reviews Paris",
"concurrency": 1,
"export_unique_results": True,
"run_notify": "on_success",
"timezone": "Europe/Paris",
"params": {
"sort_by": "newest",
"fetch_since": None,
"max_results": 20,
"skip_reviews_without_text": False,
"skip_reviews_without_image": False,
"rating_filter": "All",
"language": "English (United States)",
"functions": {
"get_short_review_link": False
}
}
}
)
data = response.json()
print(f"Settings updated: {data['name']}")
print(f"Sort by: {data['params']['sort_by']}")
print(f"Max results: {data['params']['max_results']}")
Response
201
{
"name": "Restaurant Reviews Paris",
"no_line_breaks": true,
"params": {
"sort_by": "newest",
"fetch_since": null,
"max_results": 20,
"skip_reviews_without_text": false,
"skip_reviews_without_image": false,
"rating_filter": "All",
"language": "English (United States)",
"functions": {
"get_short_review_link": false
}
},
"to_complete": false,
"run_notify": "on_success",
"export_unique_results": true
}
⌘I