Submit SpiderMaps Job
/api/v1/jobs/spiderMaps/submitOverview
Submit a SpiderMaps job to scrape business data from Google Maps. SpiderMaps uses the Google Maps Places API to extract comprehensive business information.
Best For
- Local business research
- Competitor analysis
- Business directory creation
- Lead generation
- Location-based services
- Market research
Request Body
payloadobjectrequiredJob configuration payload
priorityintegerdefault: 0Job priority (0-10, higher = processed first)
Response
successbooleanWhether the job was successfully queued
job_idstringUnique identifier for the submitted job (UUID format)
typestringAlways spiderMaps for this endpoint
statusstringInitial job status (always queued)
messagestringConfirmation message
Example Request
- cURL - Full URL
- cURL - With Specific Fields
- Python
- JavaScript
curl -X POST https://spideriq.ai/api/v1/jobs/spiderMaps/submit \
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://www.google.com/maps/place/Googleplex/@37.4220656,-122.0840897"
}'
curl -X POST https://spideriq.ai/api/v1/jobs/spiderMaps/submit \
-H "Authorization: Bearer <your_token>" \
-H "Content-Type: application/json" \
-d '{
"url": "https://maps.app.goo.gl/ABC123",
"fields": ["name", "address", "phone", "website", "rating", "review_count"]
}'
import requests
url = "https://spideriq.ai/api/v1/jobs/spiderMaps/submit"
headers = {
"Authorization": "Bearer <your_token>",
"Content-Type": "application/json"
}
data = {
"url": "https://www.google.com/maps/place/Statue+of+Liberty/@40.6892,-74.0445"
}
response = requests.post(url, headers=headers, json=data)
job = response.json()
print(f"Job ID: {job['job_id']}")
const response = await fetch(
'https://spideriq.ai/api/v1/jobs/spiderMaps/submit',
{
method: 'POST',
headers: {
'Authorization': 'Bearer <your_token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: 'https://www.google.com/maps/place/Eiffel+Tower/@48.8584,2.2945',
fields: ['name', 'address', 'phone', 'website', 'rating']
})
}
);
const job = await response.json();
console.log('Job ID:', job.job_id);
Example Response
{
"success": true,
"job_id": "660e8400-e29b-41d4-a716-446655440001",
"type": "spiderMaps",
"status": "queued",
"message": "SpiderMaps job queued successfully"
}
SpiderMaps Results Structure
When the job completes, results will include:
data.business_namestringOfficial business name
data.addressstringFull formatted address
data.phonestringPhone number (raw format as displayed on Google Maps)
data.phone_e164stringPhone number in E.164 international format (v2.7.0+)
Example: +33147075514
data.phone_nationalstringPhone number in national format (v2.7.0+)
Example: 01 47 07 55 14
data.phone_typestringPhone number type detected by libphonenumber (v2.7.0+)
Values: MOBILE, FIXED_LINE, FIXED_LINE_OR_MOBILE, VOIP, TOLL_FREE, PREMIUM_RATE, UNKNOWN
data.phone_validbooleanWhether the phone number format is valid (v2.7.0+)
Note: Invalid numbers still include phone field with raw value.
data.image_urlstringPermanent URL to business image stored in SeaweedFS (v2.7.0+)
Format: https://media.spideriq.ai/vibe/gmaps_{place_id}_1.jpg
Note: Returns Google URL as fallback if storage fails. Null if no images available.
data.websitestringBusiness website URL
data.ratingnumberGoogle Maps rating (1.0 - 5.0)
data.review_countintegerTotal number of Google reviews
data.hoursobjectBusiness hours by day of week
Example:
{
"monday": "9:00 AM - 5:00 PM",
"tuesday": "9:00 AM - 5:00 PM",
"wednesday": "9:00 AM - 5:00 PM",
"thursday": "9:00 AM - 5:00 PM",
"friday": "9:00 AM - 5:00 PM",
"saturday": "Closed",
"sunday": "Closed"
}
data.categoriesarrayBusiness categories/types
Example: ["Restaurant", "Italian Restaurant", "Pizza Place"]
data.place_idstringGoogle Maps Place ID (unique identifier)
data.coordinatesobjectLatitude and longitude
Example: {"lat": 37.4220, "lng": -122.0841}
data.photosarrayURLs to business photos
data.price_levelstringPrice range indicator ($ to $$$$)
data.popular_timesobjectHourly popularity data (if available)
data.fuzziq_uniquebooleanWhether this business is unique in your dataset (v2.18.0+)
true: First time this business has been seenfalse: This business is a duplicate of a previously scraped record
Note: Only present when fuzziq_enabled is true (default)
Complete Results Example
{
"success": true,
"job_id": "660e8400-e29b-41d4-a716-446655440001",
"type": "spiderMaps",
"status": "completed",
"data": {
"name": "La Réserve Du Terroir",
"address": "13 R. Quincampoix, 75004 Paris, France",
"phone": "33147075514",
"phone_e164": "+33147075514",
"phone_national": "01 47 07 55 14",
"phone_type": "FIXED_LINE",
"phone_valid": true,
"website": "https://la-reserve-du-terroir-paris.com",
"rating": 4.6,
"reviews_count": 1385,
"categories": ["French restaurant", "Wine bar"],
"place_id": "ChIJkxq-0GRv5kcR5q-bLdl_5lY",
"google_place_id": "ChIJkxq-0GRv5kcR5q-bLdl_5lY",
"coordinates": {
"latitude": 48.859703,
"longitude": 2.349799
},
"image_url": "https://media.spideriq.ai/vibe/gmaps_ChIJkxq-0GRv5kcR5q-bLdl_5lY_1.jpg",
"amenities": ["Dine-in", "Takeaway", "Delivery"],
"accessibility": "Wheelchair-accessible car park",
"fuzziq_unique": true
}
}
v2.18.0 FuzzIQ Deduplication:
fuzziq_unique:trueif this business is new,falseif duplicate- Use
fuzziq_unique_only: truein request to filter out duplicates
v2.7.0 Phone Validation:
phone_e164: E.164 formatted phone numberphone_national: Locally formatted phone numberphone_type: Type of phone (MOBILE, FIXED_LINE, VOIP, etc.)phone_valid: Whether the phone is validimage_url: Permanent hosted image URL
Use Cases
Local Business Research
# Research all coffee shops in a city
urls = [
"https://www.google.com/maps/place/Coffee+Shop+A",
"https://www.google.com/maps/place/Coffee+Shop+B",
"https://www.google.com/maps/place/Coffee+Shop+C"
]
for url in urls:
response = requests.post(
"https://spideriq.ai/api/v1/jobs/spiderMaps/submit",
headers=headers,
json={"url": url}
)
Competitor Analysis
# Extract specific competitor data
data = {
"url": "https://www.google.com/maps/place/Competitor+Restaurant",
"fields": ["name", "rating", "review_count", "hours", "price_level"]
}
Lead Generation
# Extract contact information for outreach
data = {
"url": "https://www.google.com/maps/place/Potential+Client",
"fields": ["name", "phone", "website", "address"]
}
Finding Google Maps URLs
Method 1: Search on Google Maps
- Go to Google Maps
- Search for the business
- Copy the URL from the address bar
Method 2: Short URLs
Click "Share" on Google Maps and copy the short URL:
https://maps.app.goo.gl/ABC123xyz
Method 3: Place ID
If you have a Place ID, you can use it directly:
ChIJN1t_tDeuEmsRUsoyG83frY4
Processing Time
- Average: 3-8 seconds per business
- With photos: Add 2-5 seconds
Limitations
API Quota: Google Maps API has daily quota limits. If quota is exceeded, jobs will fail with an error message.
Data accuracy: Data is sourced directly from Google Maps and is as accurate as Google's information.
Batch processing: Submit multiple jobs concurrently for faster bulk scraping (respecting rate limits).
Error Cases
Invalid URL
{
"detail": "Invalid Google Maps URL. Please provide a valid maps.google.com URL or Place ID."
}
Business Not Found
{
"success": false,
"job_id": "660e8400-e29b-41d4-a716-446655440001",
"status": "failed",
"error": "Business not found at provided URL"
}
API Quota Exceeded
{
"success": false,
"job_id": "660e8400-e29b-41d4-a716-446655440001",
"status": "failed",
"error": "Google Maps API quota exceeded. Please try again later."
}