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 Leads Scraper
Update Settings
Configure the Google Maps Leads 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 places are collected. These settings include language, location context, filters, and optional data collection features.
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 |
|---|---|---|---|
| country | string | — | Regional context for search results (e.g., United States) |
| ratings | string | Any rating | Minimum rating filter: Any rating, 2.5+, 3.0+, 3.5+, 4.0+, 4.5+ |
| max_rating | string | Any rating | Maximum rating filter. Combine with ratings to define a score range (e.g. collect only 3–4 star businesses) |
| min_reviews | integer | — | Only collect places with at least this many reviews |
| max_reviews | integer | — | Only collect places with at most this many reviews |
| exact_name_match | boolean | false | Only collect places whose name matches your search query — useful to target a specific brand or chain |
| phone_filter | string | all | Filter by phone presence: all, with_phone, without_phone |
| verified_filter | string | all | Filter by owner-claimed status: all, verified_only, unverified_only |
| language | string | — | Language for place names and metadata (e.g., English (United States)) |
| max_results | integer | unlimited | Maximum places to collect before task ends |
| geo_match | boolean | true | Only return results that geographically match the searched location |
| category_match | boolean | true | Only return results that match the searched business category |
| skip_closed | boolean | false | Skip permanently closed businesses |
| website_filter | string | all | Filter by website presence: all, with_website, without_website |
| skip_without_email | boolean | false | Skip businesses where no email address was found |
Optional Functions
Enable these in theparams.functions object:
| Function | Type | Description |
|---|---|---|
| extract_emails_from_website | boolean | Visit business website to extract email, Facebook, Instagram, and additional phone |
| fetch_business_images | boolean | Collect all image URLs from the Google Place page |
| collect_business_details | boolean | Collect additional metadata like plus_code, poi, health, and last_opening_hours_updated_at |
Enabling
extract_emails_from_website, fetch_business_images, or collect_business_details may incur additional credits.Backward compatibility: The old function names
collect_contacts, images, and details are still accepted but deprecated. Migrate to the new names listed above.Set
export_unique_results: true to avoid duplicate entries when places appear multiple times in search results.Code Examples
curl -X POST "https://api.lobstr.io/v1/squids/YOUR_SQUID_HASH" \
-H "Authorization: Token YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Google Maps Search Export",
"no_line_breaks": true,
"params": {
"country": "United States",
"ratings": "Any rating",
"language": "English (United States)",
"functions": {
"fetch_business_images": true,
"collect_business_details": true,
"extract_emails_from_website": true
},
"max_results": 200
},
"to_complete": false,
"export_unique_results": true
}'
import requests
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://api.lobstr.io/v1"
headers = {"Authorization": f"Token {API_KEY}"}
squid_id = "YOUR_SQUID_HASH"
# Update scraper settings
response = requests.post(f"{BASE_URL}/squids/{squid_id}",
headers=headers,
json={
"name": "Google Maps Search Export",
"no_line_breaks": True,
"params": {
"country": "United States",
"ratings": "Any rating",
"language": "English (United States)",
"functions": {
"fetch_business_images": True,
"collect_business_details": True,
"extract_emails_from_website": True
},
"max_results": 200
},
"to_complete": False,
"export_unique_results": True
}
)
data = response.json()
print(f"Updated: {data['name']}")
print(f"Max results: {data['params']['max_results']}")
Response
201
{
"name": "Google Maps Search Export",
"no_line_breaks": true,
"params": {
"country": "United States",
"ratings": "Any rating",
"language": "English (United States)",
"functions": {
"fetch_business_images": true,
"collect_business_details": true,
"extract_emails_from_website": true
},
"max_results": 200
},
"to_complete": false,
"export_unique_results": true
}
⌘I